Map集合特点、遍历方式、TreeMap排序及Collections和Arrays

news2024/11/15 16:01:39

目录

​编辑

一、集合框架

二、 Map集合

特点

遍历方式

HashMap与Hashtable的区别

TreeMap

Collections

Arrays


一、集合框架

二、 Map集合

Map集合是一种键值对的集合,其中每个键对应一个值。在Java中,Map接口定义了一种将键映射到值的数据结构。常见的实现类包括HashMap、TreeMap和LinkedHashMap。

无序、以键值对的形式添加元素,键不能重复,值可以重复,它没有继承Collection接口。

关于Map集合的常见操作:

  1. 添加键值对:使用put(key, value)方法将键值对添加到Map中。
  2. 获取值:使用get(key)方法根据键获取对应的值。
  3. 删除键值对:使用remove(key)方法根据键删除对应的键值对。
  4. 判断是否包含键:使用containsKey(key)方法判断Map中是否包含指定的键。
  5. 获取所有键或值的集合:使用keySet()方法获取所有键的集合,使用values()方法获取所有值的集合。

特点

  • 无序

    Map<String,String> map=new HashMap<String,String>();
    map.put("zs", "123");
    map.put("ls", "456");
    map.put("ww", "789");
    System.out.println(map);
  • 以键值对方式存储数据

    Map<String,String> map=new HashMap<String,String>();
    map.put("zs", "123");
    map.put("ls", "456");
    map.put("ww", "789");
  • 键唯一,值不唯一(键相同的情况下,值被覆盖

    Map<String,String> map=new HashMap<String,String>();
    map.put("zs", "123");
    map.put("ls", "456");
    map.put("ww", "789");
    map.put("zs", "1234");
    System.out.println(map);

遍历方式

  • 获取所有的Key

    Map<String,String> map=new HashMap<String,String>();
    map.put("zs", "123");
    map.put("ls", "456");
    map.put("ww", "789");
    //获取Map集合中所有的键
    Set<String> keys = map.keySet();
    for (String key : keys) {
    	System.out.println(key);
    }
  • 获取所有的Value

    Map<String,String> map=new HashMap<String,String>();
    map.put("zs", "123");
    map.put("ls", "456");
    map.put("ww", "789");
    //获取Map集合中所有的值
    Collection<String> values = map.values();
    for (String value : values) {
    	System.out.println(value);
    }
  • 获取所有的键值对

    Map<String,String> map=new HashMap<String,String>();
    map.put("zs", "123");
    map.put("ls", "456");
    map.put("ww", "789");
    //获取Map集合中所有的键值对
    Set<Entry<String, String>> entrySets = map.entrySet();
    for (Entry<String, String> entry : entrySets) {
    	System.out.println(entry.getKey()+" "+entry.getValue());
    }

HashMap与Hashtable的区别

  1. HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,在只有一个线程访问的情况下,效率要高于Hashtable。

  2. HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。

  3. HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。

  4. Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。

最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。 Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。

就HashMap与HashTable主要从三方面来说。

  • 历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现;

  • 同步性:Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的;

  • :只有HashMap可以让你将空值作为一个表的条目的key或value

 

TreeMap

  • 默认升序排序

    Map<String,Object> map=new TreeMap<String,Object>();
    map.put("2","ls");
    map.put("1","ww");
    map.put("4","zs");
    map.put("3","xl");
    
    map.forEach((k,v)->{
        System.out.println(k+"="+v);
    });
  • reverseOrder降序排序

    Map<String,Object> map=new TreeMap<>(Comparator.reverseOrder());
    map.put("2","ls");
    map.put("1","ww");
    map.put("4","zs");
    map.put("3","xl");
    
    map.forEach((k,v)->{
        System.out.println(k+"="+v);
    });
  • Value值排序

    Map<String,Object> map=new TreeMap<String,Object>();
    map.put("2","ls");
    map.put("1","ww");
    map.put("4","zs");
    map.put("3","xl");
    
    //按照map中的value属性排序
    List<Map.Entry<String,Object>> lst=
            new ArrayList<Map.Entry<String,Object>>(map.entrySet());
    
    Collections.sort(lst, new Comparator<Map.Entry<String, Object>>() {
        @Override
        public int compare(Map.Entry<String, Object> o1, Map.Entry<String, Object> o2) {
            return -o1.getValue().toString().compareTo(o2.getValue().toString());
        }
    });
    
    lst.forEach(s->{
        System.out.println(s);
    });

 

Collections

Collections:工具类,提供一组静态方法操作Collection集合

Collections 是 Java 中的一个工具类,提供了一系列静态方法来操作集合类(如List、Set、Map等)。它包含了很多常用的方法,如排序、查找、遍历等,可以方便地对集合进行操作。

Collections 类的常用方法示例:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<Integer> numbers = new ArrayList<>();
        numbers.add(3);
        numbers.add(1);
        numbers.add(2);

        // 排序
        Collections.sort(numbers);
        System.out.println("排序后的列表:" + numbers);

        // 反转
        Collections.reverse(numbers);
        System.out.println("反转后的列表:" + numbers);

        // 查找最大值和最小值
        int max = Collections.max(numbers);
        int min = Collections.min(numbers);
        System.out.println("最大值:" + max);
        System.out.println("最小值:" + min);

        // 随机打乱顺序
        Collections.shuffle(numbers);
        System.out.println("随机打乱后的列表:" + numbers);
    }
}

