Java中集合相关知识点复习中集合相关知识点复习
一、一、List
1、、ArrayList
ArrayList是一种变长的集合类,基于定长数组实现,使用默认构造方法初始化出来的容量是10(1.7之后都是延迟初始化,即第一次调用add方法添加元素的时候才将
elementData容量初始化为10)
ArrayList允许空值和重复元素,当往ArrayList中添加的元素数量大于其底层数组容量时,其会通过扩容机制重新生成一个更大的数组。ArrayList扩容的长度是原长度的
1.5倍
由于ArrayList底层基于数组实现,所以其可以保证在O(1)O(1)O(1)的时间复杂度下完成随机查找操作
ArrayList是非线程安全类
删除和插入需要调用System.arraycopy方法复制数组,性能差
2、、LinkedList
1)、特性)、特性
LinkedList进行节点插入、删除时间复杂度是O(1)O(1)O(1),但是随机访问时间复杂度是O(n)O(n)O(n)
2)、底层数据结构)、底层数据结构
LinkedList底层实现是一个双向链表底层实现是一个双向链表
private static class Node {
//节点的值
E item;
//后继节点
Node next;
//前驱结点
Node prev;
Node(Node prev, E element, Node next) {
this.item = element;
this.next = next;
this.prev = prev;
}
}
二、二、Set
HashSet、TreeSet、LinkedHashSet底层都是基于其相对应的Map实现的,只使用了Map的key,保证了Set中的元素不重复
三、三、Map
1、、HashMap
HashMap是基于键的hashCode值唯一标识一条数据,同时基于键的hashCode值进行数据的存取,因此可以快速地更新和查询数据,但其每次遍历的顺序无法保证相
同。HashMap的key和value允许为null
HashMap是非线程安全的,即在同一时刻有多个线程同时写HashMap时将可能导致数据的不一致。如果需要满足线程安全的条件,则可以用Collections.synchronizedMap使
HashMap具有线程安全的能力,或者使用ConcurrentHashMap
1)、底层数据结构)、底层数据结构
HashMap的数据结构如下图所示,其内部是一个数组,数组中的每个元素都是一个单向链表,链表中的每个元素都是嵌套类Entry的实例,Entry实例包含4个属性:
key、value、hash值和用于指向单向链表下一个元素的next
链表主要是为了解决数组中的key发生哈希冲突时,将发生碰撞的key存储到链表中
评论0
最新资源