Java13 集合知识点 一、集合概念1. 定义集合是一种工具/容器用于存储数量不等的多个对象。2. 位置集合相关的接口和类位于java.util包中。3. 学习要点◦ 集合接口的特点◦ 集合接口中功能方法◦ 集合接口对应的实现类◦ 集合的遍历方式二、Collection集合体系1. 父接口Collection接口• 特点存储任意类型Object对象。• 核心方法方法声明 功能说明boolean add(Object o) 将o对象添加到集合中【开发重点】boolean contains(Object o) 判断集合中是否包含o元素包含返回true否则falseboolean remove(Object o) 将o对象从当前集合中移除、删除int size() 获取集合中有效元素的个数• 实现类无直接实现类详见子接口。• 遍历详见子接口。2. 子接口List接口• 特点存储任意类型Object对象有序、有下标、元素允许重复【基础重点】◦ 下标范围0 ~ size()-1有效元素个数-1• 核心方法继承Collection新增以下方法方法声明 功能说明boolean add(Object o) 将元素存储到List集合默认存储在集合的尾部【重点】add(int index, Object o) 将指定的元素插入到集合对应的下标位置Object get(int index) 返回指定下标对应集合元素Object remove(int index) 删除指定下标对应的元素返回值代表被删除的对象Object set(int index, Object o) 修改指定下标对应元素为o对象返回被修改之前的元素• 实现类对比实现类 底层结构 特点 线程安全 效率ArrayList 数组 查询效率高增删效率低 不安全 高JDK2.0Vector 数组 查询效率高增删效率低 安全JDK1.0 低LinkedList 链表 查询效率低增删效率高 不安全 高面试题ArrayList和LinkedList的区别答底层结构不同ArrayList基于数组实现查询快、增删慢LinkedList基于链表实现查询慢、增删快二者均为线程不安全ArrayList在随机访问场景更优LinkedList在频繁增删场景更优。• 遍历方式1. 下标遍历通过下标i get()方法访问元素for(int i0;i集合名.size();i){Object element 集合名.get(i);}2. forEach遍历【开发应用重点】for(数据类型 变量名 : 要遍历的集合名){// 直接操作变量名即可}3. 迭代器遍历forEach底层原理Iterator it 集合名.iterator();while(it.hasNext()){Object element it.next();}◦ 核心方法hasNext()判断是否有下一个元素、next()获取下一个元素3. 泛型• 泛型集合安全的集合强制约束集合的元素类型一致【重点】List数据类型 集合名 new ArrayList数据类型();• 泛型类◦ 语法class 类名泛型标识1,泛型标识2{ // 将泛型标识作为数据类型应用 }◦ 常用标识K/V/E/T◦ 应用创建对象时需指定泛型数据类型前后类型需一致◦ 注意基本数据类型不能作为泛型需使用对应包装类未指定时默认Object类型多个泛型标识需全部指定或全部不指定。4. 集合工具类Collections• 定义用于操作集合元素的工具类提供大量静态方法排序、倒置、随机等• 常用方法方法声明 功能说明static void reverse(List list) 将集合中元素进行倒置static void shuffle(List list) 对集合中元素进行随机打乱static void sort(List list) 对集合中元素进行排序• 排序规则1. 内置比较器java.lang.Comparable接口◦ 需实现compareTo(T t)方法定义排序规则当前对象this与t比较◦ 示例代码public class Student implements ComparableStudent{private String name;private Integer age;private Double score;// 构造方法、getter/setter、toString()Overridepublic int compareTo(Student o) {// 先按年龄升序再按成绩降序最后按姓名升序if(this.age o.age) return 1;else if(this.age o.age) return -1;else {if(this.score o.score) return -1;else if(this.score o.score) return 1;else return this.name.compareTo(o.name);}}}2. 外置比较器java.util.Comparator接口◦ 无需修改实体类通过匿名内部类实现compare(T o1, T o2)方法◦ 示例代码Collections.sort(list, new ComparatorWorker(){Overridepublic int compare(Worker w1, Worker w2) {// 按年龄升序if(w1.getAge() w2.getAge()) return 1;else if(w1.getAge() w2.getAge()) return -1;else return 0;}});• 面试题Collection和Collections的区别◦ Collection是Java集合体系的父接口包含List、Set等子接口定义了集合的通用方法。◦ Collections是操作集合的工具类提供大量静态方法排序、倒置等。5. 子接口Set接口• 特点存储多个任意类型的对象无序、无下标、元素不允许重复• 方法继承Collection接口中的方法• 实现类HashSet【开发面试重点】◦ 自定义对象存储去重原理需重写hashCode()和equals()方法1. hashCode()保证相同内容的对象返回相同哈希码不同内容尽量返回不同哈希码通常拼接所有属性的哈希值2. equals()保证相同内容的对象返回true拒绝重复添加◦ 去重流程存储时先调用hashCode()获取哈希值若对应位置无元素则直接存储若有元素则调用equals()比较内容相同则拒绝添加不同则添加。• 其他Set实现类◦ SortedSetSet的子接口可对元素排序实现类TreeSet需实现Comparable接口◦ LinkedHashSetHashSet的子类按添加顺序存储元素同时保证不重复需重写hashCode()和equals()三、Map集合体系1. Map集合的特点【基础重点】• 存储任意的键值对key-value一个集合元素是一个键值对• 键无序、无下标、不允许重复唯一• 值无序、无下标、允许重复2. Map集合中的方法方法声明 功能说明V put(K key,V value) 添加键值对键不存在则直接添加并返回null键存在则覆盖旧值返回被覆盖的值【开发重点】V remove(K key) 根据键删除对应的键值对返回被删除的值V get(K key) 根据键返回对应的值【重点】boolean containsKey(K key) 判断是否包含指定键包含返回trueboolean containsValue(V value) 判断是否包含指定值包含返回trueint size() 获取Map中键值对的个数3. 实现类对比实现类 特点 线程安全 null支持 效率HashMap 基于哈希表实现键不重复 不安全JDK1.2 允许null作为key/value 高Hashtable 早期哈希表实现 安全JDK1.0 不允许null作为key/value 低Properties Hashtable子类键值均为String类型常用于读取配置文件 - - -SortedMap Map子接口可对键自动排序实现类TreeMap - - -LinkedHashMap HashMap子类按添加顺序存储键值对 - - -面试题HashMap和Hashtable的区别答HashMap线程不安全、效率高允许null键值Hashtable线程安全、效率低不允许null键值二者底层均为哈希表实现HashMap是后续优化版本更推荐使用。4. Map集合的遍历方式1. 键遍历keySet()获取所有键再通过get()获取值【开发应用重点】SetK ks map.keySet();for(K key : ks){V value map.get(key);}2. 值遍历values()仅获取所有值CollectionV vs map.values();for(V value : vs){// 直接操作value}3. 键值对遍历entrySet()获取所有键值对Map.EntrySetMap.EntryK,V kvs map.entrySet();for(Map.EntryK,V kv : kvs){K key kv.getKey();V value kv.getValue();}集合体系结构图Collection体系Interface Collection├─ Interface List│ ├─ Class ArrayList│ ├─ Class LinkedList│ └─ Class Vector└─ Interface Set├─ Class HashSet└─ Interface SortedSet└─ Class TreeSetMap体系Interface Map├─ Class HashMap└─ Interface SortedMap└─ Class TreeMap