Java-集合基础

张开发
2026/4/20 22:54:16 15 分钟阅读

分享文章

Java-集合基础
1.集合简述1.1集合和数组的区别对比维度数组Array集合Collection/Map存储元素类型既可以存基本类型int、char也可以存对象只能存对象基本类型会自动装箱成包装类比如 int→Integer长度特性长度固定创建时必须指定大小长度动态无需指定初始大小添加元素自动扩容自带方法几乎没有增删改查需手动实现比如数组扩容要新建数组拷贝自带丰富方法add ()、remove ()、contains ()、size () 等无需手动写逻辑存储结构只有线性结构连续存储多种存储结构线性、哈希、树形适配不同场景适用场景元素数量固定、频繁查询的场景元素数量不固定、需要频繁增删改查的场景1.2集合的核心体系2.需要掌握的集合补充泛型(E)限定集合中存储数据的类型2.1ArrayList1核心特点ArrayList是List接口的实现类底层基于动态数组实现核心特点是查询快、增删慢适合频繁查询、少量增删的场景。2构造方法构造方法签名功能解释使用场景 / 注意事项ArrayList()无参构造创建一个初始容量为 10 的空列表最常用场景不确定元素数量时元素存满后自动扩容扩容为原来的 1.5 倍3成员方法方法名说明增boolean add(E e)添加元素返回值表示是否添加成功删boolean remove(E e)删除指定元素返回值表示是否删除成功E remove(int index)删除指定索引的元素返回被删除元素改E set(int index,E e)修改指定索引下的元素返回原来的元素查E get(int index)获取指定索引的元素int size()集合的长度也就是集合中元素的个数boolean contains(Object o)判断列表是否包含指定元素包含返回true2.2LinkedList1核心特点LinkedList是List接口的实现类底层基于双向链表实现核心特点是增删快、查询慢适合频繁增删、少量查询的场景。2构造方法构造方法签名功能解释使用场景 / 注意事项LinkedList()无参构造创建一个空的双向链表最常用场景链表无需指定初始容量元素按需存储3成员方法LinkedList完全支持ArrayList中所有的 List 通用方法(add()、remove()、get()、set()、size()等)方法签名功能解释使用场景 / 注意事项void addFirst(E e)在链表头部添加元素等同于push(E e模拟 “入队”“栈顶添加”如消息队列添加紧急消息void addLast(E e)在链表尾部添加元素等同于add(E e)模拟 “入队”如消息队列添加普通消息E getFirst()返回链表头部元素不删除获取队列头部消息不处理E getLast()返回链表尾部元素不删除获取队列尾部消息E removeFirst()删除并返回链表头部元素等同于pop()模拟 “出队”“栈顶弹出”如处理队列头部消息E removeLast()删除并返回链表尾部元素删除队列尾部消息boolean offerFirst()头部添加元素成功返回true与addFirst()功能一致返回值不同适配队列Queue接口的场景boolean offerLast()尾部添加元素成功返回true与addLast()功能一致返回值不同适配队列Queue接口的场景E pollFirst()删除并返回头部元素链表为空时返回nullremovefirst()会抛异常安全删除头部元素避免空链表异常E pollLast()删除并返回尾部元素链表为空时返回null会抛异常安全删除尾部元素E peekFirst()返回头部元素链表为空时返回null getFirst()会抛异常安全获取头部元素E peekLast()返回尾部元素链表为空时返回nullgetLast()会抛异常安全获取尾部元素2.3HashSet1核心特点HashSet是Set接口的实现类底层基于哈希表实现核心特点是无序、不可重复适合需要去重不关心顺序的场景。2构造方法构造方法签名功能解释使用场景 / 注意事项HashSet()无参构造创建一个空的哈希集合默认初始容量 16,负载因子 0.75最常用场景不确定元素数量时负载因子默认 0.75当集合中元素个数达到 “容量 × 负载因子” 时哈希表会扩容默认扩容为原来的 2 倍初始容量默认 16必须是 2 的幂底层优化要求。3成员方法方法签名功能解释使用场景 / 注意事项boolean add(E e)添加元素若元素不存在则添加返回true若已存在则不添加返回false核心添加方法自动去重去重依赖元素的hashCode()和equals()方法boolean remove(Object o)删除指定元素存在则删除返回true不存在则返回false删除元素自定义对象需重写hashCode()和equals()boolean contains(Object o)判断是否包含指定元素包含返回true检查元素是否存在如判断手机号是否已注册int size()返回集合中元素个数统计去重后的元素数量boolean isEmpty()判断集合是否为空避免空集合操作void clear()清空集合中所有元素重置集合2.4HashMap1核心特点HashMap是Map接口的实现类底层基于哈希表实现核心特点存储键值对key-value、key 唯一、无序适合通过key 快速查询value 的场景。2构造方法构造方法签名功能解释使用场景 / 注意事项HashMap()无参构造创建一个空的哈希映射默认初始容量 16负载因子 0.75最常用场景不确定键值对数量时3成员方法方法签名功能解释使用场景 / 注意事项V put(K key,V value)添加键值对1. 若 key 不存在添加后返回null2. 若 key 已存在用新 value 覆盖旧 value返回旧 value核心添加 / 修改方法V get(Object key)根据 key 获取 value1. 若 key 存在返回对应的 value2. 若 key 不存在返回null核心查询方法boolean containsKey(Object key)判断是否包含指定 key包含返回true检查 key 是否存在boolean containsValue(Object Value)判断是否包含指定 value包含返回truevalue 可重复检查 value 是否存在效率较低int size()返回键值对的个数统计映射数量boolean isEmpty()判断映射是否为空避免空映射操作V remove(Object key)根据 key 删除键值对返回1. 若 key 存在返回被删除的 value2. 若 key 不存在返回null核心删除方法key 唯一HashMap 中 key 不能重复重复添加会覆盖 valuekey 可以为null但只能有一个null key重复添加null key 会覆盖 valuevalue 可以为null且可以有多个null valuekey 推荐用不可变对象如String、Integer避免修改 key 的属性导致hashCode()变化无法查询到 value。集合类核心构造方法核心添加方法核心查询方法核心删除方法特有优势场景ArrayListArrayList()、ArrayList(int)add(E)、add(int,E)get(int)、indexOf(Object)remove(int)、remove(Object)频繁查询、少量增删LinkedListLinkedList()addFirst(E)、addLast(E)getFirst()、getLast()removeFirst()、removeLast()频繁增删、消息队列HashSetHashSet()、HashSet(Collection)add(E)contains(Object)remove(Object)去重存储、不关心顺序HashMapHashMap()、HashMap(int)put(K,V)、putIfAbsent(K,V)get(K)、containsKey(Object)remove(K)键值对快速查询、映射存储

更多文章