当前位置: 首页 > news >正文

Java13 集合知识点

一、集合概念

1. 定义:集合是一种工具/容器,用于存储数量不等的多个对象。

2. 位置:集合相关的接口和类位于java.util包中。

3. 学习要点:

◦ 集合接口的特点

◦ 集合接口中功能方法

◦ 集合接口对应的实现类

◦ 集合的遍历方式
二、Collection集合体系

1. 父接口:Collection接口

• 特点:存储任意类型Object对象。

• 核心方法:
方法声明 功能说明
boolean add(Object o) 将o对象添加到集合中【开发重点】
boolean contains(Object o) 判断集合中是否包含o元素,包含返回true,否则false
boolean 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.0)
Vector 数组 查询效率高,增删效率低 安全(JDK1.0) 低
LinkedList 链表 查询效率低,增删效率高 不安全 高

面试题:ArrayList和LinkedList的区别?
答:底层结构不同,ArrayList基于数组实现,查询快、增删慢;LinkedList基于链表实现,查询慢、增删快;二者均为线程不安全,ArrayList在随机访问场景更优,LinkedList在频繁增删场景更优。
• 遍历方式:

1. 下标遍历:通过下标i + get()方法访问元素
for(int i=0;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 Comparable<Student>{
private String name;
private Integer age;
private Double score;
// 构造方法、getter/setter、toString()
@Override
public 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 Comparator<Worker>(){
@Override
public 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实现类:

◦ SortedSet:Set的子接口,可对元素排序,实现类TreeSet(需实现Comparable接口)

◦ LinkedHashSet:HashSet的子类,按添加顺序存储元素,同时保证不重复(需重写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) 判断是否包含指定键,包含返回true
boolean containsValue(V value) 判断是否包含指定值,包含返回true
int 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()获取值【开发应用重点】
Set<K> ks = map.keySet();
for(K key : ks){
V value = map.get(key);
}
2. 值遍历(values()):仅获取所有值
Collection<V> vs = map.values();
for(V value : vs){
// 直接操作value
}
3. 键值对遍历(entrySet()):获取所有键值对(Map.Entry)
Set<Map.Entry<K,V>> kvs = map.entrySet();
for(Map.Entry<K,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 TreeSet
Map体系
Interface Map
├─ Class HashMap
└─ Interface SortedMap
└─ Class TreeMap

http://www.jsqmd.com/news/1008529/

相关文章:

  • 2026年华东化合物半导体企业技术实力全景解析:华东,深圳,南京,重庆电动汽车sic/长三角ai芯片/优选指南 - 优质品牌商家
  • 数据工程师实战降维指南:PCA、UMAP、t-SNE与特征选择选型心法
  • M68HC11 SCI高级功能:接收器唤醒与波特率生成器深度解析
  • LiveDraw:让屏幕成为你的实时画布,告别静态标注时代
  • 四足机器人ROS2 SDK实战指南:Unitree Go2高效开发与深度集成
  • 小米版Claude Code正式发布,这次开源给到夯。
  • Java14 异常知识点
  • BarrageGrab:无需代理的全平台直播弹幕抓取终极解决方案
  • 2026年知识产权商标注册公司TOP10实力榜:专业机构推荐指南 - 品牌推荐
  • Android Studio中文语言包:5分钟快速汉化,打造母语开发环境
  • 大模型概念级遗忘:精准擦除目标知识的神经外科方案
  • 保姆级教程:在华为AR路由器上配置DHCPv6中继与PD前缀代理(附报文抓包分析)
  • 2026年6月反应釜厂家综合实力深度评测与权威排行榜:专业坐标与理性选择指南 - 品牌推荐
  • ArcGIS栅格计算器不够用?教你写一个‘超级计算器’,批量搞定单位换算、空值填充和条件判断
  • 鸣潮工具箱终极指南:5分钟解锁120帧极致游戏体验
  • 嵌入式MCU深度调试:BDC与DBG模块原理、配置与实战应用
  • 2026年6月沈阳设计培训学校实务参考榜:行业洗牌期,这5家机构凭硬核实力脱颖而出 - 品牌推荐
  • GanttProject免费开源项目管理工具:快速创建专业甘特图的完整指南
  • 2026年6月北京除尘器厂家综合实力深度评测与权威排行榜:专业坐标与理性选择指南 - 品牌推荐
  • NSK W1403FA-5P-C5Z8 高速精密丝杠技术详述
  • 大件快递怎么寄划算?大件快递怎么寄便宜?省钱技巧+寄件平台对比 - 快递物流资讯
  • 快递首重多少斤?快递首重是1公斤吗?重量怎么算才省钱 - 快递物流资讯
  • GanttProject完全指南:如何用免费开源工具快速规划你的项目?
  • 2026年6月麻将机十大品牌深度横评:技术、品控与场景适配全解析,谁才是真正的“省心王者”? - 品牌推荐
  • wxappUnpacker终极指南:5步解锁小程序逆向工程
  • BetterNCM安装器深度技术解析:Rust构建的现代化插件管理架构揭秘
  • 汽车IPD全流程落地实战案例 - 智慧园区
  • 告别Axure RP英文界面:3分钟打造全中文设计环境
  • 2026年番禺区广州实体刻章店服务能力对比分析:资质、效率与全品类覆盖谁更胜一筹? - 优质品牌商家
  • 深度解析JPEXS Free Flash Decompiler:5大核心技术架构揭秘