Java中各种集合总结(一)
(一)集合与数组
数组:(存基本数据类型)-->存对象的一种容器,长度固定,【不适合在对象数量未知的情况下使用】
集合:(存对象,对象类型可以不一样)-->长度可变,可在多数情况下使用。
(二)层次关系
1.0 如图所示:图中,实线边框的是实现类,折线边框的是抽象类,而点线边框的是接口:
2.0 其中集合的 详解
①Collection接口【集合类 ”根接口“;Java中没有这个接口的直接实现类】----(有两个儿子)---->
List:(有序、重复)--(又有俩儿儿子)-->
ArrayList:底层数据结构--->【动态数组 ;线程不安全,效率高】--->查询快,增删慢【移动所有数据】。
LinkedList :底层数据结构--->【链表;线程不安全,效率高】--->查询慢,增删快。【特别适用于批量插入、删除数据】
Vector:底层数据结构--->【数组;线程安全,效率低】-->查询快,增删慢
Set:(无序、唯一)--->提供了按索引访问的方式。
HashSet:底层结构--->【哈希表---依赖俩儿方法->hashCode()和equals()】(一般规则:对象equals 是true的话,hashCode需要相同,但是hashCode相同的对象不一定equals,这就是所谓的冲突现象,但是有不同的冲突解决方法。你的hashCode()设计的好的话冲突也就小了。比如楼上给出的超出int范围之后这种hashCode()实现,对象肯定是无数的,但是hash实现是有限的呢,所以冲突了。)
TreeSet: 底层结构--->【红黑树】:一种自平衡的二叉树。返回值是否为0-->唯一性;
LinkedHashSet【有序,不重复】:底层结构--->【链表和哈希表】链表保证有序;哈希表保证-->唯一
②Map:(键值对、键唯一、值不唯一)与Collection接口独立的,另一个接口。--->Map包含了key-value对。Map不重复的key,但可有相同的value。
HashMap:底层结构-->【哈希表;线程不安全,效率高--依赖俩儿方法-->hashCode()和equals()判断是否添加到集合】
Hashtable:底层结构--->【哈希表;线程安全,效率低】-->依赖俩儿方法->hashCode()和equals()
LinkedHashMap: 底层结构--->【链表和哈希表】:链表保证有序;哈希表保证唯一。
TreeMap: 底层结构--->【红黑树】返回值是否为0-->唯一性
③Iterator:所有的集合类-->都实现这个接口。【遍历集合中元素的接口】用法:
(1)hasNext()是否还有下一个元素。
(2)next()返回下一个元素。
(3)remove()删除当前元素。
3.0 几种重要接口和类的对比: