前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JAVA 集合类小结

JAVA 集合类小结

作者头像
ydymz
发布2018-12-24 10:04:38
5200
发布2018-12-24 10:04:38
举报
文章被收录于专栏:lgp20151222

一 集合和数组

因为本人也是个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

代码语言:javascript
复制
   for (Iterator it = map.entrySet().iterator(); it.hasNext(); ) {
            Map.Entry e = (Map.Entry) it.next();
            System.out.println("键" + e.getKey() + "的值为" + e.getValue());
   }

3.对数据的删除修改操作,要用迭代子实现(否则可能出现线程安全问题)

代码语言:javascript
复制
 for (Iterator<Entry<Long, String>> iterator = map.entrySet().iterator(); iterator.hasNext();) {
            Entry<Long, String> entry = iterator.next();
            long key = entry.getKey();
            if (key < 10) {
                iterator.remove();
            }
 }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-12-04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一 集合和数组
  • 二 基本接口 map,Iterable,collection
  • 三 数据类型接口 map,list,set
  • 四 数据功能区分
  • 五 数据结构的使用
  • 六 遍历
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档