Arrays

Arrays:工具类,提供了一组静态方法操作数组

Arrays 是一种数据结构,用于存储相同类型的元素。它们在许多编程语言中都有广泛的应用,可以通过索引访问数组中的元素。

在大多数编程语言中,数组的索引是从0开始的。例如,如果有一个包含5个元素的数组,它们的索引将分别是0、1、2、3和4。

在Java中,创建一个整型数组并初始化它的方式如下:

int[] myArray = {1, 2, 3, 4, 5};

你可以通过索引访问数组中的元素,例如:

System.out.println(myArray[2]); // 输出 3

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

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

相关文章

前后端分离vue.js+nodejs学生考勤请假系统 _fbo36

此系统设计主要采用的是nodejs语言来进行开发&#xff0c;采用vue框架技术&#xff0c;框架分为三层&#xff0c;分别是控制层Controller&#xff0c;业务处理层Service&#xff0c;持久层dao&#xff0c;能够采用多层次管理开发&#xff0c;对于各个模块设计制作有一定的安全性…

网络原理——HTTP

1. 什么是HTTP协议 HTTP是应用层的协议。Java最主要的应用场景是做网站&#xff0c;而网站由 后端&#xff08;HTTP服务器&#xff09; 和 前端&#xff08;浏览器&#xff09;组成&#xff0c;HTTP协议就是负责这里后端和前端的数据交互。 HTTP3.0 之前在传输层是通过 TCP传…

什么是智慧公厕?如何打造智慧公厕?

近年来&#xff0c;随着城市信息化建设的不断推进&#xff0c;智慧公厕的建设成为我国城市发展的重要一环。以智能化管理为核心&#xff0c;将公厕纳入互联互通的“智慧城市”大数据平台&#xff0c;使得公厕管理更加高效便捷&#xff0c;为市民提供更好的公共服务。本文将以智…

git最全总结

文章目录 Git 分布式版本控制工具内容1. 前言1.1 什么是Git1.2 使用Git能做什么 2. Git概述2.1 Git简介2.2 Git下载与安装 3. Git代码托管服务3.1 常用的Git代码托管服务3.2 码云代码托管服务3.2.1 注册码云账号3.2.2 登录码云3.2.3 创建远程仓库3.2.4 邀请其他用户成为仓库成员…

excel标记文本中的关键词加红加粗

任务&#xff1a; 有这么一张表&#xff0c;关键词为 word&#xff0c;文本内容为 text&#xff0c;现在想把 text 中的 word 标红加粗&#xff0c;如果数据量少&#xff0c;文本段手动标还可以&#xff0c;多起来就不太方便了 代码&#xff1a; import pandas as pd import x…

8-pytorch-损失函数与反向传播

b站小土堆pytorch教程学习笔记 根据loss更新模型参数 1.计算实际输出与目标之间的差距 2.为我们更新输出提供一定的依据&#xff08;反向传播&#xff09; 1 MSEloss import torch from torch.nn import L1Loss from torch import nninputstorch.tensor([1,2,3],dtypetorch.fl…

WEB相关工具(wget、curl、ab)

目录 一、wget 1、wget基本语法 2、wget帮助的更多选项 二、curl 1、curl基本语法 2、curl命令基本用法 2.1 curl伪装 2.2 提取状态码 2.3 提取本地IP地址 2.4 提取远端服务器IP地址 2.5 提取本地端口 2.6 提取远端服务器端口 三、压力测试工具 1、常用的httpd压…

数据结构与算法相关题解20240225

数据结构与算法相关题解20240225 一、58. 最后一个单词的长度二、48. 旋转图像三、69. x 的平方根四、50. Pow(x, n) 一、58. 最后一个单词的长度 简单 给你一个字符串 s&#xff0c;由若干单词组成&#xff0c;单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度…

