Java集合详解
来源:互联网 发布:用友会计软件普及版 编辑:程序博客网 时间:2024/05/22 14:17
Java集合简单介绍
- Collection
- List
- LinkedList
- ArrayList
- Vector
- CopyOnWriteArrayList
- Set
- HashSet
- TreeSet
- LinkedHashSet
- CopyOnWriteArraySet
- List
- Map
- HashMap
- TreeMap
- HashTable
- LinkedHashMap
- WeakHashMap
- ConcurrentHashMap
- ConcurrentSkipListMap
Collection是集合接口:
1. Set子接口:无序,不允许重复。
1. List子接口:有序,可以有重复元素。
List
1.LinkedList
特点:==LinkedList 内部使用Node内部类进行数据存储,保存上一个节点和下一个节点。使用的是链表数据结构。添加删除速度快,查找速度慢。不是线程安全的。==
private static class Node<E> { E item; Node<E> next; Node<E> prev; Node(Node<E> prev, E element, Node<E> next) { this.item = element; this.next = next; this.prev = prev; }}
2.ArrayList
特点: ==ArrayList内部使用数组进行数据存储transient Object[] elementData,默认初始化容量为10, private static final int DEFAULT_CAPACITY = 10;已原来的二倍方式扩容,扩容代码如下,不是线程安全的。==
private void grow(int minCapacity) { // overflow-conscious code int oldCapacity = elementData.length; int newCapacity = oldCapacity + (oldCapacity >> 1); if (newCapacity - minCapacity < 0) newCapacity = minCapacity; if (newCapacity - MAX_ARRAY_SIZE > 0) newCapacity = hugeCapacity(minCapacity); // minCapacity is usually close to size, so this is a win: elementData = Arrays.copyOf(elementData, newCapacity);}
3.Vector
特点: ==Vector内部使用数组进行数据存储Object[] elementData,是线程安全的。由于每个方法都加锁,性能低,不建议使用==
public synchronized void addElement(E obj) { modCount++; ensureCapacityHelper(elementCount + 1); elementData[elementCount++] = obj;}
4.CopyOnWriteArrayList
特点: ==CopyOnWriteArrayList内部使用数组进行存储是线程安全,添加数据的时候add方法加锁,get方法没有加锁。add方法每次添加数据的时候都copy一份新的数组进行操作。在新的数组上进行修改操作。这样能保证多线程的数据安全性。添加数据性能偏低,每次都要拷贝数据耗费空间。读取的时候不具备实时性。可能读取旧的数据,CopyOnWriteSet和这个原理类似,CopyOnWrite容器适用于读多写少的场景。==
public synchronized void addElement(E obj) { modCount++; ensureCapacityHelper(elementCount + 1); elementData[elementCount++] = obj;}
Set
1.HashSet
特点: ==HashSet使用的HashMap的key存储数据value用一个对象常量,代码如下,不能够重复,详细的底层数据结构见HashMap。不是线程安全的。==
public boolean add(E e) { return map.put(e, PRESENT)==null;}
2.TreeSet
特点: ==TreeSet使用的TreeMap的key存储数据value用一个对象常量,不能够重复,详细的底层数据结构见TreeMap。不是线程安全的。==
3.LindedHashSet
特点: ==LindedHashSet使用LindedHashMap的key存储数据,详细底层结构见LinkedHashMap介绍,不是线程安全的。==
4.CopyOnWriteArraySet
特点: ==CopyOnWriteArraySet原理同CopyOnWriteArrayList,原理参考CopyOnWriteArrayList。==
Map
Map属于key-value数据结构
1.HashMap
特点: HashMap。不是线程安全的。HashMap允许null为key。是一个“链表散列”的数据结构,即数组和链表的结合体。在jdk8中链表长度超过8是转换成红黑树的数据结构,这样能保证在Hash冲突多的情况下也能保证元素查找的速度。
2.TreeMap
特点: TreeMap底层实用的是红黑树实现,不是线程安全的。具体详情看红黑树的原理。
3.LindedHashMap
特点: LindedHashMap和HashMap类似,只是里面多维护了一个添加的顺序,这样遍历集合时候能够按照顺序输出,不是线程安全的。HashMap默认构建一个初始容量为 16,负载因子默认为 0.75 的 容器。重载函数有HashMap(int initialCapacity)指定初始化容量(桶)的个数。HashMap(int initialCapacity, float loadFactor)可以初始化容量和负载因子。当容器总元素个数大于容量*负载因子时候,容器的容量*2进行扩容。
4.ConcurrentHashMap
特点: ConcurrentHashMap实现和HashMap类似,只是通过分段锁实现一个线程安全的Map。通过分段锁的设计既能减小锁的开销,又能保证数据的正确性。
5.ConcurrentSkipListMap
特点: ConcurrentSkipListMap是使用跳表的数据结构,有排序功能,对内部Node操作都是使用的是CAS进行更新。是线程安全的。
- Java集合详解--什么是集合
- Java集合:集合类详解
- Java集合类详解
- Java常用集合详解
- Java集合类详解
- Java集合接口详解
- Java集合类详解
- java集合详解
- Java集合类详解
- JAVA集合类详解
- Java集合类详解
- Java集合类详解
- Java集合类详解
- Java集合框架详解
- Java集合类详解
- Java集合类详解
- Java集合类详解
- java 集合框架详解
- a=10,b=10调用method方法输出a=100,b=200
- 条件变量与互斥锁
- Swift 枚举
- sql优化初步学习笔记
- HDU 5924 Mr. Frog’s Problem
- Java集合详解
- 基本数据类型包装类
- 设计模式与性能调优面试题(待定)
- T-SQL 语句(九)—— 游标
- angularjs弹出框方法一
- 1html的基本结构
- 多少
- [BZOJ 1051][HAOI2006]受欢迎的牛(强连通分量、缩点)
- Java static关键字的使用