JavaSE16-集合·其三
1.Map集合
1.1 Map集合概述和特点
1 interface Map<K,V> K:键的类型;V:值的类型
Map集合的特点
键值对映射关系
一个键对应一个值
键不能重复,值可以重复 元素存取无序
1.2 Map集合的基本功能
| 方法名 | 说明 |
| V put(K key,V value) | 添加元素 |
| V remove(Object key) | 根据键删除键值对元素 |
| void clear() | 移除所有的键值对元素 |
| boolean containsKey(Object key) | 判断集合是否包含指定的键 |
| boolean containsValue(Object value) | 判断集合是否包含指定的值 |
| boolean isEmpty() | 判断集合是否为空 |
| int size() | 集合的长度,也就是集合中键值对的个数 |
1.3 Map集合的获取功能
| 方法名 | 说明 |
| V get(Object key) | 根据键获取值 |
| Set keySet() | 获取所有键的集合 |
| Collection values() | 获取所有值的集合 |
| Set<map.entry<k,v>> entrySet() | 获取所有键值对对象的集合 |
1.4 Map集合的遍历(方式1)
遍历思路
我们刚才存储的元素都是成对出现的,所以我们把Map看成是一个夫妻对的集合
把所有的丈夫给集中起来遍历丈夫的集合,获取到每一个丈夫
根据丈夫去找对应的妻子
步骤分析
获取所有键的集合。用keySet()方法实现。
1 import java.util.HashMap;
2 import java.util.HashSet;
3 import java.util.Map;
4 import java.util.Set;
5
6 public class kb {
7 public static void main(String[] args) {
8 Map<String,String> sl = new HashMap<>();
9 sl.put("1","超人");
10 sl.put("2","蝙蝠侠");
11 sl.put("3","闪电侠");
12
13 Set<String> key = new HashSet<>();
14 key = sl.keySet();
15
16 for (String id : key){
17 System.out.println(id+sl.get(id));
18 }
19 }
20 }
1.5 Map集合的遍历(方式2)
遍历思路
我们刚才存储的元素都是成对出现的,所以我们把Map看成是一个夫妻对的集合
获取所有结婚证的集合
遍历结婚证的集合,得到每一个结婚证
根据结婚证获取丈夫和妻子
步骤分析
获取所有键值对对象的集合
Set<map.entry<k,v>>entrySet():获取所有键值对对象的集合
遍历键值对对象的集合,得到每一个键值对对象
用增强for实现,得到每一个Map.Entry
根据键值对对象获取键和值
用getKey()得到键
用getValue()得到值
1 import java.util.HashMap;
2 import java.util.HashSet;
3 import java.util.Map;
4 import java.util.Set;
5
6 public class kb {
7 public static void main(String[] args) {
8 Map<String, String> sl = new HashMap<>();
9 sl.put("1", "超人");
10 sl.put("2", "蝙蝠侠");
11 sl.put("3", "闪电侠");
12
13 Set<Map.Entry<String, String>> entrySet = sl.entrySet();
14
15 for (Map.Entry<String, String> me : entrySet) {
16 System.out.println(me.getKey() + "\t" + me.getValue());
17 }
18 }
19 }
2.Collections集合工具类
2.1 Collections概述和使用
Collections类的作用
是针对集合操作的工具类
常用方法
| 方法名 | 说明 |
| public static void sort(List list) | 将指定的列表按升序排序 |
| public static void reverse(List list) | 反转指定列表中元素的顺序 |
| public static void shuffle(List list) | 使用默认的随机源随机排列指定的列表 |
2.2 ArrayList集合存储学生并排序
案例需求
ArrayList存储学生对象,使用Collections对ArrayList进行排序
要求:按照年龄从小到大排序,年龄相同时,按照姓名的字母顺序排序
学生类
1 public class Student {
2 private String name;
3 private int age;
4
5 public Student() {
6 }
7
8 public Student(String name, int age) {
9 this.name = name;
10 this.age = age;
11 }
12
13 public String getName() {
14 return name;
15 }
16
17 public void setName(String name) {
18 this.name = name;
19 }
20
21 public int getAge() {
22 return age;
23 }
24
25 public void setAge(int age) {
26 this.age = age;
27 }
28
29 @Override
30 public boolean equals(Object o) {
31 if (this == o) return true;
32 if (o == null || getClass() != o.getClass()) return false;
33
34 Student student = (Student) o;
35
36 if (age != student.age) return false;
37 return name != null ? name.equals(student.name) : student.name == null;
38 }
39
40 @Override
41 public int hashCode() {
42 int result = name != null ? name.hashCode() : 0;
43 result = 31 * result + age;
44 return result;
45 }
46
47 @Override
48 public String toString() {
49 return "Student{" +
50 "name='" + name + '\'' +
51 ", age=" + age +
52 '}';
53 }
54 }
排序测试类
1 import java.util.*;
2
3 public class newComparator {
4 public static void main(String[] args) {
5 Student s1 = new Student("Tony",21);
6 Student s2 = new Student("xiaohong",21);
7 Student s3 = new Student("wangdachui",800);
8
9 ArrayList<Student> stu = new ArrayList<>();
10
11 stu.add(s1);
12 stu.add(s2);
13 stu.add(s3);
14
15 Collections.sort(stu, new Comparator<Student>() {
16 @Override
17 public int compare(Student o1, Student o2) {
18 int num = o1.getAge() - o2.getAge();
19 int num2 = num == 0 ?o1.getName().compareTo(o2.getName()):num;
20 return num2;
21 }
22 });
23
24 for (Student s : stu){
25 System.out.println(s.getName()+"\t"+s.getAge());
26 }
27 }
28 }
JavaSE16-集合·其三的更多相关文章
- JavaSE-16 集合框架
学习要点 Java集合框架内容 ArrayList和LinkedList HashMap Iterator 泛型集合 Java的集合框架 1 概述 数据结构是以某种形式将数据组织在一起的集合,它不仅 ...
- 集合不安全之 ArrayList及其三种解决方案【CopyOnWriteArrayList 、synchronizedList、Vector 】
@ 目录 一.前言 二.为什么线程不安全 三.解决方案一CopyOnWriteArrayList (推荐,读多写少场景) 四.Collections.synchronizedList(加锁) 五.Ve ...
- Java集合---ArrayList的实现原理
目录: 一. ArrayList概述 二. ArrayList的实现 1) 私有属性 2) 构造方法 3) 元素存储 4) 元素读取 5) 元素删除 6) 调整数组容量 ...
- ArrayList集合的实现原理
一. ArrayList概述: ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,类似于C语言中的动态申请内存,动态增长内存. ArrayList不是线程安全的,只能用在单线程环境 ...
- 转:【Java集合源码剖析】ArrayList源码剖析
转载请注明出处:http://blog.csdn.net/ns_code/article/details/35568011 本篇博文参加了CSDN博文大赛,如果您觉得这篇博文不错,希望您能帮我投一 ...
- ava集合---ArrayList的实现原理
一.ArrayList概述 ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,类似于C语言中的动态申请内存,动态增长内存 ArrayList不是线程安全的,只能用在单线程环境下,多 ...
- Redis自学笔记:3.5入门-集合类型
3.5集合类型 3.5.1介绍 在集合中的每个元素都是不同的,且没有顺序 表3-4集合类型和列表类型的对比 - 集合类型 列表类型 存储内容 至多232-1个字符串 至多232-1个字符串 有序性 否 ...
- Java集合:ArrayList的实现原理
Java集合---ArrayList的实现原理 目录: 一. ArrayList概述 二. ArrayList的实现 1) 私有属性 2) 构造方法 3) 元素存储 4) 元素读取 5) 元素删除 ...
- 集合(2)—Collection之List的使用方法
声明集合变量 List list = new ArrayList(); 或者 : public LIst list: public 构造函数(){ this.list = new ArrayList( ...
- 【Java集合源代码剖析】ArrayList源代码剖析
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/mmc_maodun/article/details/35568011 转载请注明出处:http:// ...
随机推荐
- TestLink在线Excel用例转换xml
[原文链接]:https://blog.tecchen.tech ,博文同步发布到博客园. 由于精力有限,对文章的更新可能不能及时同步,请点击上面的原文链接访问最新内容. 欢迎访问我的个人网站:htt ...
- 面试阿里,字节,美团必看的Spring的Bean管理详解
IOC容器 工厂只负责创建对象,而Spring当然不仅仅是一个对象工厂,其核心是一个对象容器,其具备控制反转的能力,所以也称为IOC容器. 帮助我们存放对象,并且管理对象,包括:创建.销毁.装配,这样 ...
- 微课制作软件Camtasia,来为视频添加预设动画效果
之前已介绍过使用微课制作软件Camtasia为视频添加"缩放和平移"动画的教程以及"效果按钮"的使用. 此篇内容,我们就来介绍使用录像编辑软件--Camtasi ...
- 精尽MyBatis源码分析 - SQL执行过程(三)之 ResultSetHandler
该系列文档是本人在学习 Mybatis 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释(Mybatis源码分析 GitHub 地址.Mybatis-Spring 源码分析 GitHub ...
- mongodb分页查询,排序
mongodb代码 根据时间倒序,查看10条 db.表名.find({"_id":"xxx"}).sort({"inserted":-1}) ...
- sentinel降级误解
public void initDegradeRule(){ List<DegradeRule> rules=new ArrayList<>(); DegradeRule ru ...
- 加快alter table
mysql的alter table操作的性能对打表来说是个大问题. mysql执行大部分修改表结构的方法是用新的结构创建一个空表,从旧表中查出所有的数据插入新表,然后删除旧表.这样操作就可能需要花费很 ...
- java43
自定义日期格式 import java.text.DateFormat; import java.text.ParseException; import java.util.Date; public ...
- 软件安全----警惕缓冲区溢出(C中那些不安全的库函数)
原文链接:https://blog.csdn.net/yang_yulei/article/details/45314177 链接:http://www.360doc.com/content/11/0 ...
- TCP的流量控制和阻塞控制
流量控制和阻塞控制实例: 可以用一个例子来说明这种区别.设某个光纤网络的链路传输速率为1000Gbit/s.有一台巨型计算机向一台个人电脑以1Gbit/s的速率传送文件.显然,网络本身的带宽是足够大的 ...