基于springboot+vue的租房管理系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

快速查找/打开host文件的方法

hosts文件是一个没有扩展名的文件&#xff0c;主要作用是&#xff1a;保存与域名的映射关系。 配置格式&#xff1a; ip 域名 windows系统里的保存位置&#xff1a; C:\Windows\System32\drivers\etc 下面介绍快速打开的方法。 第一步 [winR]打开运行&#xff0c;输入下面的…

精品基于SpringBoot+Vue的常规应急物资管理系统

《[含文档PPT源码等]精品基于SpringBootVue的常规应急物资管理系统[包运行成功]》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功&#xff01; 软件开发环境及开发工具&#xff1a; Java——涉及技术&#xff1a; 前端使用技术&#xff…

应用回归分析:贝叶斯回归

贝叶斯回归是一种统计方法&#xff0c;它利用贝叶斯定理来更新对回归参数的估计。这种方法不仅考虑了数据的不确定性&#xff0c;还考虑了模型参数的不确定性&#xff0c;为预测提供了一个更加全面的框架。在本文中&#xff0c;我们将深入探讨贝叶斯回归的基本概念、如何实现它…

Docker容器实战

"爱在&#xff0c;地图上&#xff0c;剥落~" Mysql 容器化安装 我们可以在 docker hub上&#xff0c;进入mysql的镜像仓库&#xff0c;找到适合的版本。 直接拉取镜像: docker pull mysql:latest 我们知道 msyql 的默认端口是 3306 &#xff0c;而且有密码&#x…

ArcgisForJS如何将ArcGIS Server发布的点要素渲染为热力图?

文章目录 0.引言1.ArcGIS创建点要素2.ArcGIS Server发布点要素3.ArcgisForJS将ArcGIS创建的点要素渲染为热力图 0.引言 ArcGIS For JS 是一个强大的地理信息系统&#xff08;GIS&#xff09;工具&#xff0c;它允许开发者使用 JavaScript 语言来创建各种 GIS 应用。ArcGIS Ser…

2.5G/5G/10G高速率网络变压器(网络隔离变压器)产品介绍(1)

Hqst华轩盛(石门盈盛)电子导读&#xff1a;高速率/2.5G 的带POE插件&#xff08;DIP&#xff09;款千兆双口网络变压器2G54801DP特点 一 ﹑2.5G高速率网络变压器&#xff08;网络隔离变压器&#xff09;&#xff1a;2G54801DP外观与尺寸 2G54801DP这颗产品尺寸为&#xff1a;长…

应用回归分析:非参数回归

非参数回归是一种统计方法&#xff0c;它在建模和分析数据时不假设固定的模型形式。与传统的参数回归模型不同&#xff0c;如线性回归和多项式回归&#xff0c;非参数回归不需要预先定义模型的结构&#xff08;例如&#xff0c;模型是否为线性或多项式&#xff09;。这使得非参…

Python爬虫-付费代理推荐和使用

付费代理的使用 相对免费代理来说&#xff0c;付费代理的稳定性更高。本节将介绍爬虫付费代理的相关使用过程。 1. 付费代理分类 付费代理分为两类&#xff1a; 一类提供接口获取海量代理&#xff0c;按天或者按量收费&#xff0c;如讯代理。 一类搭建了代理隧道&#xff0…

矩阵的导数运算(理解分子布局、分母布局)

矩阵的导数运算(理解分子布局、分母布局) 1、分子布局和分母布局 请思考这样一个问题&#xff0c;一个维度为m的向量y对一个标量x的求导&#xff0c;那么结果也是一个m维的向量&#xff0c;那么这个结果向量是行向量&#xff0c;还是列向量呢&#xff1f; 答案是&#xff1a…

故障诊断 | 一文解决,PSO-BP粒子群算法优化BP神经网络模型的故障诊断(Matlab)

文章目录 效果一览文章概述模型描述源码设计参考资料效果一览 文章概述 故障诊断 | 一文解决,PSO-BP粒子群算法优化BP神经网络模型的故障诊断(Matlab) 粒子群优化算法(Particle Swarm Optimization, PSO)是一种群体智能优化算法,用于求解优化问题。BP神经网络是一种用于模…

备战蓝桥杯————二叉树解题思维1

解决二叉树问题时&#xff0c;常采用两种思维模式&#xff1a; 遍历思维模式&#xff1a; 这种思维模式强调是否可以通过一次遍历二叉树来得到答案。通常使用一个遍历函数&#xff08;比如前序、中序、后序遍历&#xff09;结合外部变量来实现。这种方法适用于需要在每个节点上…