集合框架(二)

本文介绍了在Java中处理集合并发修改时可能出现的异常,提供了解决方案,如使用迭代器的删除方法、倒序或顺序遍历以及可变参数的应用。同时详细讲解了Map集合及其子类(HashMap、LinkedHashMap、TreeMap)的特点、遍历方式和底层实现原理。
摘要由CSDN通过智能技术生成

1:集合的并发修改异常

使用迭代器遍历集合时,有同时在删除集合 中的数据,程序就会出现并发修改异常的错误。

由于增强for循环遍历集合就是迭代器遍历集合的简化写法,因此,使用增强for循环遍历集合,又在同时删除集合 中的数据时,程序也会出现并发修改异常的错误。

2:怎样保证遍历集合同时删除数据时不出bug?

使用迭代器遍历集合,但用迭代器自己的删除方法删除数据即可。

如果能用for循环遍历时:可以倒着遍历并删除;或者从前往后遍历,但删除元素后做i--操作

3:可变参数:就是一种特殊形参,定义在方法,构造器的形参列表里,格式是:数据类型...参数名称;

可变参数的特点和好处:

特点:可以传一个或者同时传多个数据给它;也可以传一个数组给它。

好处: 常常用来灵活的接收数据。

Collection:是一个用来操作集合的工具类。

4:Map集合:双列集合

格式:{key1=value1, key2=value2,key3=value3...} ,一次需要存一对数据作为一个元素。

Map集合的每一个元素,“key=value”称为一个键值对/键值对对象/一个Entry对象,Map集合也被叫做“键值对集合”

Map集合的所有键是不允许重复的,但值可以重复,键和值是一一对应的,每一个键只能找到自己对应的值。

5:Map集合体系的特点:

注意:Map系列 集合的特点都是由键决定的,值只能是一个附属品,值是不做要求的。

HashMap:(由键决定特点)无序,不重复,无索引

LinkedHashMap:(由键决定特点)有序,不重复,无索引

TreeMap:(由键决定特点) 按照大小默认升序排列,不重复,无索引

为什么要先学习Map的常用方法?

Map是双列集合的祖宗,它的功能是全部双列集合都可以继承过来使用的。

 6::Map集合的遍历方式

键找值:先获取Map集合全部的键,再通过遍历键来找值

键值对:把“键值对”看成一个整体进行遍历

Lambda:JDK1.8开始之后的新技术

键找值需要用到的Map方法如下:

 键值对:

Entry对象

Map.Entry<String,double>  

Lambda:

map,forEach(k,v)->{

System.out.println(k+"------>"+v) ;

});

7:HashMap集合的底层执行原理:

HashMap跟HashSet的底层原理是一模一样的,都是基于哈希表实现的。原来学的Set 系列集合的底层就是基于Map实现的,只是Set集合的元素只要键数据,不要值数据而已。

HashMap集合是一种增删改查数据,性能都较好的集合。

但它是无序,不能重复,没有索引支持的(由键决定特点)

HashMap的键依赖hashCode方法和equals方法保证键的唯一

如果键存储的是自定义类型的对象,可以通过重写hashCode方法和equals方法,这样可以保证多个对象内容一样时,HashMap 集合就能认为是重复的

LinkedHashMap集合的原理:

底层数据结构是基于哈希表实现的,只是每个键值对元素额外的多了一个双链表的机制记录顺序(保证有序)。实际上:原来学习的LinkedHashSet集合的底层原理就是LinkedHashMap。

TreeMap

特点:不重复,无索引,可排序(按照键的大小默认升序排序,只能对键排序)

原理:TreeMap跟TreeSet集合的底层原理是一样的,都是基于红黑树实现的排序。

TreeMap集合同样也支持两种方式来指定排序规则:

让类实现Comparable接口,重写比较规则

TreeMap集合有一个有参构造器,支持创建Comparator比较器对象,以便用来指定比较规则。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值