Java核心类库篇4——集合
1、集合的意义
- 记录单个数据内容时,则声明一个变量
- 记录多个类型相同的数据内容时,声明一个一维数组
- 记录多个类型不同的数据内容时,则创建一个对象
- 记录多个类型相同的对象数据时,创建一个对象数组
- 记录多个类型不同的对象数据时,则准备一个集合
2、集合的分类
- 单列集合(Collection)
- 双列集合(Map)
3、Iterator接口
- java.util.Iterator接口主要用于描述迭代器对象,可以遍历Collection集合中的所有元素
- java.util.Collection接口继承Iterator接口,因此所有实现Collection接口的实现类都可以使用该迭 代器对象
方法声明 | 功能介绍 |
---|---|
public boolean hasNext() | 判断集合中是否有可以迭代/访问的元素 |
public E next() | 用于取出一个元素并指向下一个元素 |
public void remove() | 用于删除访问到的最后一个元素 |
4、Collection
4.1、方法
方法声明 | 功能介绍 |
---|---|
public boolean add(E e) | 向集合中添加对象 |
public boolean addAll(Collection c) | 将参数指定集合c中的所有元素添加到当前集合 |
public boolean contains(Object o) | 判断是否包含指定对象 |
public boolean containsAll(Collection c) | 判断是否包含参数指定的所有对象 |
public boolean retainAll(Collection c) | 保留当前集合中存在且参数集合中存在的所有对象 |
public boolean remove(Object o) | 从集合中删除对象 |
public boolean removeAll(Collection c) | 从集合中删除参数指定的所有对象 |
public void clear() | 清空集合 |
public int size() | 返回包含对象的个数 |
public boolean isEmpty() | 判断是否为空 |
public Object[] toArray() | 将集合转换为数组 |
public Iterator iterator() | 获取当前集合的迭代器 |
4.2、List
方法声明 | 功能介绍 |
---|---|
public void add(int index, E element) | 向集合中指定位置添加元素 |
public E get(int index) | 从集合中获取指定位置元素 |
public int indexOf(Object o) | 查找参数指定的对象 |
public int lastIndexOf(Object o) | 反向查找参数指定的对象 |
public E set(int index, E element) | 修改指定位置的元素 |
public E remove(int index) | 删除指定位置的元素 |
public List subList(int fromIndex, int toIndex) | 用于获取子List |
4.2.1、ArrayList
底层数据结构是数组,查询快,增删慢,线程不安全,效率高,可以存储重复元素
4.2.2、LinkedList
底层数据结构是链表,查询慢,增删快,线程不安全,效率高,可以存储重复元素
特殊方法
方法声明 | 功能介绍 |
---|---|
public void addFirst(E e) | 在该列表开头插入指定的元素 |
public void addLast(E e) | 在该列表结尾插入指定的元素 |
public E getFirst() | 返回此列表中的第一个元素 |
public E getLast() | 返回此列表中的最后一个元素 |
4.2.3、Vector
底层数据结构是数组,查询快,增删慢,线程安全,效率低,可以存储重复元素
特殊方法
方法声明 | 功能介绍 |
---|---|
public void addElement(E obj) | 将指定的组件添加到此向量的末尾 |
public E elementAt(int index) | 返回指定索引处的组件 |
public Enumeration elements() | 返回此向量的组件的枚举 |
4.3、Set
4.3.1、HashSet
采用哈希表实现,元素无序且唯一,线程不安全,效率高,可以存储null元素
4.3.2、LinkedHashSet
采用链表和哈希表共同实现,链表保证了元素的顺序与存储顺序一致,哈希表保证了元素的唯一性。线程不安全,效率高
4.3.3、TreeSet
采用二叉树来实现,元素唯一且已经排好序;唯一性同样需要重写hashCode和equals()方法,二叉树结构保证了元素的有序性
4.4、List和Set总结
- List特点:元素有放入顺序,元素可重复
- Set特点:元素无放入顺序,元素不可重复,重复元素会覆盖掉,(注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的,加入Set 的Object必须定义equals()方法)
- list支持for循环,也就是通过下标来遍历,也可以用迭代器
- set只能用迭代,因为他无序,无法用下标来取得想要的值
- Set:检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变
- List:和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变
5、Map
Map用于保存具有映射关系的数据,Map里保存着两组数据:key和value,它们都可以使任何引用类型的数据,但key不能重复
5.1、方法
方法声明 | 功能介绍 |
---|---|
public void clear() | 删除所有的映射 |
public boolean containsKey(Object key) | 判断此映射是否包含指定键的映射 |
public boolean containsValue(Object value) | 判断此映射是否包含指定值的映射 |
public Set<Map.Entry<K,V> entrySet() | Map中所包含的键值对所组成的set集合 |
public V get(Object key) | 返回指定key所对应的value,如Map中不包含key则返回null |
public boolean isEmpty() | 判断map是否为空 |
public Set keySet() | 返回该Map中所有key所组成的set集合 |
public V put(K key, V value) | 向Map中添加一个元素 |
public void putAll(Map<? extends K,? extends V> m) | 将指定Map的添加到当前Map |
public V remove(Object key) | 从当前Map移除一个key |
public int size() | Map的键值对的个数 |
public Collection values() | 返回该Map里所有value组成的collection |
5.2、HashMap
- 线程不安全
- HashMap只可以有一个键位null
- HashMap可以有无数个键值为null
- 性能很好
5.3、HashTable
- 线程安全
- HashTable无论键值都不能为null
- 性能差
5.4、TreeMap
非线程安全基于红黑树实现
特殊方法
方法声明 | 功能介绍 |
---|---|
public Map.Entry<K,V> firstEntry() | 最小key的键值对 |
public K firstKey() | 最小的key |
public K lastKey() | 最大的key |
public K higherKey(K key) | 返回指定key后一位的键 |
public K lowerKey(K key) | 返回指定key前一位的键 |
public K higherEntry(K key) | 返回指定key后一位的键值对 |
public K lowerEntry(K key) | 返回指定key前一位的键值对 |
5.5、Map的其他类
5.5.1、LinkedHashMap
- 使用双向链表来维护键值对的次序
- 迭代顺序与键值对的插入顺序保持一致
- LinkedHashMap需要维护元素的插入顺序,性能略低于HashMap,但在迭代访问元素时有很好的性能,因为它是以链表来维护内部顺序
5.5.2、IdentityHashMap
使用==判断key是否相等
5.5.3、WeakHashMap
- WeakHashMap的key所引用的对象没有被其他强引用变量所引用,则这些key所引用的对象可能被回收
- WeakHashMap中的每个key对象保存了实际对象的弱引用,当回收了该key所对应的实际对象后,WeakHashMap会自动删除该key所对应的键值对
6、Collections
方法声明 | 功能介绍 |
---|---|
public static > T max(Collection coll) | 根据元素的自然顺序返回给定集合的最大元素 |
public static T max(Collection coll, Comparator comp) | 根据指定比较器引发的顺序返回给定集合的最大元素 |
public static > T min(Collection coll) | 根据元素的自然顺序返回给定集合的最小元素 |
public static T min(Collection coll, Comparator comp) | 根据指定比较器引发的顺序返回给定集合的最小元素 |
public static void copy(List dest, List src) | 将一个列表中的所有元素复制到 另一个列表中 |
public static void reverse(List list) | 反转指定列表中元素的顺序 |
public static void shuffle(List list) | 使用默认的随机源随机置换指定的列表 |
public static > void sort(List list) | 根据其元素的自然顺序将指定列表按升序排序 |
public static void sort(List list, Comparator c) | 根据指定比较器指定的顺序对指定列表进行排序 |
public static void swap(List list, int i, int j) | 交换指定列表中指定位置的元素 |