JAVA 集合类小结

一 集合和数组 因为本人也是个go的爱好者,所以对于集合类算是摸的比较透的。 说到集合,必须了解数组和集合。 Java的数组长度固定,集合长度不定。集合是特定的数据结构的集合。 而go里面并没有集合,而是叫数组,切片和键值对。数组同样长度固定,切片键值对长度不固定,键值对是k-v结构。 go和Java的不同就是,切片和键值对要自己写方法成为特定的数据结构,才能合Java的集合类差不多。 也就是说Java的集合其实是Java开发者为了开发方便,定义的一系列数据结构的。那么只要理解java几个数据结构的特性那么就很好理解了。 二 基本接口 map,Iterable,collection 最上层的接口 map和Iterable。 map是键值对,Iterable是集合的迭代子。迭代子理解起来,就是集合每个元素的一个包装 次顶层的接口 collection实现Iterable接口,提供了按索引取值的方法。 这里可以看出collection对应go的切片,map和map对应。 三 数据类型接口 map,list,set list,set实现collection接口。 list是有序,可重复的数据。 set是无序、不能重复数据。 map是键值对、键不可重复、值可重复。 四 数据功能区分 在上面说的三大类型下,根据线程安全,查询速度快,插入速度快,排序又有四个功能分类。 红色为面试常问结构 排序           TreeSet,LinkedHashSet  TreeMap,LinkedHashMap 线程安全  vector    synchronizedSet      Hashtable,ConcurrentHashMap 查询速度快 ArrayList   HashSet          HashMap 插入速度快 LinkedList  HashSet          HashMap   list本来就是有序的,所以排序为空。 HashSet,HashMap为什么插入查询快的原因则是,因为用了hash算法。 LinkedHashSet和LinkedHashMap虽然本质上只是HashSet,HashMap实现了排序接口,但是插入的时候就排序,所以较慢。 TreeSet,TreeMap本身是按红黑树结构排序,但也能重写排序接口。 synchronizedSet是Colletions这个工具类里,算是冷门知识点。 五 数据结构的实用性 第一,1.8引入了Stream之后,排序基本可以不用了,因为排序的使用次数低,我们不必保证数据插入或者查询一定有序。只需要我们取出来的时候有序即可,而Stream特性则大大的简化了我们自己写排序的代码量。 第二,分布式下考虑单机的线程安全简直杀鸡用牛刀。基本synchronized,lock,原子类,Volidate之类的就行了。 第三,插入速度快,降低io操作硬盘操作写操作,基本是每个系统到了后期性能提升一定要考虑的事情。 综上,我们基本使用查询快的类就好了。 六 遍历 1.遍历迭代子Iterator,而不直接遍历对象 2.for循环结束,立马回收Iterator 复制代码 for (Iterator it = map.entrySet().iterator(); it.hasNext(); ) { Map.Entry e = (Map.Entry) it.next(); System.out.println("键" + e.getKey() + "的值为" + e.getValue()); } 复制代码 3.对数据的删除修改操作,要用迭代子实现(否则可能出现线程安全问题) 复制代码 for (Iterator> iterator = map.entrySet().iterator(); iterator.hasNext();) { Entry entry = iterator.next(); long key = entry.getKey(); if (key < 10) { iterator.remove(); } } 复制代码https://www.cnblogs.com/ydymz/p/10063888.html
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信