(day12) 自学Java——集合进阶(双列集合)
创始人
2024-05-25 13:21:35
0

目录

1.双列集合特点

Map遍历三种方式

2.HashMap

3.LinkedHashMap

4.TreeMap

5.源码解析

6.可变参数(形参个数可变)

7.Collections

8.综合练习


1.双列集合特点

①双列集合一次需要存一对数据,分别为键和值
②键不能重复,值可以重复
③键和值是一—对应的,每一个键只能找到自己对应的值
④键+值这个整体我们称之为“键值对”或者“键值对对象”,在Java中叫做“Entry对象”

 Map是接口,不能直接创建对象,要创建它实现类的对象。

Map遍历三种方式

Map遍历方式:
1.键找值

2.键值对

3.Lambda表达式

练习:用键找值的方式遍历map集合,要求:用装着键的单列集合,使用增强for的形式遍历。

        用键找值的方式遍历map集合,要求:用装着键的单列集合,使用迭代器的形式遍历。

        用键找值的方式遍历map集合,要求:用装着键的单列集合,使用Lambda的形式遍历。

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;public class MapDemo {public static void main(String[] args) {Map map=new HashMap<>();map.put("bk","pp");map.put("文总","包包");map.put("桃桃","福福");//获取所有的键,将键放到单列集合中Set keys=map.keySet();//增强for遍历for (String key : keys) {String value=map.get(key);System.out.println(key+"="+value);}//迭代器Iterator it=keys.iterator();while (it.hasNext()){String keys1=it.next();String value1=map.get(keys1);System.out.println(keys1+"="+value1);}//lambdakeys.forEach(s-> {String value2=map.get(s);System.out.println(s+"="+value2);});}
}

练习:用键找值的方式遍历map集合,要求:用装着键值对的单列集合,使用增强for的形式遍历。

        用键找值的方式遍历map集合,要求:用装着键值对的单列集合,使用迭代器的形式遍历。

        用键找值的方式遍历map集合,要求:用装着键值对的单列集合,使用Lambda的形式遍历。

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.function.Consumer;public class MapDemo {public static void main(String[] args) {Map map=new HashMap<>();map.put("bk","pp");map.put("文总","包包");map.put("桃桃","福福");//获取键值对,将键放到单列集合中Set> entries=map.entrySet();//增强for遍历for (Map.Entry entry : entries) {System.out.println(entry.getKey()+"="+entry.getValue());}//迭代器Iterator> it=entries.iterator();while (it.hasNext()){Map.Entry e=it.next();System.out.println(e.getKey()+"="+e.getValue());}//lambdaentries.forEach(new Consumer>() {@Overridepublic void accept(Map.Entry stringStringEntry) {System.out.println(stringStringEntry.getKey()+"="+stringStringEntry.getValue());}});}
}

import java.util.HashMap;
import java.util.Map;
import java.util.function.BiConsumer;public class MapDemo {public static void main(String[] args) {Map map=new HashMap<>();map.put("bk","pp");map.put("文总","包包");map.put("桃桃","福福");//使用Lambda方式遍历map.forEach(new BiConsumer() {@Overridepublic void accept(String keys, String values) {System.out.println(keys+"="+values);}});//简化Lambdamap.forEach((keys,values)-> System.out.println(keys+"="+values));}
}

2.HashMap

import java.util.HashMap;public class Test {public static void main(String[] args){HashMap hm=new HashMap<>();Student s1=new Student("zhangsan",18);Student s2=new Student("lisi",19);Student s3=new Student("zhangsan",18);hm.put(s1,"sichuang");hm.put(s2,"beijing");hm.put(s3,"sichuang");//lambdahm.forEach((student, s)-> System.out.println(student+","+s));}
}
package study.api;import java.util.Objects;public class Student{private String name;private int age;public Student() {}public Student(String name, int age) {this.name = name;this.age = age;}/*** 获取* @return name*/public String getName() {return name;}/*** 设置* @param name*/public void setName(String name) {this.name = name;}/*** 获取* @return age*/public int getAge() {return age;}/*** 设置* @param age*/public void setAge(int age) {this.age = age;}public String toString() {return "Student{name = " + name + ", age = " + age + "}";}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Student student = (Student) o;return age == student.age &&Objects.equals(name, student.name);}@Overridepublic int hashCode() {return Objects.hash(name, age);}
}

import java.util.*;public class Test {public static void main(String[] args){String[]arr={"A","B","C","D"};ArrayList list=new ArrayList<>();Random r=new Random();for (int i = 0; i < 80; i++) {int index=r.nextInt(arr.length);list.add(arr[index]);}HashMap hm=new HashMap<>();for (String name : list) {if (hm.containsKey(name)){int count=hm.get(name);count++;hm.put(name,count);}else {hm.put(name,1);}}//求最大值maxint max=0;Set> entries = hm.entrySet();for (Map.Entry entry : entries) {System.out.println(entry.getKey()+","+entry.getValue());}for (Map.Entry entry : entries) {int num=entry.getValue();if(num>max){max=num;}}System.out.println(max);//求最多人想去的地点for (Map.Entry entry : entries) {if (entry.getValue()==max){System.out.println(entry.getKey());}}}
}

3.LinkedHashMap

4.TreeMap

 

5.源码解析

向上箭头,表示重写了Map里的compute方法。(表示重写过的)

向右箭头,表示compute方法来自于Map。(表示来自哪个类或接口)

 f(field),表示HashMap的属性,可能是成员变量,或者常量

6.可变参数(形参个数可变)

格式:属性类型...名字 

例:int...args

 

练习:可变参数的练习

假如需要定义一个方法求和,该方法需要满足以下要求:
计算2个数据的和,计算3个数据的和,计算4个数据的和,计算n个数据的和

 

 

7.Collections

集合工具类Collections

8.综合练习

练习1:随机点名器

班级中有n个学生,随机点名

import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;public class ArrayListTest {public static void main(String[] args) {ArrayList al=new ArrayList<>();Collections.addAll(al,"bk","pp","win","perm","boun","peat","fort");Collections.shuffle(al);System.out.println(al.get(0));//第二种Random r=new Random();int index=r.nextInt(al.size());System.out.println(al.get(index));}
}

练习2:随机点名器

班级里有n个学生,要求:70%的概率随机到男生,30%的概率随机到女生

import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;public class ArrayListTest {public static void main(String[] args) {//在一个集合中存入七个1(70%),三个0(30%),打乱随机抽取// 抽到1就在男生集合中随机抽人,抽到0就在女生集合抽人ArrayList num=new ArrayList<>();ArrayList boy=new ArrayList<>();ArrayList girl=new ArrayList<>();Collections.addAll(num,1,1,1,1,1,1,1,0,0,0);Collections.addAll(boy,"张三","李四","范闲","bk","pp","win");Collections.addAll(girl,"杨颖","白鹿","迪丽","欣欣","三三");//打乱1,0,抽取1,0Collections.shuffle(num);int flag=num.get(0);Random r=new Random();if(flag==1){int index=r.nextInt(boy.size());System.out.println(boy.get(index));}else {int index=r.nextInt(girl.size());System.out.println(girl.get(index));}}
}

练习3:随机点名器

班级里有n个学生,要求:被点到的学生不会再被点到,但是如果班级中的所有学生都点完了,需要重新开启第二轮点名。

import java.util.ArrayList;
import java.util.Collections;public class ArrayListTest {public static void main(String[] args) {//将集合中的人抽取出来,存入另外的集合,再删掉被抽取出来的人(当前集合)ArrayList list1=new ArrayList<>();Collections.addAll(list1,"bk","pp","win","perm","boun","peat","fort");//创建一个集合2,将name存进去ArrayList list2=new ArrayList<>();//记录集合list1的长度int count=list1.size();//点名10轮for (int j=0;j<10;j++) {System.out.println("===========第"+(j+1)+"轮点名============");for (int i = 0; i < count; i++) {//打乱,抽取Collections.shuffle(list1);String name=list1.get(0);list2.add(name);System.out.println(name);//在当前集合删除,抽取出来的namelist1.remove(name);}//重开,将list2的数据,复制到list1中,然后清除list2的内容list1.addAll(list2);list2.clear();}}
}

相关内容

热门资讯

保存时出现了1个错误,导致这篇... 当保存文章时出现错误时,可以通过以下步骤解决问题:查看错误信息:查看错误提示信息可以帮助我们了解具体...
汇川伺服电机位置控制模式参数配... 1. 基本控制参数设置 1)设置位置控制模式   2)绝对值位置线性模...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
表格中数据未显示 当表格中的数据未显示时,可能是由于以下几个原因导致的:HTML代码问题:检查表格的HTML代码是否正...
本地主机上的图像未显示 问题描述:在本地主机上显示图像时,图像未能正常显示。解决方法:以下是一些可能的解决方法,具体取决于问...
不一致的条件格式 要解决不一致的条件格式问题,可以按照以下步骤进行:确定条件格式的规则:首先,需要明确条件格式的规则是...
表格列调整大小出现问题 问题描述:表格列调整大小出现问题,无法正常调整列宽。解决方法:检查表格的布局方式是否正确。确保表格使...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...