集合框架

集合框架

集合框架

集合框架被设计成要满足以下几个目标

- 该框架必须是高性能的,基本集合(动态数组,链表,树,哈希表)的实现也必须是高效的。
- 该框架允许不同类型的集合,以类似的方式工作,具有高度的互操作性。
- 对一个集合的扩展和适应必须是简单的。

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()
posted @ 2024-02-21 13:52  cqwye  阅读(23)  评论(0)    收藏  举报