set、LinkedHashSet和TreeSet的区别、Map接口常见方法、Collections 工具类使用
DAY7.2 Java核心基础
想学习Collection、list、ArrayList、Set、HashSet部分的小伙伴可以转到
7.1集合框架、Collection、list、ArrayList、Set、HashSet和LinkedHashSet、判断两个对象是否相等文章查看

set集合
在set集合中,处理LinkedHashSet是有序的,TreeSet的存放也是有序的,但是二者之间的有序亦有区
LinkedHashSet:元素的存储顺序和遍历顺序是一致的
TreeSet:内部元素会按照升序的方法进行排序,无论存入元素的顺序是什么,都会按照升序进行输出
public static void main(String[] args) {TreeSet<Integer> treeSet = new TreeSet<>();treeSet.add(1);treeSet.add(5);treeSet.add(3);treeSet.add(2);treeSet.add(1);treeSet.add(9);Iterator<Integer> iterator = treeSet.iterator();while (iterator.hasNext()){System.out.println(iterator.next());}System.out.println("***********************");LinkedHashSet<Integer> linkedHashSet = new LinkedHashSet<>();linkedHashSet.add(98);linkedHashSet.add(2);linkedHashSet.add(3);linkedHashSet.add(2);linkedHashSet.add(11);linkedHashSet.add(1);for (Integer integer : linkedHashSet) {System.out.println(integer);}
}

可以看见treeSet自动排序了,而linkedHashSet按照添加顺序输出的,但是他们两个都去除了重复元素,验证了Set集合元素的唯一性
TreeSet 内部会自动按照升序对元素进行排列,所以添加到 TreeSet 集合中的元素必须具备排序的功能,无法排序的对象无法添加到 TreeSet 中的。
如果传递的是一个不能比较的对象:
public class test {public static void main(String[] args) {TreeSet treeSet = new TreeSet<>();treeSet.add(new A(6));treeSet.add(new A(2));treeSet.add(new A(3));treeSet.add(new A(4));}
}
class A{private int num;public A(int num) {this.num = num;}
}

就会出现异常显示无法是实现比较的接口
Comparable 是排序接口,实习了该接口的类就具备了排序的功能,对象就可以进行排序
如果要比较我们就需要在A对象类里面实现Comparable 接口
class A implements Comparable{private int num;public A(int num) {this.num = num;}/*** A.compareTo(B)* 返回值:* 1表示A大于B* 0表示A等于B* -1表示A小于B* @param o* @return*/@Overridepublic int compareTo(Object o) {if (o instanceof A){A a = (A) o;return this.num - a.num;}return 0;}@Overridepublic String toString() {return "A{" +"num=" + num +'}';}
}
public class test {public static void main(String[] args) {TreeSet treeSet = new TreeSet<>();treeSet.add(new A(6));treeSet.add(new A(2));treeSet.add(new A(3));treeSet.add(new A(4));Iterator iterator = treeSet.iterator();while (iterator.hasNext()){System.out.println(iterator.next());}}
}
这时候输出:

