当前位置: 首页 > news >正文

网站注册便宜计算机类17个专业

网站注册便宜,计算机类17个专业,云南seo网站关键词优化软件,wordpress 联系我们 制作collection集合Map集合Hashtable和HashMap的区别#xff1a;Hashtable的方法是同步的#xff0c;而HashMap的方法不是。HashMap可以将空值作为一个表的条目的key或value。Collection接口Collection接口是List、Set和Queue接口的父接口#xff0c;该接口里定义的方法既可用于…collection集合Map集合Hashtable和HashMap的区别Hashtable的方法是同步的而HashMap的方法不是。HashMap可以将空值作为一个表的条目的key或value。Collection接口Collection接口是List、Set和Queue接口的父接口该接口里定义的方法既可用于操作Set集合也可用于操作List和Queue集Collection提供了大量添加、删除、访问的方法来访问集合元素。主要的方法如下Java中的集合类包含的内容很多而且很重要很多数据的存储和处理(排序去重筛选等)都需要通过集合类来完成。首先java中集合类主要有两大分支(1)Collection (2)Map先看它们的类图(1)Collection(2)Map可以看到它们之间的关系纷繁复杂如果不系统的学习一下还真是不知道有什么区别该怎么选择。由于HashSet的内部实现原理是使用了HashMap所以我们的学习路线为先学习Map集合类然后再来学习Collection集合类。(1)HashMap和Hashtable ( 注意table是小写的t搞不懂为什么要这样老是会写错。。。)首先来看HashMap和HashTable这两兄弟经常被放到一起来比较那么它们有什么不一样呢a.HashMap不是线程安全的HashTable是线程安全的其线程安全是通过Sychronize实现。b.由于上述原因HashMap效率高于HashTable。c.HashMap的键可以为nullHashTable不可以。d.多线程环境下通常也不是用HashTable因为效率低。HashMap配合Collections工具类使用实现线程安全。同时还有ConcurrentHashMap可以选择该类的线程安全是通过Lock的方式实现的所以效率高于Hashtable。好比较了他们的不一样后来讲讲它们的原理。数组链表哈希表。各有优劣顺便提一下数组连续内存空间查找速度快增删慢链表充分利用了内存存储空间是不连续的首尾存储上下一个节点的信息所以寻址麻烦查找速度慢但是增删快哈希表呢综合了它们两个的有点一个哈希表由数组和链表组成。假设一条链表有1000个节点现在查找最后一个节点就得从第一个遍历到最后一个如果用哈希表将这条链表分为10组用一个容量为10数组来存储这10组链表的头结点(a[0] 0 , a[1] 100 , a[2] 200 …)。这样寻址就快了。HashMap实现原理就是上述原理了当然其具体实现还有很多其他的东西。Hashtable同理只不过做了同步处理。Hash碰撞不同的key根据hash算法算出的值可能一样如果一样就是所谓的碰撞。优化措施(1) HashMap的扩容代价非常大要生成一个新的桶数组然后要把所有元素都重新Hash落桶一次几乎等于重新执行了一次所有元素的put。所以如果我们对Map的大小有一个范围的话可以在构造时给定大小一般大小设置为(int) ((float) expectedSize / 0.75F 1.0F)。(2) key的设计尽量简洁。HashMap一些功能实现a.按值排序HashMap按值排序通过Collections的sort方法在实现排序之前我们先看看HashMap的几种遍历方式//Collection And Mappublic static void testCM(){//CollectionMap hs new HashMap();int i 0;hs.put(199, 序号:201);while(i50){hs.put(i, 序号:i);i;}hs.put(-1, 序号:200);hs.put(200, 序号:200);//遍历方式一:for each遍历HashMap的entryset注意这种方式在定义的时候就必须写成//Map hs不能写成Map hs;for(Entry entry : hs.entrySet()){System.out.println(key:entry.getKey() value:entry.getValue());}//遍历方式二使用EntrySet的IteratorIterator iterator hs.entrySet().iterator();while(iterator.hasNext()){Entry entry iterator.next();System.out.println(key:entry.getKey() value:entry.getValue());};//遍历方式三for each直接使用HashMap的keysetfor(Integer key : hs.keySet()){System.out.println(key:key value:hs.get(key));};//遍历方式四使用keyset的IteratorIterator keyIterator hs.keySet().iterator();while(keyIterator.hasNext()){Integer key (Integer)keyIterator.next();System.out.println(key:key value:hs.get(key));}}(1)使用keyset的两种方式都会遍历两次所以效率没有使用EntrySet高。(2)HashMap输出是无序的这个无序不是说每次遍历的结果顺序不一样而是说与插入顺序不一样。接下来我们看按值排序注释比较详细就不赘述过程了。//对HashMap排序public static void sortHashMap(Map hashmap){System.out.println(排序后);//第一步用HashMap构造一个LinkedListSet sets hashmap.entrySet();LinkedList linkedList new LinkedList(sets);//用Collections的sort方法排序Collections.sort(linkedList , new Comparator(){Overridepublic int compare(Entry o1, Entry o2) {// TODO Auto-generated method stub/*String object1 (String) o1.getValue();String object2 (String) o2.getValue();return object1.compareTo(object2);*/return o1.getValue().compareTo(o2.getValue());}});//第三步将排序后的list赋值给LinkedHashMapMap map new LinkedHashMap();for(Entry entry : linkedList){map.put(entry.getKey(), entry.getValue());}for(Entry entry : map.entrySet()){System.out.println(key:entry.getKey() value:entry.getValue());}}b.按键排序HashMap按键排序要比按值排序方法容易实现而且方法很多下面一一介绍。第一种还是熟悉的配方还是熟悉的味道用Collections的sort方法只是更改一下比较规则。第二种TreeMap是按键排序的默认升序所以可以通过TreeMap来实现。public static void sortHashMapByKey(Map hashmap){System.out.println(按键排序后);//第一步先创建一个TreeMap实例构造函数传入一个Comparator对象。TreeMap treemap new TreeMap(new Comparator(){Overridepublic int compare(Integer o1,Integer o2) {// TODO Auto-generated method stubreturn Integer.compare(o1, o2);}});//第二步将要排序的HashMap添加到我们构造的TreeMap中。treemap.putAll(hashmap);for(Entry entry : treemap.entrySet()){System.out.println(key:entry.getKey() value:entry.getValue());}}第三种可以通过keyset取出所有的key然后将key排序再有序的将key-value键值对存到LinkedHashMap中这个就不贴代码了有兴趣的可以自己去尝试一下。c.value去重对于HashMap而言它的key是不能重复的但是它的value是可以重复的有的时候我们要将重复的部分剔除掉。方法一将HashMap的key-value对调然后赋值给一个新的HashMap由于key的不可重复性此时就将重复值去掉了。最后将新得到的HashMap的key-value再对调一次即可。d.HashMap线程同步第一种Map hs new HashMap();hs Collections.synchronizedMap(hs);第二种ConcurrentHashMap hs new ConcurrentHashMap();(2)IdentifyHashMapIdentityHashMap与HashMap基本相似只是当两个key严格相等时即key1key2时它才认为两个key是相等的 。IdentityHashMap也允许使用null但不保证键值对之间的顺序。(3)WeakHashMapWeakHashMap与HashMap的用法基本相同区别在于后者的key保留对象的强引用即只要HashMap对象不被销毁其对象所有key所引用的对象不会被垃圾回收HashMap也不会自动删除这些key所对应的键值对对象。但WeakHashMap的key所引用的对象没有被其他强引用变量所引用则这些key所引用的对象可能被回收。WeakHashMap中的每个key对象保存了实际对象的弱引用当回收了该key所对应的实际对象后WeakHashMap会自动删除该key所对应的键值对。接下来是Collection接口及其子类(4)ArrayList , LinkedList , Vector(1)首先说说它们的关系和区别。ArrayList和Vector本质都是用数组实现的而LinkList是用双链表实现的所以Arraylist和Vector在查找效率上比较高增删效率比较低LinkedList则正好相反。ArrayList是线程不安全的Vector是线程安全的效率肯定没有ArrayList高了。实际中一般也不怎么用Vector,可以自己做线程同步也可以用Collections配合ArrayList实现线程同步。(2)Tips前面多次提到扩容的代价很高所以如果能确定容量的大致范围就可以在创建实例的时候指定注意这个仅限于ArrayList和Vector哟ArrayList arrayList new ArrayList(100);arrayList.ensureCapacity(200);Vector vector new Vector(100);vector.ensureCapacity(200);(3)其他功能实现a.排序List的排序的话就是使用Collections的sort方法构造Comparator或者让List中的对象实现Comparaable都可以这里就不贴代码了。b.去重第一种用Iterator遍历遍历出来的放到一个临时List中放之前用contains判断一下。第二种利用set的不可重复性,只需三步走。//第一步用HashSet的特性去重HashSet tempSet new HashSet(arrayList);//第二步将arrayList清除tempSet.clear();//第三步将去重后的重新赋给ListarrayList.addAll(tempSet);(5)StackStack呢是继承自Vector的所以用法啊线程安全什么的跟Vector都差不多只是有几个地方需要注意第一add()和push()stack是将最后一个element作为栈顶的所以这两个方法对stack而言是没什么区别的但是它们的返回值不一样add()返回boolean就是添加成功了没有push()返回的是你添加的元素。为了可读性以及将它跟栈有一丢丢联系推荐使用push。第二peek()和pop()这两个方法都能得到栈顶元素区别是peek()只是读取对原栈没有什么影响pop()从字面上就能理解出栈所以原栈的栈顶元素就没了。(6)HashSet和TreeSetSet集合类的特点就是可以去重它们的内部实现都是基于Map的用的是Map的key所以知道为什么可以去重复了吧。 既然要去重那么久需要比较既然要比较那么久需要了解怎么比较的不然它将1等于2了你怎么办比较是基于hascode()方法和equals()方法的所以必要情况下需要重新这两个方法。好了到了总结的时候了其实你会发现集合类虽然看起来多但是都是很有规律的。ArrayList,LinkedList一个无序一个有序HashSet,TreeSet一个无序一个有序HashMap,LinkedHasmMap,一个无序一个有序Vector和HashTableStack是线程安全的但是效率低线程不安全的类都可以配合Collections得到线程安全的类。
http://www.zqtcl.cn/news/679276/

