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>>() {@Overridepublic 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.rhkb.cn/news/263309.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RabbitMQ的死信队列和延迟队列

文章目录 死信队列如何配置死信队列死信队列的应用场景Spring Boot实现RabbitMQ的死信队列 延迟队列方案优劣&#xff1a;延迟队列的实现有两种方式&#xff1a; 死信队列 1&#xff09;“死信”是RabbitMQ中的一种消息机制。 2&#xff09;消息变成死信&#xff0c;可能是由于…

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

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

自定义Chrome的浏览器开发者工具DevTools界面的字体和样式

Chrome浏览器开发者工具默认的字体太小&#xff0c;想要修改但没有相关设置。 外观——字体可以自定义字体&#xff0c;但大小不可以调整。 github上有人给出了方法 整理为中文教程&#xff1a; 1.打开浏览器开发者工具&#xff0c;点开设置——实验&#xff0c;勾上红框设…

Excel工作表控件实现滚动按钮效果

实例需求&#xff1a;工作表中有多个Button控件&#xff08;工作表Form控件&#xff09;和一个ScrollBar控件&#xff08;工作表ActiveX控件&#xff0c;名称为ScrollBar2&#xff09;&#xff0c;需要实现如下图所示效果。点击ScrollBar控件实现按钮的滚动效果&#xff0c;实际…

群晖NAS DSM7.2.1安装宝塔之后无法登陆账号密码问题解决

宝塔的安装就不在这赘述了&#xff0c;只说下&#xff0c;启动之后默认账号密码无法登陆的问题。 按照上面给出的账号密码&#xff0c;无法登陆 然后点忘记密码&#xff0c;由于是docker安装的&#xff0c;根目录下没有/www/server/panel 。 也没有bt命令 要怎么修改呢。 既然…

【Python笔记-设计模式】适配器模式

一、说明 适配器模式是一种结构型模式&#xff0c;它使接口不兼容的对象能够相互合作 (一) 解决问题 主要解决接口不兼容问题 (二) 使用场景 当系统需要使用现有的类&#xff0c;但类的接口不符合需求时当需要一个统一的输出接口&#xff0c;但输入类型不可预知时当需要创…

Flink join详解(含两类API及coGroup、connect详解)

Flink SQL支持对动态表进行复杂而灵活的连接操作。 为了处理不同的场景&#xff0c;需要多种查询语义&#xff0c;因此有几种不同类型的 Join。 默认情况下&#xff0c;joins 的顺序是没有优化的。表的 join 顺序是在 FROM 从句指定的。可以通过把更新频率最低的表放在第一个、…

网络编程、UDP、TCP

计算机网络 就是将地理位置不同的具有独立功能的多台计算及外部设备&#xff0c;通过通信线路连接起来&#xff0c;在网络操作系统、网络管理软件以及网络通信协议的管理和协调下&#xff0c;实现资源共享和信息传递的计算机系统 目的 传播交流信息、数据交换、通信 如何做…

*MYSQL--索引--内部原理

MYSQL的索引根据功能,主要有三大类型: 1.HASH索引 2.二叉树 3.BTREE索引 一:HASH索引 1.内部原理: 在设置了某列为索引列之后,并且开始或者将要在相应索引列创建数据的时候,系统通过某种算法 F(X) 自动计算出来一个十六进制的哈希值,这个哈希值能够对应相应的字段值 所以…

链表和顺序表的优劣分析及其时间、空间复杂度分析

链表和顺序表的优劣分析及其时间、空间复杂度分析 一、链表和顺序表的优劣分析二、算法复杂度<font face "楷体" size 5 color blue>//上面算法的执行次数大致为&#xff1a;F&#xff08;N&#xff09; N^22*N10;   N 10,F(10) 1002010 130次   N 1…

大模型+影像:智能手机“上春山”

这个春节假期&#xff0c;一首《上春山》火了。吃瓜群众热热闹闹学了一个假期的“春山学”&#xff0c;了解了抢占C位的各种技巧。 假期过去&#xff0c;开工大吉&#xff0c;手机行业开始抢占今年的C位。那么问题来了&#xff0c;今年智能手机最大的机会点在哪里&#xff1f;答…

修复Microsoft Edge WebView2无法安装的问题

修复Microsoft Edge WebView2无法安装的问题 场景解决方案 场景 系统&#xff1a;win11 电脑&#xff1a;联想14 前提&#xff1a;使用Geek Uninstaller强制删除了Microsoft Edge WebView2 同时下载了clash verge。 发现根本无法运行&#xff08;点击了无任何反应且图标颜色…

【Linux】 yum命令使用

yum命令 yum&#xff08; Yellow dog Updater, Modified&#xff09; 是一个在 Fedora、CentOS 及其它一些基于 RPM 的 Linux 发行版中使用的包管理器。它允许用户自动安装、更新、配置和删除软件包。yum 由 Python 写成&#xff0c;基于 RPM&#xff08;Red Hat Package Mana…

Sublime Text4配置C#运行环境

这里写自定义目录标题 前言部署.NET环境Sublime Text4配置C#编译环境1. 下载插件 运行测试 前言 今天把家里的9年前的远古神机搬了出来&#xff0c;重装了个win7的精简版&#xff0c;本打算装个VScode测试一下是否能写C#代码&#xff0c;结果是可以的&#xff0c;但&#xff0…

【Docker】有用的命令

文章目录 DockerDocker 镜像与容器的差异Docker的好处Hypervisor运维 一、安装docker二、启动docker三、获取docker镜像四、创建镜像使用命令行创建镜像使用dockerfile创建镜像 五、docker报错 Docker docker镜像&#xff08;Image&#xff09; docker镜像类似于虚拟机镜像&…

MacOSX删除HBuilderX

1. 删除应用程序 如下图。MacOSX&#xff0c;打开访达&#xff0c;左侧点击应用程序&#xff0c;进入应用程序窗口&#xff0c;找到HBuilderX&#xff0c;右键菜单&#xff0c;点击移到废纸篓 2. 删除数据目录 打开操作系统终端&#xff0c;输入如下命令&#xff1a; open $H…

性能优化——canvas 加载海量图

背景 公司的在线设计稿平台的画板列表页开发时由于数据量不足&#xff0c;未能测出关于画板列表页性能问题&#xff0c;在经过用户一段时间的使用后出现了关于初始化卡顿、缩放卡顿等问题&#xff0c;画板列表页采用了vue-konva 原因 关于画板列表为何卡顿有如下几点原因 1、…

uni-app 人脸识别 App端

文章目录 背景介绍开发前准备基础版获取视频流人脸识别版本这时候就可以开心的调试了背景介绍 本文介绍如何制作人脸打卡等类似功能的实现。 使用nvue+live-pusher来实现。在App端这是成本较低的可以控制样式的方案了 实现了两个版本 基础版本:视频流 => 抓拍照片 => 传…

手写redux和applyMiddleware中间件react示例

目录 一 核心代码 1.reducer 2.store.js 二 关于context API的使用 1. MyContext 2. createContext 3. ContextProvider 4. connect 三 组件验证效果 1. Todo 2. TodoList 3.TodoItem 4.TodoInput 5. App组件引入Todo组件 一 核心代码 1.reducer // 新增列表数…

鸿蒙DevEco Service开发准备与使用

DevEco低代码是一个基于Serverless和ArkUI的端云一体化低代码开发平台&#xff0c;可通过拖拽式开发&#xff0c;可视化配置构建元服务。打通HarmonyOS云侧与端侧能力&#xff0c;轻松实现HMS Core和AGC Serverless能力的调用。通过与元服务生态、HMS Core、AGC Serverless平台…