(day12) 自学Java——集合进阶(双列集合)

news2024/11/17 10:24:38

目录

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<String,String> map=new HashMap<>();
        map.put("bk","pp");
        map.put("文总","包包");
        map.put("桃桃","福福");
        //获取所有的键,将键放到单列集合中
        Set<String> keys=map.keySet();
        //增强for遍历
        for (String key : keys) {
            String value=map.get(key);
            System.out.println(key+"="+value);
        }
        //迭代器
        Iterator<String> it=keys.iterator();
        while (it.hasNext()){
            String keys1=it.next();
            String value1=map.get(keys1);
            System.out.println(keys1+"="+value1);
        }
        //lambda
        keys.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<String,String> map=new HashMap<>();
        map.put("bk","pp");
        map.put("文总","包包");
        map.put("桃桃","福福");
        //获取键值对,将键放到单列集合中
        Set<Map.Entry<String,String>> entries=map.entrySet();
        //增强for遍历
        for (Map.Entry<String, String> entry : entries) {
            System.out.println(entry.getKey()+"="+entry.getValue());
        }
        //迭代器
        Iterator<Map.Entry<String, String>> it=entries.iterator();
        while (it.hasNext()){
             Map.Entry e=it.next();
            System.out.println(e.getKey()+"="+e.getValue());
        }
        //lambda
        entries.forEach(new Consumer<Map.Entry<String, String>>() {
            @Override
            public void accept(Map.Entry<String, String> 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<String,String> map=new HashMap<>();
        map.put("bk","pp");
        map.put("文总","包包");
        map.put("桃桃","福福");

//使用Lambda方式遍历
        map.forEach(new BiConsumer<String, String>() {
            @Override
            public void accept(String keys, String values) {
                System.out.println(keys+"="+values);
            }
        });

//简化Lambda
        map.forEach((keys,values)-> System.out.println(keys+"="+values));
    }
}

2.HashMap

import java.util.HashMap;

public class Test {
    public static void main(String[] args){
        HashMap<Student,String> 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");
        //lambda
        hm.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 + "}";
    }

    @Override
    public 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);
    }

    @Override
    public 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<String> 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<String,Integer> 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);
            }
        }
        //求最大值max
        int max=0;
        Set<Map.Entry<String, Integer>> entries = hm.entrySet();
        for (Map.Entry<String, Integer> entry : entries) {
            System.out.println(entry.getKey()+","+entry.getValue());
        }
        for (Map.Entry<String, Integer> entry : entries) {
            int num=entry.getValue();
            if(num>max){
                max=num;
            }
        }
        System.out.println(max);
        //求最多人想去的地点
        for (Map.Entry<String, Integer> 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<String> 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<Integer> num=new ArrayList<>();
        ArrayList<String> boy=new ArrayList<>();
        ArrayList<String> 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,0
        Collections.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<String> list1=new ArrayList<>();
        Collections.addAll(list1,"bk","pp","win","perm","boun","peat","fort");
        //创建一个集合2,将name存进去
        ArrayList<String> 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);
                //在当前集合删除,抽取出来的name
                list1.remove(name);
            }
            //重开,将list2的数据,复制到list1中,然后清除list2的内容
            list1.addAll(list2);
            list2.clear();
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/339103.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

全志H616——用C语言的形式操作数据库

sqlite3_open(const char *filename, sqlite3 **ppDb)该例程打开一个指向 SQLite 数据库文件的连接&#xff0c;返回一个用于其他 SQLite 程序的数据库连接对象。sqlite3_close(sqlite3*)该例程关闭之前调用 sqlite3_open() 打开的数据库连接。所有与连接相关的语句都应在连接关…

【Linux】环境变量本地变量

文章目录环境变量基本概念常见环境变量和环境变量相关的命令为什么带./运行我们的可执行程序本地变量环境变量的组织方式环境变量具有全局属性环境变量 基本概念 环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数 如&#xff1a;我们…

gRPC的简单应用

gRPC的简单应用 gRPC是由开发的一个高性能、通用的开源RPC框架&#xff0c;主要面向移动应用开发且基于HTTP/2协议标准而设计&#xff0c;同时支持大多数流行的编程语言。 官网&#xff1a;https://grpc.io/ 安装protoc 工具 https://protobuf.dev/ 安装Go插件 旧版本直接…

学习HandlerThread

HandlerThread是一个扩展了Thread的类。也就意味着它和普通的Thread类的调用没有什么区别&#xff0c;仍然要调用start()。 如上图所示&#xff0c;扩展后的HandlerThread类有一个Looper和Handler。 关于这一块的知识可以参考一下《关于Handler我们应该知道的知识》 HandlerTh…

普冉PY32系列(五) 使用JLink RTT代替串口输出日志

目录 普冉PY32系列(一) PY32F0系列32位Cortex M0 MCU简介普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode开发环境普冉PY32系列(三) PY32F002A资源实测 - 这个型号不简单普冉PY32系列(四) PY32F002A/003/030的时钟设置普冉PY32系列(五) 使用JLink RTT代替串口输出日志 JLink …

Python-第五天 Python函数

Python-第五天 Python函数一、函数介绍1. 什么事函数二、函数的定义1.函数的定义&#xff1a;2.案例三、函数的参数1.函数的传入参数2.案例升级四、函数的返回值1.什么是返回值2.返回值的语法3.None类型4.None类型的应用场景五、函数说明文档1.函数的说明文档2.在PyCharm中查看…

脑机接口协议V1.0

