12.集合
-
集合类又称为容器
-
集合的长度是可变的,数组的长度是不可变的
-
常用的集合有List、Set、Map
Collection
-
List和Set都实现了Collection接口
-
Collection接口不能直接使用,但该接口提供了添加、删除、管理数据的方法
-
方法
方法 | 返回值 | 描述 |
---|---|---|
Add() | Void | 将指定对象添加到集合中 |
Remove() | void | 从集合中移除对象 |
Size() | int | 获取集合大小 |
isEmpty() | boolean | 判断集合是否为空 |
Iterator() | Iterator | 获取该集合的迭代器,用于遍历所有元素 |
List
-
list集合实现了Collection接口 拥有Collection接口的所有方法
-
额外有两个方法
① get(int index);
② set(int index,Object obj);
-
List接口的实现类
(1) ArrayList
① 可变数组保存对象
② 允许保存所有元素,包括null
③ 可以根据索引快速访问
④ 缺点是向指定索引位置进行插入和删除对象时速度较慢
(2) Vector
Vector 与 ArrayList 一样,也是通过数组实现的,不同的是它支持线程的同步
(2) LinkedList
① 链表结构保存对象
② 插入、删除的效率较高
③ 对于随机访问的速度较慢
Set
- Set 注重独一无二的性质,该体系集合用于存储无序(存入和取出的顺序不一定相同)元素,值不能重
复。对象的相等性本质是对象 hashCode 值(java 是依据对象的内存地址计算出的此序号)判断
的,如果想要让两个不同的对象视为相等的,就必须覆盖 Object 的 hashCode 方法和 equals 方
法。
-
Set集合实现了Collection接口 拥有Collection接口的所有方法
-
Set接口的实现类
(1) HashSet
① 不保证迭代顺序(可能每次迭代的结构顺序都不同)
② 此类运行存入null元素
③ 元素的哈希值是通过元素的hashcode 方法来获取的
④ HashSet 首先判断两个元素的哈希值,如果哈希值一样,接着会比较equals 方法 如果 equls 结果为 true ,HashSet 就视为同一个元素。如果 equals 为 false 就不是同一个元素。
(2) TreeSet
① 遍历的顺序是按照自然顺序递增
② 也可以指定比较器进行递增排序
③ 要想知道存放顺序,被排序对象需要实现comparable接口
④ TreeSet新增的方法
方法名 | 描述 | |
---|---|---|
First() | ||
Last() | ||
Comparator() | ||
headSet() | ||
SubSet() | ||
tailSet() | ||
Map
-
map集合以key-value的方式进行值的存储
-
map不能存放相同的key值
-
map集合允许value为null,且没个数限制
-
map集合常用方法
方法 | 返回值 | 描述 |
---|---|---|
put(Object key,Object value) | void | 给Map添加值 |
get(K key) | Object | 通过key获取value |
Containskey(Object key) | boolean | 查找map集合中是否包含key映射 |
keySet() | Set | 获取由key组成的Set集合 |
Values() | Collection | 获取由value组成的Collection集合 |
-
map集合的实现类
(1) HashMap
① 建议使用HashMap实现类,因为HashMap集合的添加、删除效率更高
② 运行key和value为null,但是必须保证key的唯一性
(2) ConcurrentHashMap
ConcurrentHashMap 和 HashMap 思路是差不多的,但是因为它支持并发操作,所以要复杂一些
(3) HashTable
Hashtable 是遗留类,很多映射的常用功能与 HashMap 类似,不同的是它承自 Dictionary 类,
并且是线程安全的,任一时间只有一个线程能写 Hashtable,并发性不如 ConcurrentHashMap,
因为 ConcurrentHashMap 引入了分段锁。Hashtable 不建议在新代码中使用,不需要线程安全
的场合可以用 HashMap 替换,需要线程安全的场合可以用 ConcurrentHashMap 替换。
(4) TreeMap
① 不仅实现了Map接口还实现了SortedMap接口,因此集合的映射关系具有一定的顺序
② 添加、删除的效率比不上HashMap
③ 不允许key为null
用 ConcurrentHashMap 替换。
(4) TreeMap
① 不仅实现了Map接口还实现了SortedMap接口,因此集合的映射关系具有一定的顺序
② 添加、删除的效率比不上HashMap
③ 不允许key为null
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)