当前位置:网站首页>2022/08/06 学习笔记 (day24) 集合
2022/08/06 学习笔记 (day24) 集合
2022-08-08 03:24:00 【激进的黄瓜】
一、List集合:
List集合代表一个元素有序、可重复的集合,集合中每个元素都有其对应的顺序索引。List集合允许使用重复元素,可以通过索引来访问指定位置的集合元素。List集合默认按元素的添加顺序设置元素的索引,例如第一次添加的元素的索引为0,第二次添加的元素索引为1….以此类推
1.1、ArrayList集合:
ArrayList类封装了一个动态的、允许再分配的Object[]数组。
1.1.1、常用方法
| void add(Object obj) | 向List集合中添加元素,元素可以重复添加,元素值可以是null |
| int size() | 获取List集合中元素的个数 |
| Object get(int index) | 从List集合中获取元素 |
| boolean remove(Object obj) | 从List集合中删除元素 |
| boolean remove(int index) | 从List集合中删除元素 |
| void clear() | 从List集合中删除所有元素 |
| boolean contains(Object obj) | 集合中是否存在某个元素,如果存在返回true |
1.1.2、面试题:
需求:计算所有学生成绩的总和,以及班级平均分
分析:
(1)创建Student对象,包含以下私有属性
(2)创建单元测试方法,计算所有学生成绩的总和、班级平均分
(3)要求使用List集合实现需求
二、LinkedList
LinkedList与ArrayList的实现机制完全不同,ArrayList内部是以动态数组的形式来保存数据,因此随机访问集合元素时有较好的性能;而LinkedList内部是以链表的形式来保存集合中的元素,因此在随机访问元素时性能较差,但是在插入和删除元素时,性能表现出色;由于内部是基于链表的结构,所以相对于ArrayList集合,LinkedList类中添加了一些处理列表两端元素的方法
2.1、常用方法:
| void addFirst(Object obj) | 向集合容器的顶端添加元素 |
| void addLast(Object obj) | 向集合容器的底端添加元素 |
| Object getFirst() | 获取集合容器顶端的元素 |
| Object getLast() | 获取集合容器底端的元素 |
| Object removeFirst() | 删除集合容器顶端的元素,并返回被删除的元素 |
| Object removeLast() | 删除集合容器底端的元素,并返回呗删除的元素 |
三、Vector
Vector和ArrayList使用方法基本一致
3.1、Vector和ArrayList的区别
Vector是一个线程安全的List实现类,但ArrayList是线程不安全的实现类,所以Vector要比ArrayList的安全性高一些,但是ArrayList的性能要比Vector高一些;
综上所述,在多线程的开发情况下,选择Vector,否则其他情况都使用ArrayList。
四、Set集合:
Set集合类似于一个罐子,程序可以把多个元素扔进罐子里,而Set集合不能记住元素添加的顺序;Set集合中不允许保存相同的对象
五、HashSet
HashSet是Set接口的典型实现,大多数时候使用Set集合时就是使用这个实现类。HashSet按照Hash算法来储存集合中的元素,因此具备很好的储存和查找性能
5.1、HashSet具备的特点:
- - 不能保证元素的排列顺序,顺序可能与添加顺序不同,顺序也有可能发生变化
- - 集合的元素值可以为null
- - HashSet不是线程同步的,如果多个线程同时访问一个HashSet,假设有两个或者两个以上线程同时修改了HashSet集合时,则必须通过代码来保证其同步
5.2、常用方法
| void add(Object obj) | 向Set集合中添加一个元素 |
| int size() | 获取Set集合中元素的个数 |
| boolean remove() | 从Set集合中删除元素,删除成功返回true |
| void clear() | 删除Set集合中的所有元素 |
| boolean contains(Object obj) | 查询Set集合中是否包含指定的元素,如果包含就返回true |
| Iterator iterator() | 获得Set集合的迭代器,用于遍历集合元素 |
六、LinkedHashSet
LinkedHashSet是HashSet的子类,LinkedHashSet集合也是根据hashCode值来决定元素的储存位置,但他同时使用链表来维护元素的次序,这样使得元是以插入的顺序来保存的。
LinkedHashSet需要维护元素的插入顺序,因此性能略低于HashSet的性能
七、面试题
需求:随机生成5个0-10之间的整数,要求数字不可以重复
分析:
(1)将生成的随机数放置到Set集合中
(2)用迭代器遍历Set集合
(3)用ForEach遍历Set集合
八、Collections工具类
集合工具类,针对于List集合提供一系列功能的操作
8.1、常用方法
| void sort(Collection c) | 对集合中的元素按照自然顺序进行排序 |
| Object max(Collection c) | 获取集合中的最大元素,并且返回最大元素 |
| Object min(Collection c) | 获取集合中的最小元素,并且返回最小元素 |
| boolean replaceAll(Collection c, Object ele1, Object ele2) | 元素替换,将集合中的所有元素ele1替换成ele2 |
九、Map
Map用于保存具有映射关系的数据,因此Map集合里保存着两组值,一组值用于保存Map里的key,另外一组值用于保存Map里的value,key和value都可以是任何引用类型的数据。
Map的key不允许重复;key和value之间存在单项一对一关系,即通过指定的key,总能找到唯一的、确定的value。从Map中取出数据时,只要给出指定的key,就可以取出对应的value
十、HashMap
10.1、Map.Entry
Map中包括了一个内部类Entry,该类封装了一个key-value记录
| Set entrySet() | 返回Map中包含的key-value对所组成的Set集合,每个集合元素都是Map.Entry对象 |
| Object getKey() | 返回该Entry里包含的key值 |
| Object getValue() | 返回该Entry里包含的value值 |
| Object setValue() | 设置该Entry里包含的value值,并返回新设置的value值 |
10.2、常用方法
| void clear() | 删除该Map对象中的所有key-value对 |
| boolean containsKey(Object key) | 查询Map中是否包含指定的key,如果包含就返回true |
| boolean containsValue(Object value) | 查询Map中是否包含指定的value,如果包含就返回true |
| boolean isEmpty() | 查询该Map是否为空(即不包含任何key-value对),如果为空则返回true |
| Object get(Object key) | 返回指定key所对应的value;如果此Map中不包含该key,则返回null |
| void put(Object key, Object value) | 添加一个key-value对,如果当前Map中已有一个与该key相等的key-value对,则新的key-value对会覆盖原来的key-value对 |
| boolean remove(Object key) | 这是Java8新增的方法,删除指定key所对应的key-value对,删除成功返回true |
| int size() | 返回该Map里的key-value对的个数 |
| Set keySet() | 返回该Map中所有的key组成的Set集合,可以用来遍历Map集合 |
十一、HashTable
Hashtable和HashMap使用方法基本一致
11.1、HashMap和HashTable的区别:
- - Hashtable不允许使用null作为key和value,如果试图把nul放进HashTable中,将会引发NullPointerException异常;但HashMap可以使用null作为key或value
- - Hashtable是一个线程安全的Map实现类,但HashMap是线程不安全的实现类,所以HashMap要比Hashtable的性能高一点;但是如果有多个线程访问同一个Map对象时,使用Hashtable实现类会更好
边栏推荐
- 黑马jvm课程笔记d1
- Kubernetes技术与架构(八)
- CGAN theory explanation and code implementation
- 11 个不能错过的高可用技巧
- 意识的概念框架:我们的意识从注意图式产生?
- 开发如何尽可能的避免BUG
- C#《原CSharp》第四回 人常见岁月更替 却难知人文相继
- Simulate login - add cookies, use postmanget to request web page data
- SIGIR'22 | Joint optimization of inter-ad ordering and intra-ad creative prioritization
- 巧记硬链接与软链接
猜你喜欢

