数组和集合的区别
数组:数组长度不可变;一个数组只能存放同类型数据;
集合:集合长度可变,并且有自动扩容机制;集合只能存放引用类型数据;一个集合可以存放不同类型的数据;
集合框架体系
上图是整个集合框架体系,还是有点繁杂的,我感觉常用的有:
Collection
常用方法:
- boolean add(E e) 向集合中添加元素。
- void clear() 从此集合中删除所有元素。
- boolean contains(Object o)如果此集合包含指定的元素,则返回 true 。
- boolean isEmpty() 如果此集合不包含元素,则返回 true 。
- boolean remove(Object o) 从该集合中删除指定元素的单个实例(如果存在)。
- default boolean removeIf(Predicate<? super E> filter) 删除满足给定谓词的此集合的所有元素。
- int size() 返回此集合中的元素数。
遍历方式
- 迭代器:Iterator iterator() 返回此集合中的元素的迭代器。
- 增强for循环
- Stream流:default Stream stream() 返回以此集合作为源的顺序 Stream 。
List
常用方法
- void add(int index, E element) 将指定的元素插入此列表中的指定位置。
- E get(int index) 返回此列表中指定位置的元素
- E remove(int index) 删除该列表中指定位置的元素。
- E set(int index, E element) 用指定的元素替换此列表中指定位置的元素。
ArrayList
底层实现
- 使用数组实现,默认初始长度10,每次扩容到原来的1.5倍
- 优缺点:查询快,增删慢
LinkedList
底层实现
- 底层用双向链表实现
- 优缺点:增删快,查询慢
常用方法
- void addFirst(E e) 在该列表开头插入指定的元素。
- void addLast(E e) 将指定的元素追加到此列表的末尾。
- E getFirst() 返回此列表中的第一个元素。
- E getLast() 返回此列表中的最后一个元素。
- boolean offerFirst(E e) 在此列表的前面插入指定的元素。
- boolean offerLast(E e) 在该列表的末尾插入指定的元素。
- E removeFirst() 从此列表中删除并返回第一个元素。
- E removeLast() 从此列表中删除并返回最后一个元素。
Voctor
线程安全的单列集合
Set
TreeSet
- 底层是红黑树
- 使用自定义类型时,需要实现比较器(一般使用Comparable,如果要实现不同的地方用不同的排序方式就是使用Comparator)
HashSet
-
- JDK7中底层是数组加链表的形式,默认长度16,扩容因子0.75
- JDK8中底层是数组、链表和红黑树,默认长度16,扩容因子0.75;当链表长度达到8的时候使用红黑数,查找效率更高
- 使用自定义类型时,如需根据自己的规则排序,则需要实现HashCode和equals
List和Set的区别
List存放的元素是有序可重复的;Set存放的元素是无序不可重复的;
Queue
队列,暂时没用过
Map
常用方法
- Set<Map.Entry<K,V>> entrySet() 返回此地图中包含的映射的Set视图。—用于遍历Map
- Set keySet() 返回此地图中包含的键的Set视图。—用于遍历Map
- V put(K key, V value) 将指定的值与该映射中的指定键相关联。
- V remove(Object key) 如果存在(从可选的操作),从该地图中删除一个键的映射。
- void clear() 从该地图中删除所有的映射。
- boolean containsKey(Object key) 如果此映射包含指定键的映射,则返回 true 。
- boolean containsValue(Object value) 如果此地图将一个或多个键映射到指定的值,则返回 true 。
- boolean isEmpty() 如果此地图不包含键值映射,则返回 true 。
- int size() 返回此地图中键值映射的数量。
TreeMap
- 底层使用红黑树
- 使用自定义类型时,需要实现比较器(一般使用Comparable,如果要实现不同的地方用不同的排序方式就是使用Comparator)
HashMap
- 底层使用数组、链表和红黑树
- 使用自定义类型时,如需根据自己的规则排序,则需要实现HashCode和equals
HashTable
线程安全的,效率低,悲观锁
ConcurrentHashMap
线程安全的,效率较高,乐观锁