集合:存储对象数据的集合数据。
Collection:单列集合的接口。它有两个子接口:① List(有序、可重复);② Set(无序、不可重复)
Map:双列集合的接口(以键值对形式存储,键不可重复,值可以重复)。
add(E e) | 添加元素,成功返回true,否则返回false |
addAll(Colletion c) | 将另一个集合c中的元素添加到该集合中 |
clear() | 清空集合中的内容 |
remove(Object o) | 删除指定元素,成功返回true,否则返回false |
removeAll(Collection c) | 取两个集合的并集 |
retainAll(Collection c) | 取两个集合的交集 |
size() | 返回集合中的元素个数 |
contains(Object o) | 判断是否存在指定元素 |
containsAll(Collection c) | 判断是否存在指定集合中的全部元素 |
isEmptyt() | 判断集合是否为空 |
toArray() | 将集合转换成数组 |
iterator() | 返回一个迭代器,用于抓取集合中的元素 |
Iterator it = list.iterator; // 获取迭代器的时候,迭代器中的指针就已经指向了第一个元素
while(it.hsaNext()) { // 当前指针是否指向元素
it.next(); // 获取当前指针指向的元素并返回,然后指针向下移动
}
List有三个实现类:ArrayList、LinkedList、Vector。
ArrayList和Vector底层都是使用了Object数组实现的,但ArrayList是线程不同步的,操作效率高;Vector则相反。LinkedList底层则是使用了双向链表数据结构实现的。
Set有两个实现类:HashSet和TreeSet
HashSet:底层是哈希表,特点是存取速度快。当往里面添加元素的时候,会先调用元素的hashCode方法获取哈希值,然后经过一系列的移位等运算,就可以得出该元素在哈希表中的存储位置。如果得出的位置没有任何元素存储,那么该元素可以直接存储到该位置;如果已经有其他元素了,那么会调用equals方法比较两个元素,当返回true时,那么该元素与该位置上的元素就视为重复,不允许添加;反之就添加。
TreeSet:底层是红黑树。添加的元素需要具备自然顺序的特性。如果要往TreeSet添加自定义对象时,自定义的类必须实现Comparable接口,重写compareTo方法:
class 自定义类 implements Comparable<T> {
@Override
public int compareTo(T o) {
// 该方法返回0时,那么该元素就被视为重复元素,不允许添加
}
}
或者在创建TreeSet时传入一个比较器参数:(优先使用)
class 比较器 implements Comparator {
@Override
public int compare(Object o1, Object o2) {
// TODO Auto-generated method stub
return 0;
}
}
TreeSet set = new TreeSet(new 比较器());
Map接口有两个实现类:HashMap和TreeMap。
put(K key,V value) | 添加键值对。如果集合中存在该键,返回键之前对应的值,且该值会被value覆盖;如果不存在则返回null |
size() | 返回集合中键值对个数 |
isEmpty() | 判断集合是否为空 |
get(K key) | 根据键获取值 |
containsKey(K key) | 判断集合中是否存在指定的键 |
containsValue(V value) | 判断集合中是否存在指定的值 |
remove(K key) | 根据键删除该键值对,并返回值 |
clear() | 清空集合 |
迭代Map的两种方式:
// 方式1
Set<K> keys = map.keySet();// 将map集合中所有的键保存在一个set集合中返回
Iterator<K> it = keys.iterator();
while(it.hasNext()) {
K key = it.next(); // 键
V value = get(key); // 值
}
// 方式2
Set<Entry<K,V>> entrys = map.entrySet();
Iterator<Entry<K,V>> it = entrys.iterator();
while(it.hasNext()) {
Entry<K,V> entry = it.next();
K key = entry.getKey(); // 键
V value entry.getValue(); // 值
}