Collection集合
功能
- 添加
boolean add(E e) 添加一个E类型的元素e
boolean addAll(Collection c) 添加一个集合的元素
- 删除
void clear() 删除所有元素
boolean remove(E) 删除一个元素
boolean removeAll(Collection c) 删除一个集合元素,只要有元素被删除就返回true
- 判断
boolean contains(E e) 判断集合中是否有该元素
boolean containsAll(Collection c) 判断集合中是否有指定集合中所有元素,只有包含所有元素才返回true
boolean isEmpty() 判断集合是否为空
- 获取
Iterator<E> iterator ()
- 长度
int size() 返回集合长度
- 交集
boolean retainAll(Collection c) 将两个集合都有的元素放进使用方法的集合,原集合改变则返回true
- 集合转换成数组
T[] toArray(T[] a) 返回成数组,元素类型保持一致
List集合
List集合特点
- 有序:出去的顺序和进来的顺序一致,像数组一样通过索引精确控制,使用户可以根据索引访问和搜索元素
- 可重复:允许重复的元素在集合中
List子类特点
ArrayList 基于数组,善于查询,线程不安全,效率高
Vector 基于数组,善于查询,线程安全,效率低
特有功能:-添加功能:public void addElement(E obj) 添加元素,被add()替代
-获取功能:public E elementAt(int index) 返回index处的元素 被get()替代
public Enumeration elements() 相当于遍历元素 被Iterator()替代-
LinkedList 基于链表,善于增删,线程不安全,效率高
特有功能:-添加功能:public void addFirst(E e) 在该列表开头插入指定的元素
public void addLast(E e) 在该列表末尾插入指定的元素,和add()一样,所以一般不用-获取功能:public E getFirst() 返回此列表中的第一个元素 public E getLast() 返回此列表中的最后一个元素。 -移除功能:public E removeFirst() 从此列表中删除并返回第一个元素 public E removeLast() 从此列表中删除并返回最后一个元素
List集合特有功能
- 添加功能
void add(int index,Object element) 在指定位置添加元素
- 获取功能
Object get(int index) 获得指定位置的元素
- 列表迭代器(List集合特有迭代器)
ListIterator listIterator() List集合特有迭代器,继承Iterator()迭代器,
特有功能:Object previous() 获取前一个元素
boolean hasPrevious() 判断是否有前一个元素
(由于在逆向遍历前需要正向遍历,所以无意义,一般不使用)
- 删除功能
Object remove (int index) 删除索引处的元素,返回删除的元素
- 修改功能
Object set(int index,Object element) 修改索引处的元素,返回被修改的元素(原来集合中的元素)
注意事项
-并发修改异常:需求:如果集合中有元素1,则添加元素2
并发修改异常:迭代器是依附于集合存在的,在添加元素2后,集合改变了,但迭代器不知道,所以出现了异常
解决方案:1. 迭代器修改元素,因为Iterator中没有添加方法,所以用ListIterator中的方法,添加的元素在找到的
元素之后 2. 使用for循环遍历元素,添加的元素在集合最后
Set集合
Set集合特点:
- 不包含重复元素
- 无序,且不保证元素顺序一直不变
HashSet
HashSet下保证元素唯一的实现方式(底层是HashMap):比较待添加元素和集合中每一个元素的hash值,如果相同,用equals()方法再比较,如果相同,不添加
TreeSet
能够按照一定规则对元素进行排序1. 自然排序,2.比较器排序
Map集合
Map集合特点:将键映射到值的对象。 Map不能包含重复的键; 每个键可以映射到唯一一个值。Map的数据结构只和键有关
Map功能:
1.添加 V put(K key,V value) 根据键添加一对元素或者替换原来的value,若添加则返回null,若替换则返回被替换的value
2.删除 void clear() 删除所有元素对
V remove(Object key) 如果存在,从该Map中删除一个键的映射,返回被删除的value
3.判断 boolean containsKey(Object key) 如果此映射包含指定键的映射,则返回true
boolean containsValue(Object value) 如果此映射将一个或多个键映射到指定的值,则返回true
boolean isEmpty() 如果此地图不包含键值映射,则返回 true
4.获取Set<Map.Entry<K,V>> entrySet() 返回此地图中包含的映射的Set视图
V get (Object key) 返回到指定键所映射的值,或null
Set<K> keySet() 返回此地图中包含的键的Set视图
Collection<V> values() 返回此地图中包含的值的Collection视图
5.长度 int size()
Map的遍历
-方式一
1.获取所有的键: Set<K> keySet()
2.遍历键的集合,获取得到每一个值: 增强for
3.根据键找值:V get (Object key)
-方式二
1.获取所有键值对对象的集合:Set<Map.Entry<K,V>> entrySet()
2.遍历键值对对象的集合,得到键值对对象:增强for
3.根据键值对对象获取键和值:Map.Entry<K,V>中的getKey()和getValue()方法
HashMap和Hashtable的区别
HashMap用来替代Hashtable,两者用法几乎相同
HashMap:线程不安全,效率高,允许null键和null值
Hashtable:线程安全,效率低,不允许null键和null值
Collentions工具类
简介
针对集合进行操作的工具类,都是静态方法
常见方法
- public static <T> void sort(List<T> list) 排序(默认自然排序)
- public static <T> int binarySearch(List<?> list, T key) 二分查找
- public static <T> T max(Collection<?> coll) 最大值
- public static void reverse(List<?> list) 反转
- public static void shuffle(List<?> list) 随机置换