java集合解惑

来源:互联网 发布:英国本科留学条件知乎 编辑:程序博客网 时间:2024/05/20 01:09
在没有集合之前,所用的是数组
数组的特点是快,长度固定,且只能存放同一类型的数据。

由于数组的局限,所以出现了集合Collection,按我的理解最早应该先有list集合,
list集合特点
可以存放多种类型的数据。且可以自动扩容,
1,ArrayList(数组列表):见名知意,底层为数组的集合,解决了长度固定且类型单一的缺点。
     同时设计了线程安全的 Vector(效率低)。
2,LinkedList:又有了新的问题,查询速度快,可是不方便增减元素,于是出现了LinkedList,底层使用链表结构,便于增减。

Set集合
再后来,人们觉得list可以存放重复的元素,想要一种集合不能存放重复的元素于是就有了Set
1,HashSet:底层通过封装HashMap(一会讲)实现,而HashMap底层也是数组
                        而hash算法可以保证集合的快速查找
2,TreeSet:底层为树结构,为了实现排序
3,LinkedHashSet:底层为链表。具有HashSet的查询速度,利用链表维护元素的顺序。

Map
在有了上面两个集合之后,(我的理解)人们又有了新的问题,比如一个集合存了好多好多元素,如果都有用的话,
那么我可以遍历去取,倒没什么,但是如果我想随机去访问一个我想要的元素,我却根本不知道他在哪里,难道我要说,他在
下标为32871的位置吗?哈哈哈
但是有了map,存储数据以键值对的方式去存储(key-value)我就可以随意去访问我想要的东西,
1,HashMap:底层以table数组实现(内部类) ,但由于有Entry才构成了table数组的项为链表
     Hashtable:为了线程安全

2,TreeMap:树结构,为了实现排序

以上是我个人自己的理解,如有不对的地方,欢迎各路大神,一一指出或补充

0 0
原创粉丝点击