JAVA集合简介

Collection和Map,是集合框架的根接口。

1、Collection

1.1、List

有序列表(FIFO),可存放重复元素。

1.1.1、ArrayList

数组结构(查询快,增删慢),线程不安全。

自动扩容机制

  1. 首先得到当前elementData属性的长度oldCapacity。
  2. 然后通过判断oldCapacity和minCapacity参数谁大来决定是否需要扩容, 如果minCapacity大于 oldCapacity,那么我们就对当前的List对象进行扩容。
  3. 扩容的的策略为:取(oldCapacity * 3)/2 + 1和minCapacity之间更大的那个。
  4. 然后使用数组拷贝的方法,把以前存放的数据转移到新的数组对象中。新添加的元素放在新的数组对象中。
  5. 如果minCapacity不大于oldCapacity那么就不进行扩容。

1.1.2、LinkedList

双向链表结构(查询慢,增删块),线程不安全。

1.1.3、Vector

数组结构(查询快,增删慢),线程安全。

1.2、Set

无序存储,不可存放重复元素。强调一无二的性质。底层的本质其实就是对应的Map,存放的元素就是在Map的key中存放的。

1.2.1、HashSet

哈希表结构,通过hashCode()与equals()方法保证元素唯一。线程不安全。

注意:两个对象相同的话,则hash值一定相同,但是hashCode值一样的两个对象并不一定相同,因为存在hash值冲突。并且如果重写了保存在HashSet中对象的equals()方法,则一定要重写hashCode()方法。

HashSet过滤重复元素:调用元素HashCode获得哈希码 --> 判断哈希码是否相等,不相等则录入 --> 相等则判断equals()后是否相等,不相等在进行 hashcode录入,相等不录入。

1.2.2、LinkedHashSet

HashSet的子类。链表+哈希表结构,用一个链表来维护元素的插入顺序,所以是有序的。线程不安全。

1.2.3、TreeSet

红黑树结构,有序。线程不安全。

1.3、Comparable和Comparator

  • Comparable是排序接口:若一个类实现了Comparable接口,就意味着“该类支持排序”。

  • Comparator是比较器:我们若需要控制某个类的次序,可以建立一个“该类的比较器”来进行排序。

1.4、Map

键值对(KV)映射存储,每个key是唯一的且只能映射一个value。

1.4.1、HashMap

JDK7是数组+链表的结构,JDK8是 数组+链表+红黑树结构。无序存储,线程不安全,允许null键。

1.4.2、HashTable

无序存储,线程安全,不允许null键。

1.4.3、TreeMap

红黑树结构,有序存储,不允许null键。

1.4.4、LinkedHashMap

有序存储,此实现与HashMap的不同之处在于,后者维护着一个运行于所有条目的双重链接列表。存储的数据是有序的。

2、总结

img

线程安全 线程不安全
Collection Vector ArrayList、LinkedList、HashSet、TreeSet
Map HashTable HashMap、TreeMap、LinkHashMap
字符串 StringBuff StringBuilder
posted @   是老胡啊  阅读(31)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
点击右上角即可分享
微信分享提示