Collection

  • int size()
  • boolean isEmpty()
  • Iterator iterator()

image.png

List

  • ArrayList
    • 默认初始容量10,当超出当前容量时扩容,新容量=原容量的 0.5倍+1(第一次扩容后为16)
    • 数组实现的线性表,中间位置插入或者删除元素时需要对数组进行拷贝复制。
    • 适合随机查找和遍历,不适合插入和删除。
  • LinkedList
    • 使用双向循环链表实现
    • 很适合数据的动态插入和删除
  • Vector
    • 数组实现,线程安全
    • 默认初始容量10,当超出当时容量时扩容,新容量=原容量的1倍(第一次扩容后为20)
  • Stack, 通过数组实现,线程安全

    Set

  • EnumSet, 创建一个包含指定元素类型的所有元素的枚举 set

  • HashSet,内部由HashMap实例实现
  • LinkedHashSet,内部由LinkedHashMap实例实现
  • TreeSet,内部由TreeMap实例实现

    Queue

  • LinkedList

    • Deque定义了在Queue两端进行insert和remove函数(addFirst/addLast)
    • LinkedList通过Deque实现
  • PriorityQueue

    • 基于堆排序实现的优先级队列

      Map

      1. ![image.png](https://cdn.nlark.com/yuque/0/2020/png/217875/1599385375213-f770734f-d63f-414a-ac0e-1d487006d4a9.png#align=left&display=inline&height=279&margin=%5Bobject%20Object%5D&name=image.png&originHeight=308&originWidth=572&size=54177&status=done&style=none&width=518)<br />
  • HashMap

    • 链接法解决冲突,链表大小超过8时会自动转化为红黑树,当删除小于6时重新变为链表
    • 线程不安全,在扩容的时候put时可能会产生了死链,由此会在get时造成了CPU 100%
    • add,delete和contain方法具有恒定的时间复杂度O(1)
    • 默认初始容量16,长度始终是2的n次方,扩容加载因子为0.75,第一个临界点在当HashMap中元素的数量等于table数组长度加载因子(160.75=12),如果超出则按扩容为原来的2倍(第一次扩容后为32)。
  • LinkedHashMap
    • 与HashMap原理相同,内部由双向链表维持着key的顺序
    • add,delete,contain时间复杂度是O(1)
  • TreeMap
    • 内部由红黑树实现,按键的大小维持数据顺序
    • add,delete 和contain方法的时间复杂度为O(nlgn)
  • Hashtable
    • 不允许出现键与值等于null,synchronized实现线程安全
    • 默认初始容量为11,扩容加载因子为0.75,扩容增量:2*原数组长度+1(一次扩容后是容量为23)。
  • EnumMap
  • IdentityHashMap
  • Properties
  • WeakHashMap

工具类

Collections

集合操作的工具类,提排序/查找等方法

  • Collections.sort() 使用Timsort进行排序
  • Collections.synchronizedCollection() 将一个集合变为线程安全的集合,装饰器模式利用监视器锁包装操作
  • Collections.singletonList() 无法被修改的list

    Arrays

  • Arrays.toString()

  • Arrays.asList()

    RandomAccess

  • RandomAccess接口是一个标志接口,用下表访问集合中的元素更快

    Iterator

  • fail-fast:在用迭代器遍历一个集合对象时,如果遍历过程中对集合对象的内容进行了修改,则会抛出Concurrent Modification Exception。迭代器在遍历时直接访问集合中的内容,每当迭代器每次遍历下一个元素时会比较modCount的值,修改集合内容会改变modCount。Collection集合采用了fail-fast机制。

  • fail-safe: 在用迭代器遍历一个集合对象时不是直接在集合内容上访问的,而是先复制原有集合内容,在拷贝的集合上进行遍历。java.util.concurrent包下的容器都是安全失败。 ```java import java.util.Iterator; import java.util.NoSuchElementException;

public class CountDownIterable implements Iterable {

private Integer num;
public CountDownIterable(Integer num) {
    this.num = num;
}

@Override
public Iterator<Integer> iterator() {
    return new CountDownIterator(num);
}

private static class CountDownIterator implements Iterator<Integer> {
    Integer num;

    public CountDownIterator(Integer num) {
        if (num <= 0) {
            throw new IllegalArgumentException();
        }
        this.num = num; 
    }

    @Override
    public boolean hasNext() {
        return num > 0;
    }

    @Override 
    public Integer next() {
        if (num <= 0) {
            throw new NoSuchElementException();
        }
        return num--;
    }
} 

public static void main(String[] args) {
    CountDownIterable countDown = new CountDownIterable(10);    
    for (Integer i : countDown) {
        System.out.println(i);
    }
}

} ```

参考:
https://blog.csdn.net/learningcoding/article/details/79983248
https://www.jianshu.com/p/4bb01e139cda