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

目录

​编辑

一、集合框架

二、 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.mfbz.cn/a/407238.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Ubuntu】使用WSL安装Ubuntu

WSL 适用于 Linux 的 Windows 子系统 (WSL) 是 Windows 的一项功能&#xff0c;可用于在 Windows 计算机上运行 Linux 环境&#xff0c;而无需单独的虚拟机或双引导。 WSL 旨在为希望同时使用 Windows 和 Linux 的开发人员提供无缝高效的体验。安装 Linux 发行版时&#xff0c…

喝多少瓶汽水

喝多少瓶汽水 题目描述&#xff1a;解法思路&#xff1a;解法代码&#xff1a;运行结果: 题目描述&#xff1a; 水已知1瓶汽水1元&#xff0c;2个空瓶可以换⼀瓶汽水&#xff0c;输入整数n&#xff08;n>0&#xff09;&#xff0c;表示n元钱&#xff0c;计算可以多少汽水&a…

Unity(第四部)新手组件

暴力解释就是官方给你的功能&#xff1b;作用的对象上面如&#xff1a; 创建一个球体&#xff0c;给这个球体加上重力 所有物体都是一个空物体&#xff0c;加上一些组件才形成了所需要的GameObject。 这是一个空物体&#xff0c;在Scene场景中没有任何外在表现&#xff0c;因为…

通过Colab部署Google最新发布的Gemma模型

Gemma的简单介绍 Gemma 是一系列轻量级、最先进的开放式模型&#xff0c;采用与创建 Gemini 模型相同的研究和技术而构建。 Gemma 由 Google DeepMind 和 Google 的其他团队开发&#xff0c;其灵感来自 Gemini&#xff0c;其名称反映了拉丁语 gemma&#xff0c;意思是“宝石”…

RT-Thread-快速入门-3-内存管理

内存管理 定义与作用 内存池管理 基础定义 内存池是一种管理固定大小内存块的机制&#xff0c;主要用于减少碎片化&#xff0c;提高内存分配效率。在 RT-Thread 中&#xff0c;内存池允许用户预分配一定数量的具有相同大小的内存块&#xff0c;应用程序可以从中快速分配和释放内…

【Java程序设计】【C00287】基于Springboot的疫情防控期间某村外出务工人员管理系统(有论文)

基于Springboot的疫情防控期间某村外出务工人员管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的疫情防控期间某村外出务工人员信息管理系统 本系统分为系统功能模块、管理员功能模块、用户功能模块、采集…

第三百六十五回

文章目录 1. 概念介绍2. 方法与信息2.1 获取方法2.2 详细信息 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何获取设备信息"相关的内容&#xff0c;本章回中将介绍如何获取App自身的信息.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在本…

C++的vector容器->基本概念、构造函数、赋值操作、容量和大小、插入和删除、数据存取、互换容器、预留空间

#include<iostream> using namespace std; #include <vector> //vector容器构造 void printVector(vector<int>& v) { for (vector<int>::iterator it v.begin(); it ! v.end(); it) { cout << *it << " "…

Redis中的rdb和aof

Redis中的rdb和aof 持久化流程RDB机制redis.conf中rdb的配置save bgsave 自动化 rdb触发的三种方式save 命令bgsave命令自动触发 rdb的优势劣势 AOFaof原理aof配置文件重写原理aof的三种触发机制 appendfsyncaof fix工具 redis-check-aof练习aofaof的优缺点 redis是一个内存数据…

GEE必须会教程—Map工具的使用

一个星期的时间&#xff0c;跟着小编的角度&#xff0c;我们已经学习了数值、字符串、字典、列表、日期、矩阵等基本的编程数据类型&#xff0c;这些是学习任何一门编程语言都需要掌握的知识&#xff0c;还有不懂得赶紧关注小编&#xff0c;进行主页查看过往文章&#xff01;! …

[rust] 11 所有权

文章目录 一 背景二 Stack 和 Heap2.1 Stack2.2 Heap2.3 性能区别2.4 所有权和堆栈 三 所有权原则3.1 变量作用域3.2 String 类型示例 四 变量绑定背后的数据交互4.1 所有权转移4.1.1 基本类型: 拷贝, 不转移所有权4.1.2 分配在 Heap 的类型: 转移所有权 4.2 Clone(深拷贝)4.3 …

可变参数、Collections类

一、可变参数 定义&#xff1a;是一种特殊的形参&#xff0c;定义在方法、构造器的形参列表里 格式&#xff1a;数据类型...参数名称 特点&#xff1a;可以不传数据&#xff0c;也可以传一个或者多个数据给它&#xff0c;也可以传一个数组 好处&#xff1a;可以灵活接收数据…

牛客网 HJ34 图片整理

思路&#xff1a; 题目总共涉及三种类型的字符&#xff1a;大写字母&#xff0c;小写字母&#xff0c;数字 我们可以简单归纳为两类&#xff1a;字母类和数字类&#xff08;采用isalpha和isdigit来判断&#xff09;&#xff0c;创建两个数组来保存这两类字符 因为题目要求按…

图片Base64编码解码的优缺点及应用场景分析

title: 图片Base64编码解码的优缺点及应用场景分析 date: 2024/2/24 14:24:37 updated: 2024/2/24 14:24:37 tags: 图片Base64编码解码HTTP请求优化网页性能加载速度安全性缓存机制 随着互联网的迅猛发展&#xff0c;图片在网页和移动应用中的使用越来越广泛。而图片的传输和加…

【新手易错点】golang中byte和rune

1 总体区别 在Golang中&#xff0c;byte和rune是两种不同类型的数据。简单来说&#xff0c;byte是一个8位的无符号整数类型&#xff0c;而rune则是一个32位的Unicode字符类型。 Byte: 在Golang中&#xff0c;byte类型实际上是uint8的别名&#xff0c;它用来表示8位的无符号整…

【MySQL】连接查询和自连接的学习和总结

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-x4sPmqTXA4yupW1n {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

【Linux】C语言实现超级简单进度条!你不会还不知道吧?

目录 1. 基础准备&#x1f38d; 1.1 \r&&\n 1.2 缓冲区 2. 进度条1.0&#x1f940; 2.1 Process.h 2.2 Process.c 2.3 Main.c 2.4 Makefile 3.进度条 2.0&#x1faba; 3.1 Process.h 3.2 Process.c 3.3 Main.c 1. 基础准备&#x1f38d; 1.1 \r&&…

MobaXterm连接VirtualBox虚拟机

目录 1.下载MobaXterm 2.获取连接配置 3.mobaXterm连接虚拟机 4.更好的方案 1.下载MobaXterm 据说MobaXtrem是远程终端的超级全能神器,官网下载地址&#xff1a;MobaXterm free Xserver and tabbed SSH client for Windows 选择适合你的版本&#xff1a;一个是Home Editi…

apidoc接口文档的自动更新与发布

文章目录 一、概述二、环境准备三、接口文档生成1. 下载源码2. 初始化3.执行 四、文档发布五&#xff0c;配置定时运行六&#xff0c;docker运行 一、概述 最近忙于某开源项目的接口文档整理&#xff0c;采用了apidoc来整理生成接口文档。 apidoc是一个可以将源代码中的注释直…

数据结构D4作业

1.实现单向循环链表的功能 loop.c #include "loop.h" loop_p create_loop() { loop_p H(loop_p)malloc(sizeof(loop)); if(HNULL) { printf("创建失败\n"); return NULL; } H->len0; H->nextH; ret…
最新文章