add(T v) isEmpty() clear() contains(Object obj) remove(Object obj) size() toArray()
存放一组单值
有序,可重复,索引
ArrayList是长度可变的对象引用数组,称为动态数组
数组容量也会随之自动扩展;访问和遍历数组元素时,ArrayList的性能优越
ArrayList类继承了AbstractList类并实现了List接口
方法:
get(int index); remove(int index);
LinkedList类用于创建链表数据结构
数量不受任何限制
频繁地添加和删除元素,LinkedList的性能更加优越
LinkedList类继承了AbstractSequentialList类,并实现了List接口
方法:
add(); remove(); get()
LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用
方法:
Queue<String> queue = new LinkedList<String>();
queue.offer("a");//添加元素
queue.poll();//返回第一个元素,并在队列中删除
queue.element();//返回第一个元素
queue.peek();//返回第一个元素
Vector是线程同步的
Vector类继承于AbstractList类,并实现了List接口
栈是Vector的一个子类,它实现了一个标准的后进先出的栈
方法:
peek( ); pop( ); push(Object element);
int search(Object element);//返回对象在堆栈中的位置,以 1 为基数。
常用实现类 | 新增/查询/删除 | 底层数据结构 |
---|---|---|
ArrayList<E>(常用) | 查询最快 | 动态数组 |
LinkedList<E> | 新增/删除最快 查询慢 | 双向链表 |
Vector<E> | 三者都慢 | 动态数组 |
存放单值
无序,不可重复,无索引
实现Set接口,由哈希表(实际为HashMap实例)支持
无序,允许null元素
是HashSet的子类,方法几乎与父类一致
元素有序(元素插入顺序与遍历顺序是一致的)
元素有序(会按照自然顺序进行排列)规定元素数据类型必须实现Comparable接口
TreeSet类实现SortedSet接口
SortedSet<String> animals = new TreeSet<>();
方法:
comparator() - 返回一个比较器,可用于对集合中的元素进行排序
first() - 返回集合的第一个元素
last() - 返回集合的最后一个元素
headSet(element) - 返回指定元素之前的所有元素
tailSet(element) - 在指定元素之后(包括指定元素)返回集合中的所有元素
subSet(element1,element2) - 返回element1和element2之间的所有元素,包括element1
常用实现类 | 底层数据结构 | 线程安全 | 元素是否可以为null |
---|---|---|---|
HashSet<E> (推荐) | Hash表 | 不安全 | 可以为null |
LinkedHashSet<E> | 链表+hash表 | 不安全 | 可以为null |
TreeSet<E> | 红黑树 | 不安全 | 不能为null |
将键映射到值的对象。 Map不能包含重复的键; 每个键可以映射到最多一个值
size(); isEmpty(); clear(); put(); remove(); get(); containsKey(); containsValue();
HashMap可以允许存在一个为null的key和任意个为null的value
LinkedHashMap元素可以预测的 key 插入的顺序与遍历顺序一致
TreeMap key值有序 按照自然顺序对key进行排列
HashTable继承Dictionary类,实现Map接口
HashTable中的key和value都不允许为null
ConcurrentHashMap 是线程安全且高效的HashMap
实现类 | 底层数据结构 | 线程是否安全 | K与V是否可以为null |
---|---|---|---|
HashMap<K,V>(推荐) | hash表 | 否 | K和V 都可以为null |
LinkedHashMap<K,V> | 链表+hash表 | 否 | K和V 都可以为null |
TreeMap<K,V> | 红黑树 | 否 | K不可以为null , V可以 |
CouncurrentHashMap<K,V>(推荐) | 1.7 锁分段 1.8 CAS | 是 | K和V都不可以为null |
HashTable<K,V> | hash表 | 是(同步) | K和V都不可以为null |
Collections类仅由静态方法组合或返回集合
//排序
static <T extends Comparable<? super T>> void sort(List<T> list)
static <T> void sort(List<T> list, Comparator<? super T> c)
//重排洗牌
static void shuffle(List<?> list)
//最大/最小
static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll)
static <T> T max(Collection<? extends T> coll, Comparator<? super T> comp)
static <T extends Object & Comparable<? super T>> T min(Collection<? extends T> coll)
static <T> T min(Collection<? extends T> coll, Comparator<? super T> comp)
只能针对TreeSet元素排列(要求Treeset集合元素类型都必须实现Comparable)
只能针对TreeMap元素排列(要求map的key值类型都必须实现Comparable)
在遍历集合元素执行删除,修改或者新增功能,会出现并发修改的异常,jdk1.8之后,弥补了这个缺陷,提供了对集合元素的并行化操作
Stream stream = list.stream(); 每次用完之后,就自动关闭流
list.stream(): 获取流 distinct:去重复 collect:转换回集合 Collectors.toList():创建了一个空的集合,存储去重复流之后的集合
filter 过滤,获取的false过滤
Map<Integer, String> map = list.stream().distinct().collect(Collectors.toMap(User::getId, User::getName));//将list转换成map