趣百科

java的集合有哪些

编辑:Simone 2024-12-05 06:07:16 573 阅读

java的集合有哪些

常用的集合

常用的三大类集合:Set、List、Map。

1、Set

1) Set 集合属于单列集合,不允许包含重复元素;

2) 判断元素是否重复的标准为对象的 equals 方法,存在时返回 false,不存在返回 true;

3) 元素的排序规则,由相应的实现类决定,分为无序、元素大小排序、写入顺序排序;

4) 初始化大小,扩容参考 HashMap。

(1)Set 接口、实现类:

接口:Set、SortedSet

实现类:HashSet、TreeSet、LinkedHashSet

(2)HashSet:

1) HashSet 实现了 Set 接口,继承了 AbstractSet 类,由哈希表支持,看源码可以发现是一个 HashMap 实例。

2) HashSet 不保证集合内元素的迭代顺序,特别是不保证迭代顺序永久不变,该集合运行 null 元素存在。

3) HashSet 中的元素,作为 HashMap 键值对的 Key 存储,而 Value 由一个统一的值保存。

4) HashSet 默认初始化大小为 16,扩容加载因子为 0.75,扩容大小为原来的一倍。即一个初始化size为16的

HashSet,元素添加到12个的时候会进行扩容,扩容后的大小为32。

(3)TreeSet:

1) TreeSet 实现了 NavigableSet 接口,继承了AbstractSet类,由哈希表支持,看源码可以发现是一个 TreeMap 实例。

2) TreeSet 中的元素有序的,排序规则遵照元素本身的大小进行排序,元素不能重复。

3) TreeSet 中的元素,作为 TreeMap 键值对的 Key 存储,而 Value 由一个统一的值保存。

(4)LinkedHashSet:

1) LinkedHashSet实现了 Set 接口,继承了HashSet类,由哈希表支持,看源码可以发现是一个LinkedHashMap 实例。

2) LinkedHashSet中的元素有序的,排序规则遵照元素写入顺序进行排序,元素不能重复。

3) LinkedHashSet 中的元素,作为 LinkedHashMap 键值对的 Key 存储,而 Value 由一个统一的值保存。

2、List

1) List 集合属于单列、有序的、允许元素重复、可以为 null 的集合;

2) List 接口的实现类主要有三种:ArrayList、LinkedList、Vector。

(1)List 接口、实现类:

接口:List

实现类:ArrayList、LinkedList、Vector

(2)ArrayList

1) ArrayList 实现了 List 接口,继承了 AbstractList 类,由一个 Object[] 实例实现,即底层为数组结构;

2) 默认初始化长度为 10,扩容规则为 0.5倍的原容量加1,即一次扩容后的长度为 16;

3) 特点:查询速度快,添加、删除相对于LinkedList较慢、线程不同步(不安全)。

(3)LinkedList

1) LinkedList 实现了 List 接口,继承了 AbstractSequentialList 类,由一个 Node 节点链表实现,即底层为链表结构;

2) 由于LinkedList 数据结构为链表,无预扩容机制;

3) 特点:添加、删除速度快,查询相对于ArrayList较慢、线程不同步(不安全)。

(4)Vector

1) Vector实现了 List 接口,继承了 AbstractList 类,由一个 Object[] 实例实现,即底层为数组结构;

2) 默认初始化长度为 10,扩容加载因子为 1,当元素长度大于原容量时进行扩容,默认为 10,一次扩容后容量为 20;

3) 特点:线程安全,但是速度慢;在实现的方法上,用 synchronized 关键字进行了修饰,即在方法上实现了同步锁。

3、Map

1) Map 集合属于双列Key-value键值对的集合,Key不允许重复,是否允许为 null 根据实现类而定,Value 随意;

2) Map 接口的实现类主要有三种:HashMap、LinkedHashMap、TreeMap、Hashtable、ConcurrentHashMap。

(1)Map接口、实现类:

接口:Map

实现类:HashMap、LinkedHashMap、TreeMap、Hashtable、ConcurrentHashMap

(2)HashMap

1) HashMap实现了 Map接口,继承了 AbstractMap类,数据结构采用的位桶数组,底层采用链表或红黑树进行存储;

2) 默认初始化长度为 16,扩容加载因子为 0.75,一旦大于 0.75*16之后,就会调用resize()进行扩容,扩容2倍,即32;

3) JDK1.7中,数据结构采用:位桶数组+链表结构;

JDK1.8中,数据结构采用:位桶数组+(链表/红黑树);

4) 支持克隆,无序,线程不同步,非安全。

(3)LinkedHashMap

1) LinkedHashMap 实现了 Map 接口,继承了 HashMap 类;

引用实现;

3) 迭代顺序由 accessOrder 属性的决定,默认为 false,以插入顺序访问;设置为 true 则按上次读取顺序访问(每次访问

元素时会把元素移动到链表末尾方便下次访问,结构会时刻变化)。

4) 默认初始化长度为 16,扩容加载因子为 0.75,一旦>0.75*16之后,就会调用resize()进行扩容,与HashMap一致;

5) 支持克隆,有序,线程不同步,非安全。

(4)TreeMap

1) TreeMap实现了 NavigableMap接口,继承了 AbstractMap 类;

2) 数据结构基于红黑树实现;

3) 该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法;

4) 无初始化长度;

5) 支持克隆,有序,线程不同步,非安全。

(5)Hashtable

1) Hashtable实现了 Map 接口,继承了 Dictionary类;

2) 数据结构:也是一个散列表,数据结构与HashMap相同,key、value都不可以为 null;

3) 该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法;

4) 默认初始化长度为 11,扩容加载因子为 0.75,一旦>0.75*11之后,就会进行扩容,扩容到2n+1,即23;

5) 支持克隆,无序,线程同步,安全。在实现的方法上,用 synchronized 关键字进行了修饰,即在方法上实现了同步锁。

6) 支持 Enumeration 遍历方式。

(6)ConcurrentHashMap

1) ConcurrentHashMap实现了 ConcurrentMap接口,继承了 AbstractMap类;

2) 默认初始化长度为 16,扩容加载因子为 0.75,一旦大于 0.75*16之后,就会调用resize()进行扩容,扩容2倍,即32;

3) 数据结构:由Segment数组结构和HashEntry数组结构组成,一个ConcurrentHashMap中包含一个Segment数组,

Segment的结构和HashMap类似,是一种数组和链表结构。

4) 使用了锁分段技术,Segment是一种可重入锁ReentrantLock,每个Segment拥有一个锁,当对HashEntry数组的

数据进行修改时,必须先获得对应的Segment锁

5) 不支持克隆,无序,线程同步,安全。

版权声明:本站【趣百科】文章素材来源于网络或者用户投稿,未经许可不得用于商用,如转载保留本文链接:https://www.qubaik.com/answer/94814.html

相关推荐