From hardcover to smartcover, the next wave is emerging. Listen to what smart home gurus have to say?

DolpinScheduler

栈的压入、弹出序列

egg-validate-custom validation method error language (error Chinese prompt)

egg-Nodemailer-qq邮箱验证码开发配置

STFW3N150管脚功能 数据表(PDF)引脚图

LeetCode刷题——组合总和 Ⅳ#377#Medium

vulfocus靶场情景模式-内网死角

哪里期货开户低手续费高交返

解决Mysql和redis缓存不一致问题
随机推荐
Flume (三) --------- Flume 进阶
Deep profiling of classes and objects
响应式pbootcms模板健身器械类网站
Vulfocus Shooting Range Scenario Mode - Intranet Dead End
PTA 习题1.9 有序数组的插入
The difference between orElse and orElseGet in Optional
DisplayPort-DP接口知识
保姆级教程!Golang微服务简洁架构实战
RV-GAN: Segmentation of retinal vascular structures in fundus photographs using a novel multi-scale generative adversarial network
PC博物馆(5) 1975 IMSAI 8080
ICML 2022 | LeNSE: 基于子图的大规模组合优化: 实现了 140 多倍的速度提升
解决Mysql和redis缓存不一致问题
小程序优化实践
Redis-事物
工厂模式设计思路
类和对象的深度剖析
Simulate login - add cookies, use postmanget to request web page data
Mysql整行增删改查
PTA Exercise 1.8 Binary Search
开发如何尽可能的避免BUG