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

09 集合框架2

集合元素的迭代方式有哪些?

for循环,for-each循环(底层迭代器),迭代器

Iterator<String> it = list.iterator();
while(it.hasNext()) {String ele = it.next();System.out.println(ele);
}

并发修改集合元素异常是怎么造成的?怎么解决?

在迭代过程中使用List里面的增加方法和删除方法修改了集合的长度

解决方法:使用迭代器的删除方法去删除集合里面的值

示例:

Iterator<String> it=list.iterator();
while(it.hasNext()){
String b=it.next();
if(a.equals(b)){
it.remove();
}
}

Set集合的特点是什么?有哪些常用的实现?

特点:不记录元素添加顺序,元素不可以重复

常用的实现:

HashSet:底层是哈希表,删改的效率高,需要在类中重写equals方法

TreeSet:底层是红黑树,用于比较值的大小,有排序的作用,使用comparable接口和comparator接口

HashSet集合的底层原理是什么?

Hashset:底层是哈希表,先使用hashcode计算值的索引,看这个 索引位置上是否有元素,如果没有就直接添加进去.如果有的话,使用equals方法进行比较两个元素是否相等,如果相等就放弃添加,不同就在该索引位置使用链表进行添加

HashSet使用hash表计算值添加元素
TreeSet使用二叉树添加元素

Comparable接口和Comparator接口的作用和区别?

Comparable:内部比较器使用ComparaTo的方法对元素大小进行比较,然后将集合元素按照升序排列

示例:

public class User2 implements Comparable<User2> {//给类型才正确private String name;private int age;//省略getter,setter方法//重写规则@Overridepublic int compareTo(User2 o) {//实现比较的规则//return  this.age=o.getAge();//使用里面的字段进行比较,比较规则return this.name.compareTo(o.getName());//return 0;//0表示两个对象相同}//集合调用格式//创建三个对象加载TreeSet集合中User2 u1=new User2("张三",21);User2 u2=new User2("李四",22);User2 u4=new User2("王五",23);Set<User2> set=new TreeSet<>();//第一个直接添加set.add(u1);

Comparator:外部比较器,在外部创建一个类继承该接口,重写里面的comparator方法,自己定义里面的规则

public class NameComparator implements Comparator<UserComparator> {
//comparator比较器,自定义排序规则@Overridepublic int compare(UserComparator o1, UserComparator o2) {return o1.getName().compareTo(o2.getName());}//对象调用格式//创建三个对象加载TreeSet集合中UserComparator u1=new UserComparator("张三",21);UserComparator u2=new UserComparator("李四",22);UserComparator u3=new UserComparator("王五",23);UserComparator u4=new UserComparator("王五",23);Set<UserComparator> set=new TreeSet<>(new NameComparator());//使用NameComparator来实现比较//第一个直接添加set.add(u1);

说说Map集合的使用场景

应用于键和值一一对应的情况,配合循环语句增删改查的效率很高,

与类型无关,应用于低耦合场景,代码更通用

可以轻松取得值的个数

如何完成Map集合中元素的增删改查?

//创建 Map集合
Map<String Object> map=new HashMap<>();
//添加
map.put("张三",25);
//修改
map.put("张三",56);
//删除
map.remove("张三")//使用键值进行删除
//查询
map.get("张三")//用键查值
map.containskey("张三")//判断map中是否有指定的key
map.containsvalue(23)//判断map中是否包含指定的值//获取map中所有的键
Set<String> keys=map.keySet();
for(key:keys){
sout.key;
}//获取map中所有的value
Set<Objiect> values=map.values();
sout.values;//拿到里面所有的键值对
Set<Map.Entry<String,Objiect>> intries=map.entrySet();
sout.intries;
//取出里面的每一个键值对
for(Map.Entry<String,Objiect> entry:entries){sout.(entry.getkey());//sout.(entry.getvalue());
}

TreeMap的使用方法和TreeSet相同

http://www.lryc.cn/news/70442.html

相关文章:

  • 相见恨晚的5款良心软件,每款都是经过时间检验的精品
  • AI与税务管理:新技术带来的新机遇和新挑战
  • springboot 集成 Swagger3(速通)
  • 2023年NOC大赛创客智慧编程赛项图形化复赛模拟题二,包含答案解析
  • 2023年NOC大赛创客智慧编程赛项Python 复赛模拟题(二)
  • 【SQL】MySQL的查询语句
  • 测试的分类
  • 【5.21】六、自动化测试—持续集成测试
  • 【C++】 排列与组合算法详解(进阶篇)
  • Godot引擎 4.0 文档 - 循序渐进教程 - 监听玩家输入
  • Docker笔记9 | Docker中网络功能知识梳理和了解
  • 生态系统模型:SolVES、DNDC、CMIP6、GEE林业、APSIM、InVEST、无人机遥感、ArcGIS Pro模型等
  • 常见分布函数。
  • 【网络安全】红队攻防之基础免杀
  • CTF入门指南
  • C:入门级积累(4)
  • 基于DBSCAN密度聚类的风电-负荷场景削减方法
  • 服务(第二十七篇)squid-传统、穿透、反向代理
  • golang yaml 解析问题
  • setContentHuggingPriority和setContentCompressionResistancePriority的使用
  • java springboot yml文件配置 多环境yml
  • DMBOK知识梳理for CDGA/CDGP——第一章数据管理(附常考知识点)
  • 065:cesium设置带有箭头的线材质(material-9)
  • Java常用API
  • 【C++ 学习 ⑥】- C++ 动态内存管理详解
  • 【5.21】六、自动化测试—常见技术
  • JavaScript中的事件循环机制,包括事件循环的原理、宏任务和微任务、事件队列和调用栈、以及如何优化事件循环
  • 【华为OD机试c++】解压报文【2023 B卷 |200分】
  • JS中Array的forEach、map、filter方法区别?
  • Java的Arrays类的sort()方法(41)