脑机接口&#xff0c;有时也称作“大脑端口”direct neural interface或者“脑机融合感知”brain-machine interface&#xff0c;它是在人或动物脑&#xff08;或者脑细胞的培养物&#xff09;与外部设备间建立的直接连接通路。在单向脑机接口的情况下&#xff0c;计算机或者接…

leaflet显示高程

很多地图软件都能随鼠标移动动态显示高程。这里介绍一种方法&#xff0c;我所得出的。1 下载高程数据一般有12.5m数据下载&#xff0c;可惜精度根本不够&#xff0c;比如mapbox的免费在线的&#xff0c;或者91卫图提供百度网盘打包下载的&#xff0c;没法用&#xff0c;差距太大…

记录robosense RS-LIDAR-16使用过程3

一、wireshark抓包保存pcap文件并解析ubuntu18安装wireshark&#xff0c;参考下面csdn教程&#xff0c;官网教程我看的一脸蒙&#xff08;可能英语太差&#xff09;https://blog.csdn.net/weixin_46048542/article/details/121730448?spm1001.2101.3001.6650.2&utm_medium…

秒杀项目之服务调用分布式session

目录 nginx动静分离 服务调用 创建配置zmall-cart购物车模块 创建配置zmall-order订单模块 服务调用 spring session实战 什么是Spring Session 为什么要使用Spring Session 错误案例展示 配置spring-session 二级域名问题 用户登录 nginx动静分离 第1步&#xff…

如何用演示程序检测K100|K720|K750电动发卡读写一体机性能

K100|K720|K750电动发卡读写一体机采用工业级设 计&#xff0c;表面烤漆处理&#xff0c;具有良好的耐磨耐腐蚀性。适应各种高、低温&#xff0c; 多灰尘等 恶劣环境。其发卡原理为拟人型摩擦式发卡&#xff0c;对各类变形卡有非常好的适应性。 CNC的精度保证卡距的绝对一致性、…

Filter过滤器完成验证代码的封装

Filter过滤器完成验证代码的封装filter是什么1 使用filter2 filter配置到项目中验证用户权限是需要反复使用的代码块&#xff0c;把他封装到filter中&#xff0c;减少代码冗余filter是什么 init()方法&#xff1a;初始化方法&#xff0c;在创建Filter后立即调用。可用于完成初始…

刚刚,体验了一把Bing chat很爽

文章目录刚刚&#xff0c;体验了一把Bing chat很爽你能做啥&#xff1f;与chatgpt有什么不同&#xff1f;以下是Bingchat的 10个新功能1⃣️在网上搜索结果2⃣️摘要链接3⃣️对话助手4⃣️向您发送实际信息&#xff0c;正确的链接5⃣️在单个查询中执行多个搜索6⃣️玩冒险游戏…

内网渗透(十八)之Windows协议认证和密码抓取-本地认证(NTML哈希和LM哈希)

系列文章第一章节之基础知识篇 内网渗透(一)之基础知识-内网渗透介绍和概述 内网渗透(二)之基础知识-工作组介绍 内网渗透(三)之基础知识-域环境的介绍和优点 内网渗透(四)之基础知识-搭建域环境 内网渗透(五)之基础知识-Active Directory活动目录介绍和使用 内网渗透(六)之基…

【Web测试】各类web控件测试点汇总,软测人必备

一 、界面检查 进入一个页面测试&#xff0c;首先是检查title&#xff0c;页面排版&#xff0c;字段等&#xff0c;而不是马上进入文本框校验 1、页面名称title是否正确 2、当前位置是否可见 您的位置&#xff1a;xxx>xxxx 3、文字格式统一性 4、排版是否整齐 5、列表项显示…

leetcode: 3Sum

leetcode: 3Sum1. 题目描述2. 思考3. 解题3. 总结1. 题目描述 Given an integer array nums, return all the triplets [nums[i], nums[j], nums[k]] such that i ! j, i ! k, and j ! k, and nums[i] nums[j] nums[k] 0. Notice that the solution set must not contain …

爬虫Python入门好学吗?学什么?

爬虫Python入门好学吗&#xff1f;学爬虫需要具备一定的基础&#xff0c;有编程基础学Python爬虫更容易学。但要多看多练&#xff0c;有自己的逻辑想法。用Python达到自己的学习目的才算有价值。如果是入门学习了解&#xff0c;开始学习不难&#xff0c;但深入学习有难度&#…

2022年12月电子学会Python等级考试试卷(一级)答案解析

青少年软件编程&#xff08;Python&#xff09;等级考试试卷&#xff08;一级&#xff09; 一、单选题(共25题&#xff0c;共50分) 1. 关于Python语言的注释&#xff0c;以下选项中描述错误的是&#xff1f;&#xff08; &#xff09; A. Python语言有两种注释方式&…

JavaEE16-Spring事务和事务传播机制

目录 1.为什么需要事务&#xff1f; 2.MySQL中事务的使用 3.Spring中事务的实现 3.1.编程式事务&#xff08;手动写代码操作事务&#xff09; 3.2.声明式事务&#xff08;利用注解自动开启和提交事务&#xff09;(使用为主) 3.2.1.Transactional作用范围 3.2.2.Transact…

JetpackCompose从入门到实战学习笔记8—ConstraintLayout的简单使用

JetpackCompose从入门到实战学习笔记8—ConstraintLayout的简单使用 1.简介&#xff1a; Compose 中的 ConstraintLayout ConstraintLayout 是一种布局&#xff0c;让您可以相对于屏幕上的其他可组合项来放置可组合项。它是一种实用的替代方案&#xff0c;可代替使用多个已嵌…