完美解决!
Map 接口
Set List 都是Collenction的子接口,Map接口是与Collenction完全独立的一个体系
Set 、List、Collenction都是只能操作一个元素,而Map可以操作一对数据,以Key-Value形式存在
Map接口常见方法
| 方法 | 描述 |
|---|---|
| int size() | 获取集合长度 |
| boolean isEmpty() | 判断集合是否为空 |
| boolean containsKey(Object key) | 判断集合中是否存在某个 key 值 |
| boolean containsValue(Object key) | 判断集合中是否存在某个 value 值 |
| V get(Object key) | 取出集合中 key 对应的 value |
| V put(K key,V value) | 向集合中添加一组 key-value 的元素 |
| V remove(Object key) | 删除集合中 key 对应的 value |
| void clear() | 清除集合中的所有元素 |
| Set keySet() | 取出集合中所有的 key,返回一个 Set 集合 |
| Collection values() | 取出集合中所有的 value,返回一个 Collection 集合 |
| Set entrySet() | 将 Map 对象转为 Set 对象 |
| int hashCode() | 获取集合的散列值 |
| boolean equals(Object o) | 比较两个集合是否相等 |
Map是一个接口,无法被实例化创建对象,而需要通过实现类来创建对象
HashMap:存储无序,key不能重复,值可以重复
TreeMap:存储有序,key不能重复,值可以重复
测试方法:
public class test {public static void main(String[] args) {testMapMethods();}public static void testMapMethods() {Map<String, Integer> map = new HashMap<>();// 测试 put 方法map.put("a", 1);map.put("b", 2);map.put("c", 3);System.out.println("插入元素后: " + map);// 测试 size 方法System.out.println("集合大小: " + map.size());// 测试 isEmpty 方法System.out.println("集合是否为空: " + map.isEmpty());// 测试 containsKey 方法System.out.println("是否包含键 'a': " + map.containsKey("a"));System.out.println("是否包含键 'd': " + map.containsKey("d"));// 测试 containsValue 方法System.out.println("是否包含值 1: " + map.containsValue(1));System.out.println("是否包含值 4: " + map.containsValue(4));// 测试 get 方法System.out.println("键 'a' 对应的值: " + map.get("a"));System.out.println("键 'd' 对应的值: " + map.get("d"));// 测试 keySet 方法Set<String> keySet = map.keySet();System.out.println("所有键的集合: " + keySet);// 测试 values 方法System.out.println("所有值的集合: " + map.values());// 测试 hashCode 方法System.out.println("集合的哈希码: " + map.hashCode());// 测试 remove 方法System.out.println("删除键 'a' 对应的值: " + map.remove("a"));System.out.println("删除后: " + map);// 测试 replace 方法System.out.println("将键 'b' 的值替换为 4: " + map.replace("b", 4));System.out.println("替换后: " + map);// 测试 clear 方法map.clear();System.out.println("清空后: " + map);System.out.println("清空后是否为空: " + map.isEmpty());}
}
输出:

朋友们可以自己取尝试调用一下这些方法
TreeMap和HashMap差不多,但是这个会根据key排序
public static void main(String[] args) {TreeMap<Integer, String> map = new TreeMap<>();map.put(3, "Three");map.put(1, "One");map.put(2, "Two");map.put(2, "Two");System.out.println(map);
}
测试:

Collections 工具类
集合除了可以存储数据之外,还提供了很多方法来对数据进行操作,但是这些方法都有其局限性,实际操作起来不是很方便,JDK 提供了一个工具类 Collections,专门用来操作集合,添加元素、元素排序、替换元素。
Collections 常用方法
| 方法 | 描述 |
|---|---|
| sort | 根据集合泛型对应的类实现的 Comparable 接口对集合进行排序 |
| sort | 根据 Comparator 接口对集合进行排序 |
| binarySearch | 查找元素在集合中的下标,要求集合元素必须是升序排列 |
| get | 根据下标找到集合中的元素 |
| reverse | 对集合元素的顺序进行反转 |
| swap | 交换集合中指定位置的两个元素 |
| fill | 将集合中的所有元素进行替换 |
| min | 返回集合中最小的元素 |
| max | 返回集合中最大的元素 |
| replaceAll | 将集合中的所有元素进行替换 |
| addAll | 向集合中添加元素 |
部分代码示例:
sort方法:
// 定义一个实现了Comparable接口的类
class Person implements Comparable<Person> {private String name;private int age;public Person(String name, int age) {this.name = name;this.age = age;}@Overridepublic int compareTo(Person p) {return Integer.compare(this.age, p.age);}@Overridepublic String toString() {return "Person{name='" + name + "', age=" + age + "}";}
}public class TestSort {public static void main(String[] args) {List<Person> list = new ArrayList<>();list.add(new Person("Alice", 25));list.add(new Person("Bob", 30));list.add(new Person("Charlie", 20));Collections.sort(list); // 根据age排序System.out.println(list);}
}
输出:

实现compareTo方法,然后可以使得按照age排序
binarySearch (查找元素下标,要求集合升序排列)
public static void main(String[] args) {List<Integer> list = Arrays.asList(1, 3, 5, 7, 9);int index = Collections.binarySearch(list, 5); // 返回元素5的索引System.out.println("Index of 5: " + index);
}
输出:

get (根据下标找到集合中的元素)
public static void main(String[] args) {List<String> list = Arrays.asList("apple", "orange", "banana");String element = list.get(1); // 获取第二个元素System.out.println("Element at index 1: " + element);
}
reverse (反转集合顺序)
public static void main(String[] args) {List<String> list = Arrays.asList("apple", "orange", "banana");Collections.reverse(list);System.out.println("Reversed list: " + list);
}

swap (交换指定位置的两个元素)
public static void main(String[] args) {List<String> list = Arrays.asList("apple", "orange", "banana");Collections.swap(list, 0, 2); // 交换第一个和第三个元素System.out.println("Swapped list: " + list);
}

fill (将集合中的所有元素替换为指定值)
public static void main(String[] args) {List<String> list = new ArrayList<>(Arrays.asList("apple", "orange", "banana"));Collections.fill(list, "fruit");System.out.println("Filled list: " + list);
}

min (返回集合中最小的元素)、max (返回集合中最大的元素)
public static void main(String[] args) {List<Integer> list = Arrays.asList(5, 3, 8, 1, 9);Integer max = Collections.max(list);Integer min = Collections.min(list);System.out.println("Maximum value: " + max);System.out.println("Minimum value: " + min);
}

replaceAll (将集合中的所有元素替换为指定值)
public static void main(String[] args) {List<String> list = Arrays.asList("apple", "orange", "banana");Collections.replaceAll(list, "apple", "fruit");System.out.println("Replaced list: " + list);
}

addAll (向集合中添加所有指定元素)
public static void main(String[] args) {List<String> list = new ArrayList<>();List<String> toAdd = Arrays.asList("apple", "orange", "banana");Collections.addAll(list, "grape", "peach");// 或者使用addAll方法list.addAll(toAdd);System.out.println("Added list: " + list);
}

相关文章:
set、LinkedHashSet和TreeSet的区别、Map接口常见方法、Collections 工具类使用
DAY7.2 Java核心基础 想学习Collection、list、ArrayList、Set、HashSet部分的小伙伴可以转到 7.1集合框架、Collection、list、ArrayList、Set、HashSet和LinkedHashSet、判断两个对象是否相等文章查看 set集合 在set集合中,处理LinkedHashSet是有序的…...
Qt开发:nativeEvent事件的使用
文章目录 一、概述二、nativeEvent 的定义三、Windows 平台示例三、使用nativeEvent监测设备变化 一、概述 Qt 的 nativeEvent 是一个特殊的事件处理机制,允许开发者处理操作系统级别的原生事件。通常,Qt 通过 QEvent 机制来管理事件,但有时…...
鸿蒙Next-应用检测、安装以及企业内部商店的实现
一、企业内部应用检测和更新升级 A应用检测是否安装B应用 canOpenApp():boolean{ try { let link schB://com.example.test/open; // 替换成你目标应用的link串儿 let canOpen bundleManager.canOpenLink(link); console.log("canOpen:"canOpen…...
存量思维和增量思维
在网上看一篇文章,有两种典型的阅读方式。 一种,是挑刺式,眼里只有缺点。 比如,有人不厌其烦地告诉作者,哪段有错别字,哪段不够严谨。 闲得蛋疼。 有这工夫,多看会书,不香么&…...
golang将大接口传递给小接口以及场景
文章目录 golang将大接口传递给小接口背景什么是大接口传递给小接口使用场景 golang将大接口传递给小接口 背景 在 Go 语言中,接口是一种强大的工具,它允许我们定义对象的行为而不关心其具体实现。特别是在复杂的应用程序中,将一个实现了较…...
K8s 1.27.1 实战系列(七)Deployment
一、Deployment介绍 Deployment负责创建和更新应用程序的实例,使Pod拥有多副本,自愈,扩缩容等能力。创建Deployment后,Kubernetes Master 将应用程序实例调度到集群中的各个节点上。如果托管实例的节点关闭或被删除,Deployment控制器会将该实例替换为群集中另一个节点上的…...
Swift系列02-Swift 数据类型系统与内存模型
Swift 是一门现代的、安全的编程语言,其类型系统和内存模型设计对性能和安全性有着重要影响。本文将深入探讨 Swift 的数据类型系统与内存模型,帮助你更好地理解并利用这些特性来优化你的 iOS 应用。本文主要包含: 值类型和引用类型…...
MySQL中like模糊查询如何优化?
大家好,我是锋哥。今天分享关于【MySQL中like模糊查询如何优化?】面试题。希望对大家有帮助; MySQL中like模糊查询如何优化? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 MySQL 中,LIKE 模糊查询虽然非常常见,…...
用低代码平台集成人工智能:无需专业开发也能实现智能化
引言:人工智能的普及与企业需求 随着人工智能(AI)技术的飞速发展,越来越多的企业开始意识到其在提升运营效率、优化客户体验和推动业务创新方面的巨大潜力。从智能客服到自动化决策支持,从数据分析到个性化推荐&#x…...
【使用hexo模板创建个人博客网站】
使用hexo模板创建个人博客网站 环境准备node安装hexo安装ssh配置 使用hexo命令搭建个人博客网站hexo命令 部署到github创建仓库修改_config.yml文件 编写博客主题扩展 环境准备 node安装 进入node官网安装node.js 使用node -v检查是否安装成功 安装成功后应该出现如上界面 …...
最简单圆形进度条实现CSS+javascript,两端带圆弧
两端是弧形的圆形进度条。 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>Document</title…...
vuejs 模板语法、条件渲染、v-for、事件处理、表单输入绑定
创建vue项目之后我们就可以开始写代码了,我们的代码一般都会写在src目录-components目录-HelloWord.vue文件内。 我们之前写的HTML文件的结构是HTML代码可以集成或者连接外部的css/js文件。 我们通过vue建立的项目,它的结构是在一个vue文件内集成了HTML…...
论文阅读方法
文章目录 步骤一:对论文进行自我判断阅读题目和关键词。阅读摘要阅读总结要点 步骤二:阅读文章阅读图表和图表的注释阅读引言阅读实验部分阅读结果和作者对结果的讨论(创新点)要点 步骤三:精度论文回答问题1回答问题2回…...
问题解决:Kali Linux 中配置启用 Vim 复制粘贴功能
在 Kali Linux 系统中,使用 XShell 或其他类似终端时,Vim 编辑器的默认设置并不支持直接进行复制和粘贴操作,这对于日常的开发工作或渗透测试人员来说可能会造成不便。幸运的是,通过简单的配置调整,可以让 Vim 轻松支持…...
Linux hexdump命令
hexdump 是 Linux 中一个强大的二进制文件查看工具,可以用于查看文件的十六进制、ASCII 或其他格式的转储内容。以下是常见用法及示例: 1. 查看文件头部(前 N 个字节) 语法 hexdump -n <字节数> -C <文件名>示例&am…...
Stable Diffusion教程|快速入门SD绘画原理与安装
什么是Stable Diffusion,什么是炼丹师?根据市场研究机构预测,到2025年全球AI绘画市场规模将达到100亿美元,其中Stable Diffusion(简称SD)作为一种先进的图像生成技术之一,市场份额也在不断增长&…...
系统架构设计师—系统架构设计篇—微服务架构
文章目录 概述优势挑战 概述 微服务是一种架构风格,将单体应用划分成一组小的服务,服务之间相互协作,实现业务功能,每个服务运营在独立的进程中,服务间采用轻量级的通信机制协作(通常是HTTP/JSON࿰…...
Array and string offset access syntax with curly braces is deprecated
警告信息 “Array and string offset access syntax with curly braces is deprecated” 是 PHP 中的一个弃用警告(Deprecation Notice),表明在 PHP 中使用花括号 {} 来访问数组或字符串的偏移量已经被标记为过时。 背景 在 PHP 的早期版本…...
腾讯元宝:AI 时代的快速论文阅读助手
1. 背景与需求 在 AI 研究领域,每天都会涌现大量学术论文。如何高效阅读并提取关键信息成为研究者的一大难题。腾讯元宝是腾讯推出的一款大模型,结合了**大语言模型(LLM)和自然语言处理(NLP)**技术&#x…...
基于单片机的风速报警装置设计
标题:基于单片机的风速报警装置设计 内容:1.摘要 本设计聚焦于基于单片机的风速报警装置,旨在解决传统风速监测缺乏实时报警功能的问题。采用单片机作为核心控制单元,结合风速传感器采集风速数据。经实验测试,该装置能准确测量 0 - 60m/s 范…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...
mac:大模型系列测试
0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何,是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试,是可以跑通文章里面的代码。训练速度也是很快的。 注意…...
【Veristand】Veristand环境安装教程-Linux RT / Windows
首先声明,此教程是针对Simulink编译模型并导入Veristand中编写的,同时需要注意的是老用户编译可能用的是Veristand Model Framework,那个是历史版本,且NI不会再维护,新版本编译支持为VeriStand Model Generation Suppo…...
AxureRP-Pro-Beta-Setup_114413.exe (6.0.0.2887)
Name:3ddown Serial:FiCGEezgdGoYILo8U/2MFyCWj0jZoJc/sziRRj2/ENvtEq7w1RH97k5MWctqVHA 注册用户名:Axure 序列号:8t3Yk/zu4cX601/seX6wBZgYRVj/lkC2PICCdO4sFKCCLx8mcCnccoylVb40lP...
【实施指南】Android客户端HTTPS双向认证实施指南
🔐 一、所需准备材料 证书文件(6类核心文件) 类型 格式 作用 Android端要求 CA根证书 .crt/.pem 验证服务器/客户端证书合法性 需预置到Android信任库 服务器证书 .crt 服务器身份证明 客户端需持有以验证服务器 客户端证书 .crt 客户端身份…...
基于开源AI智能名片链动2 + 1模式S2B2C商城小程序的沉浸式体验营销研究
摘要:在消费市场竞争日益激烈的当下,传统体验营销方式存在诸多局限。本文聚焦开源AI智能名片链动2 1模式S2B2C商城小程序,探讨其在沉浸式体验营销中的应用。通过对比传统品鉴、工厂参观等初级体验方式,分析沉浸式体验的优势与价值…...
Qt 按钮类控件(Push Button 与 Radio Button)(1)
文章目录 Push Button前提概要API接口给按钮添加图标给按钮添加快捷键 Radio ButtonAPI接口性别选择 Push Button(鼠标点击不放连续移动快捷键) Radio Button Push Button 前提概要 1. 之前文章中所提到的各种跟QWidget有关的各种属性/函数/方法&#…...
