1、Collection
1.1 概述
接口不能实例化,只能通过实现类来实例化。
1.2 使用,常用方法
多态的方式创建
1.3 迭代器
2、List
2.1 概述
List为接口,用其实现类创建对象。
List带整数索引
2.2 常用方法
2.3 并发修改异常
2.4 列表迭代器listIterator
注意:使用Iterator迭代器,
在遍历的时候修改会发生并发修改异常。
2.5 增强for循环
内部原理是一个Iterator迭代器
检验是否为Iterator迭代器的方法,就是利用Iterator迭代器会发生并发修改异常的特点。结果发现,确实采用增强for遍历的时候进行add操作会发生该异常。所以增强for内部原理确实是一个Iterator迭代器。
2.6 栈和队列
2.7 数组
2.8 List集合子类特点
2.9 LinkedList集合特有功能
3、Set
3.1 概述
HashSet对集合的迭代顺序不做任何保证,不包含重复元素。
3.2 哈希值
同一个对象多次调用hashCode()方法返回的哈希值是相同的。默认情况下,不同对象的哈希值是不同的。通过方法重写,可以实现不同对象的哈希值是相同的。如下:
3.3 HashSet集合概述和特点
3.4 HashSet保证元素唯一性的源码分析
因为底层为哈希表存储,所以结合之前学过的哈希表的增删知识就更好理解了。对象的哈希值可以计算出对象的存储位置,先比较该位置是否有元素,如果有则进一步遍历该位置的所有元素(桶存储,一个位置可能对应多个元素),比对哈希值是否相同。如果哈希值相同再进一步通过equals确认内容是否也相同,如果内容相同,才可以确认要存入的新元素为重复元素,重复则不存储。
3.5 数据结构——哈希表
哈希值取余得到存储位置(当然这有多种计算方法,对应不同的散列函数)
注意要重写hashCode方法和equals方法,才可以实现不重复
。
3.6 LInkedHashSet集合概述和特点
链表保证元素有序,哈希表保证元素唯一,不重复
3.7 TreeSet
注意集合中存储的为引用类型
,所以存储整数的时候需要用整数的包装类Integer
3.8 自然排序Comparable的使用
但是当两个对象名字不同,年龄相同的时候,结果为0,会被认为是重复元素,不会存入
。需要进一步修改规则。即
3.9 比较器排序Comparator的使用
学生类中不需要实现自然排序。借用匿名内部类来实现Comparator<Student>()
一定注意,写了主要条件对比,还要记得写次要条件比较,不然当主要条件结果为0时,会认为重复元素,不会存入
。
4、泛型
4.1 概述
类型名必须为包装类,不能为原始类。例如int不可,要写Integer
4.2 泛型类
4.3 泛型方法
4.4 泛型接口
4.5 类型通配符
4.6 可变参数
a是一个int类型的数组
。
如果一个函数有多个参数的时候,可变参数要放到最后
。
4.7 可变参数的使用
5、Map
5.1 概述和常用方法
5.2 遍历Map
即返回Map中键值对的集合。
Map.Entry<K, V> 的方法有:
字符类型为character
取出值做++操作后,要重新存入
,才起到修改的效果。
TreeMap对键进行了排序,键不允许重复。对应TreeSet
6、Collections
6.1 概述
Collection是单列集合的底层接口,而Collections是一个具体的类,针对集合操作。