07_容器
1.JDK提供的容器API位于java.util包内
2.容器API的类图结构

3.向实现了Collection接口的容器中装元素采用一个一个装入的形式,向实现了Map接口的容器中装元素采用成对装入的形式
4.实现了Set接口的容器中的元素没有顺序且不可以重复,实现了List接口的容器中的元素有顺序且可以重复(重复指对象之间互相equals)
5.Map接口定义了存储"键(key)-值(value)映射对"的方法
6.Collection接口的方法
//添加方法:
add(Object o) //添加指定元素
addAll(Collection c) //添加指定集合中所有元素
//删除方法:
remove(Object o) //删除指定元素(比较集合中是否有对象equals对象o)
removeAll(Collection c) //移除此 collection 中那些也包含在指定 collection 中的所有元素
retainAll(Collection c) //保留两个集合的交集
clear() //清空集合,返回void
//查询方法:
size() //集合中的有效元素个数
toArray() //将集合中的元素转换成Object类型数组
//判断方法:
isEmpty() //判断是否为空
contains(Object o) //判断是否包含指定元素
containsAll(Collection c) //判断是否包含指定集合中所有元素
7.Collection容器中装的必须都是Object
8.重写一个对象的equals()方法就必须重写它的hashCode方法,这样做才能保证不违背hashCode方法中“相同对象必须有相同哈希值”的约定。如果重写了equals()方法使两个引用值不同的对象之间equal,那么一定要重写它们的hashCode()方法,保证它们的hashCode()方法返回的值也相同(虽然它们实际是两个对象,引用值实际并不相同,但是我们只要通过重写hashCode()方法,让返回的hashCode值相同就行,这里可以返回对象中String属性的hashCode值,因为String已经重写了hashCode()方法,只要字符串内容相同,hashCode()方法的返回值就相同)。这么做的目的是提高比较的效率,使用场景:对象在Map容器中作为键,在比较时(hashCode是一个int值)
9.ArrayList底层使用数组,LinkedList使用链表,HashSet使用哈希表
10.Iterator对象称作迭代器,用以遍历容器内元素
11.Iterator类的方法:
boolean hasNext() 用以判断游标右侧有无元素
E next() 返回游标右边的元素并将游标移动到下一个位置
void remove() 删除游标左边的元素,执行完next后该操作只能执行一次
12.Iterator对象的remove方法是是在迭代过程中删除元素的唯一安全的方法
13.Iterator在遍历时会对容器进行锁定,此时只能调用Iterator的remove方法,而不可调用容器本身的remove方法
14.使用增强的for循环遍历数组或容器时,只能看,不能改,因为实际还是调用的Iterator对象
15.List容器中的元素都有一个整数型的序号记载其在容器中的位置,可以根据序号存取容器中的元素
16.List容器的常见方法
E get(int index);获取该位置的元素
E set(int index,E element);替换该位置的元素,并返回原来处于该位置的元素
void add(int index,E element);注意add和set的不同,前者是把原位置的元素往后移一格,原位置放置新元素,后者是直接替换
E remove(int index);
int indexOf(Object o);
int lastIndexOf(Object o);
17.类java.util.Collections提供了一些静态的方法实现了基于List容器的一些常用算法
static void sort(List<?> list) 从低到高排序
static int binarySearch(List,T)二分法查找对象o的位置
static void shuffle(List<?> list) 对List容器中的对象进行随机排列
static void reverse(List<?> list) 对List容器中的元素进行逆序排列
static void fill(List,T) 用指定对象替换List中所有的对象
static void copy(List desk,List src) 将src中的对象复制到desk中,desk集合的长度至少应该和src集合相同,如果desk较长,多出的长度的对象不会被覆盖,如果desk较短,会异常
18.所有可以"排序"的类都实现了java.lang.Comparable接口,该接口只有一个方法compareTo,该方法返回值为int类型,返回0代表相等,返回正数代表大于传入形参的值,返回负数代表小于于传入形参的值
19.String类的对象比较大小(默认实现了了Comparable接口的compareTo方法)是一个一个字母比较
20.如何选择数据结构:Array读快改慢 Linked读慢改快 Hash两者之间
21.实现了Map接口的类用来存储键-值对
22.Map接口的实现类有HashMap和TreeMap等
23.Map类中存储的键值对通过键来标识,所以键值不能重复
24.Map接口的常见方法
V put(K key, V value) 存入键值对,如果集合里已经有相等的key,就会将原来对应的值替换为value,并返回被替换的value
V get(Object key)
V remove(Object key)
boolean containsKey(Object key)
boolean containsValue(Object value)
int size()
boolean isEmpty()
void putAll(Map m)
void clear()
25.auto-boxing/unboxing 自动在合适的时机将基础数据类型转为对应的对象/将对象转为对应的基础数据类型
26.泛型,使用<类>;可用在List<E>,Map<K,V>,Collection<E>,Comparable<E>,Set<E>,Iterator<E>等处使用
浙公网安备 33010602011771号