相关文章:

  • 网站改版工作方案网站设计技能培训
  • 佳木斯市网站建设淄博网站开发招聘
  • 学习软件的网站先备案先建网站
  • 建立网站 知乎常州网站制作机构
  • 洛阳建设网站上海高端室内设计事务所
  • 做高清图的网站wordpress分类自定义文字
  • 创建站点如何做网站如何利用分类信息网站做推广
  • wordpress 拍卖插件找文网优化的技术团队
  • 建站素材网自助餐火锅网站建设
  • 企业型网站建设方案农村电商网站设计与发展现状
  • 建站快车凡科企业网站建设合同(一)
  • 阜平网站建设在广州做seo找哪家公司
  • 怎么做农家乐联盟网站六安建设机械网站
  • 网站开发行业标准江苏网站开发公司
  • 服装技术支持东莞网站建设如何加强企业网站建设论文
  • 中英双语网站怎么做深圳勘察设计协会
  • 用dw做网站维护教程梧州网站建设制作
  • 网站代运营公司有哪些深圳小区封闭最新通知
  • 江西网站设计服务网站开发所需费用明细
  • 深圳网站建设公司jm3q编程网站免费中文版
  • 泉州专门制作网站如何在小红书上做推广
  • 网站改版活动微网站开发一般费用多少钱
  • 网站关键词挖掘顺德网站制作案例价位
  • 广广东网站建设企业网站无锡
  • 广州网站备案号wordpress模板专题页
  • 西安做网站哪里价格低综合查询
  • 电商需要多少投入沈阳网站关键词优化
  • 速拓科技是做网站百度推广登陆入口官网
  • 十大高端网站设计网站开发培训达内
  • 河北云网站建设怎么让别人找你做网站