☰
集合【开发的重点】
2026/10/17 2:49:35 网站建设 项目流程

一、Collection集合体系

1.Collection父接口

特点:存储任意Object对象

常用方法

方法作用
boolean add(Object o)添加元素
boolean contains(Object o)判断是否包含该元素
boolean remove(Object o)删除指定元素
int size()获取集合有效元素个数

Collection没有直接实现类,功能由子接口List、Set实现

2.List子接口

有序、有下标、允许元素重复;下标范围:0~size()-1

List特有方法(继承Collection之外)

方法说明
add(int index,Object o)在指定下标插入元素
Object get(int index)按下标获取元素
Object remove(int index)按下标删除,返回被删对象
Object set(int index,Object o)修改下标位置元素,返回旧值

List实现类对比

实现类底层查询增删线程安全备注
ArrayList数组快慢不安全JDK2,初始容量 10,扩容 1.5 倍,开发最常用
Vector数组快慢安全JDK1,效率低,基本淘汰
LinkedList双向链表慢快不安全适合频繁增删场景

面试:ArrayList与LinkedList区别

(1)ArrayList底层数组,查询快,中间增删慢;线程不安全

(2)LinkedList底层链表,查询慢,中间增删快;线程不安全

List三种遍历

(1)普通for下标遍历

for(int i = 0; i < list.size(); i++){ Object ele = list.get(i); }

(2)增强for循环(forEach,开发常用)

底层本质是迭代器

for(类型 变量 : list){ //直接使用变量 }

(3)迭代器Iterator遍历

Iterator it = list.iterator(); while(it.hasNext()){ //判断是否还有元素 System.out.println(it.next()); //取出下一个 }

3.泛型

作用:约束集合内元素统一类型

List<String> list = new ArrayList<String>();

泛型标识:K、V、E、T

注意:

(1)不能写基本类型,要用包装类

(2)不指定泛型默认就是Object

(3)定义多个泛型,要么全部指定,要么全部不指定

4.Collection集合工具类

面试区分:Collection是接口;Collections是工具类,全部静态方法

常用静态方法:

(1)reverse(List list):集合反转

(2)shuffle(List list):随机打乱顺序

(3)sort(List list):集合排序

两种比较器

(1)Comparable内置比较器(写在实体类内部)

实体类实现Comparable<T>接口,重写compareTo(T o),this和传入对象比较。返回正数、负数、0。返回0代表对象相等

(2)Comparator外置比较器(写在集合排序处,匿名内部类/lambda)

重写compare(o1,o2),对比两个传入对象,不用修改实体类

5.Set子接口

无序、无下标、元素不允许重复,全部继承Collection的方法

实现类

(1)HashSet

底层哈希表;去重原理:

a.调用对象hashCode()得到哈希码,算出存储位置

b.该位置无元素,直接存入

c.该位置已有元素,调用equals()比较内容

equals返回true:判定重复,拒绝存入

equals返回false:允许存入

自定义对象存入HashSet:必须重写,hashCode()+equals()

(2)LinkedHashSet

HashSet子类;元素不重复,保存添加顺序;自定义对象同样要重写hashCode、equals

(3)TreeSet(SortedSet实现类)

自动排序;自定义对象存入,实体类要实现Comparable接口重写compareTo;compareTo返回0代表对象重复,会被去重

二、Map集合体系

Map存储key-value键值对

key:无序、无下标、不可重复

value:无序、无下标、允许重复

Map常用方法

方法功能
V put(K key,V value)添加键值对;key 已存在则覆盖旧 value,返回被覆盖的值
V remove(K key)根据 key 删除,返回被删除的 value
V get(K key)根据 key 获取 value
boolean containsKey(K key)判断是否包含指定 key
boolean containsValue(V value)判断是否包含指定 value
int size()获取键值对总数量

Map实现类

实现类版本线程安全null 键值特点
HashMapJDK1.2不安全允许 key、value 为 null开发最常用;自定义对象做 key,必须重写 hashCode+equals
HashtableJDK1.0安全不允许 null老旧,效率低
Properties继承 Hashtable安全key、value 只能 String读取配置文件
TreeMapSortedMap 实现不安全key 不能 nullkey 自动排序;key 自定义类需要 Comparable
LinkedHashMapHashMap 子类不安全允许 null保存键值对添加顺序

面试:HashMapJDK1.2;Hashtable区别

(1)版本:HashMapJDK1.2;HashtableJDK1.0

(2)线程安全:HashMap 不安全;Hashtable 安全

(3)null:HashMap 允许 null 键 null 值;Hashtable 不允许

(4)效率:HashMap 高;Hashtable 低

Map三种遍历

(1)keySet()键遍历(常用)

Set<K> keys = map.keySet(); for(K key : keys){ V value = map.get(key); }

(2)values()只遍历值

Collection<V> values = map.values(); for(V v : values){ }

(3)entrySet()键值对遍历(效率最高)

Set<Map.Entry<K,V>> entries = map.entrySet(); for(Map.Entry<K,V> entry : entries){ K key = entry.getKey(); V value = entry.getValue(); }

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询