集合框架
集合框架
集合框架被设计成要满足以下几个目标
- 该框架必须是高性能的,基本集合(动态数组,链表,树,哈希表)的实现也必须是高效的。
- 该框架允许不同类型的集合,以类似的方式工作,具有高度的互操作性。
- 对一个集合的扩展和适应必须是简单的。
Java集合框架共有三大类接口:
- Collection接口存储一组不唯一(允许重复),无序的对象。
- Set接口继承Collection接口,存储一组唯一(不允许重复),无序的对象。
- List接口继承Collection接口,存储一组不唯一(允许重复),有序(以元素插入次序来放置元素,不会重新排列)的对象。
- Map接口存储一组成对的键-值对象,提供key到值得映射,Map中的key不要求有序,不允许重复,value同样不要求有序,但是允许重复。
1.1List 接口
- ArrayList
- LinkedList
- Vector
ArrayList,LinkedList,Vector的区别
ArrayList | LinkedList | Vector | |
---|---|---|---|
底层实现 | 数组 | 双向链表 | 数组 |
同步性及效率 | 不同步,非线程安全,效率高,支持随机访问 | 不同步,非线程安全,效率高 | 同步,线程安全,效率低 |
特点 | 查询快,增删慢 | 查询慢,增删快 | 查询快,增删慢 |
默认容量 | 10 | / | 10 |
扩容机制 | 1.5倍 | / | 2 |
1.2 Set集合
Set的主要实现类:HashSet,TreeSet
区别:
HashSet | TreeSet | LinkedHashSet | |
---|---|---|---|
底层实现 | |||
重复性 | |||
有无序 | 无序 | 有序,支持两种排序方式,自然排序和定制排序 | 有序,以元素插入的顺序来维护集合的链接表 |
时间复杂度 | add(),remove(),contains()方法的时间复杂度是O(1) | O(logn) | O(1) |
同步性 | 不同步,线程不安全 | 不同步,线程不安全 | 不同步,线程不安全 |
null值 | 允许 | 不允许 | 允许 |
比较 | equals() | compareTo() | equals() |
总结:HashSet是一个通用的Set,而LinkedHashSet提供元素插入顺序保证,TreeSet是一个SortedSet实现,由Comparator或者Comparable指定的元素排序存储元素。
1.3 Map接口
类:HashMap,TreeMap,HashTable,LinkedHashMap,ConccurrentHashMap
区别:
HashMap | HashTable | TreeMap | |
---|---|---|---|
底层实现 | 哈希表(数组+链表) | 哈希表(数组+链表) | 红黑树 |
同步性 | 线程不同步 | 线程同步 | 线程不同步 |
null值 | 允许key和value是null,但是只允许一个key为null,且这个元素存放在哈希表0角标位置 | 不允许 | value允许为null,当未实现Comparator接口时,key不可以为null,当实现了后,需要对null情况判断,如果没有判断,会抛出异常,若判断了,可以存入 |
hash | 使用hash(Object key)扰动函数对key的hashCode进行扰动后作为hash值 | 直接使用key的hashCode()返回值作为hash值 | |
容量 | 容量为24且容量一定为2n | 默认容量为11,不一定是2^n | |
扩容 | 两倍 | 两倍+1 |
1.4 集合工具类:Collections
Collection和Collections的区别:
Collections是个java.util下的类,是针对集合类的一个工具类,提供一系列静态方法,实现对集合的操作
Collection是个jaca.util下的接口,它是各种集合结构的父接口
数组工具类Arrays
用于操作数组对象的工具类,里面都是静态方法
数组->集合 asList方法
集合->数组 toArray()
标签:框架,接口,线程,key,集合,允许,null
From: https://www.cnblogs.com/cqwes123/p/18025048