java集合(2)

目录

一. Map接口下的实现类

1. HashMap

1.1 HashMap常用方法

 2. TreeMap

2.1 TreeMap常用方法

 3. Hashtable

3.1 Hashtable常用方法

4.Map集合的遍历

4.1 根据键找值

4.2 利用map中的entrySet()方法

二.Collections类

1.Collections类中的常用方法

三. 泛型

1. 为什么使用泛型

2. 什么是泛型

3. 泛型类

4. 从泛型类派生子类

5. 泛型接口

6.类型擦除


一. Map接口下的实现类

特点:

(1)Map接口下的实现类都是以键值对的形式存储

(2)键不能重复,值可以重复

(3)通过键可以找到对应的值,但不能通过值找对应的键,因为值不唯一

(4)一个键只能映射到一个值

1. HashMap

HashMap存储数据时键是无序的,就和HashSet一样,无序指的是不会按照插入顺序进行存储

1.1 HashMap常用方法

V put(K, key,V value)向map中添加元素
V remove(Object key)删除键是指定元素的键值,返回对应的值
clear()清空map中的元素
boolean isEmpty()判断集合是否为空,为空返回true,不为空返回false
boolean containsKey(Object key)判断是否包含指定的键,包含返回true,不包含返回false
boolean containsValue(Object value)判断是否包含指定的值,包含返回true,不包含返回false
V get(K key)根据键找对应的值
int size()

返回map中有几组键值对

 2. TreeMap

TreeMap底层仍旧是树形结构,键可以排序,只不过要求存储键的类要实现Comparable接口实现compareTo()方法

2.1 TreeMap常用方法

V put(K, key,V value)向map中添加元素
V remove(Object key)删除键是指定元素的键值,返回对应的值
clear()清空map中的元素
boolean isEmpty()判断集合是否为空,为空返回true,不为空返回false
boolean containsKey(Object key)判断是否包含指定的键,包含返回true,不包含返回false
boolean containsValue(Object value)判断是否包含指定的值,包含返回true,不包含返回false
V get(K key)根据键找对应的值
int size()

返回map中有几组键值对

 3. Hashtable

Hashtable和HashMap基本类似,但Hashtable的方法中都用synchronized修饰了,加了一把锁表示线程安全,就和ArrayList和Vector,StringBuffer和StringBuilder一样,但不同的是HashMap键和值都可以添加null关键字,而Hashtable键和值都不能添加null关键字,

3.1 Hashtable常用方法

V put(K, key,V value)向map中添加元素
V remove(Object key)删除键是指定元素的键值,返回对应的值
clear()清空map中的元素
boolean isEmpty()判断集合是否为空,为空返回true,不为空返回false
boolean containsKey(Object key)判断是否包含指定的键,包含返回true,不包含返回false
boolean containsValue(Object value)判断是否包含指定的值,包含返回true,不包含返回false
V get(K key)根据键找对应的值
int size()

返回map中有几组键值对

4. Map集合的遍历

4.1 根据键找值

public class HashMapDemo3 {public static void main(String[] args) {HashMap<String,String> map = new HashMap<>();map.put("a","aa");map.put("b","bb");map.put("w","ww");//HashMap键值都可以存储nullmap.put("a",null);map.put(null,"aaaaa");map.put(null,null);System.out.println(map);//map遍历//方式1:先拿到所有的键,遍历键,根据键找值Set<String> keyset = map.keySet();for(String key:keyset){System.out.println(key+":"+map.get(key));}}
}

利用map中的keySet()方法拿到所有的键,遍历键,根据map中的get()方法拿到值

4.2 利用map中的entrySet()方法

public class HashMapDemo3 {public static void main(String[] args) {//方式2 推荐的遍历方式Set<Map.Entry<String,String>> entries = map.entrySet();for(Map.Entry<String,String> entry:entries){System.out.println(entry.getKey()+":"+entry.getValue());}}
}

二. Collections类

1. Collections类中的常用方法

addAll(Collection<? super T> c,T... elements)将emements可变参数中的元素全部添加到集合中
binarySearch(List<? extends Comparable<? super T>> list,T key)二分查找
sort(List list)对集合进行排序,默认升序
sort(List list, Comparator c)对集合进行排序,可以自定义排序规则
swap(List list, int i, int j)交换集合中的元素,i,j为下标
copy(List dest, List src)集合间的复制,注意dest.size()必须大于src.size()
fill(List list, T obj)用某个值填充集合
max(Collection coll)获取集合中的最大值
min(Collection coll)获取集合中的最小值
replaceAll(List list, T oldVal, T newVal)用新值替换集合中的旧值
reverse(List list)反转集合,逆序输出
shuffle(List list)随机打乱集合中的元素顺序

三. 泛型

1. 为什么使用泛型

我们知道集合容器中是可以添加任意类型的元素的(Object),但要是添加任意的元素,会导致我们在遍历处理时做出很多判断同时还存在类型转换的问题,使代码变得冗余,减少代码的可读性,所以我们要使用泛型来对集合中的元素进行限制,让其只能存储一组数据类型相同的元素

2. 什么是泛型

泛型就是将数据类型当做参数传递(参数化类型),注意这里的数据类型只能是引用数据类型,不能传递基本数据类型,这样就可以在编译期间检查传入的参数是否是规定的类型

3. 泛型类

泛型类就是将泛型用于类的定义中,这样当我们产生该类的对象时,就需要传入一种类型,来确定类中某些成员的类型

public class Result<T,E> {int code;public T data;E element;String message;public int getCode() {return code;}public void setCode(int code) {this.code = code;}public T getData() {return data;}public void setData(T data) {this.data = data;}public E getElement() {return element;}public void setElement(E element) {this.element = element;}public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}
}

如图Result类就是一个泛型类,当new该类的对象时可以传入两个参数,用来确定data和element的数据类型,如果我们不传的话,默认是Object类型

4. 从泛型类派生子类

当我们一个类要继承一个泛型类时,为了避免父类的泛型不能被确定,所以当继承时有两种方法

1.将子类也声明为泛型类,并且和父类的泛型相同

/*当一个类继承一个泛型类时, 将子类也声明为泛型类public class B<T> extends A<T>B<String> b = new B();*/public class A<T> {T data;}public class B<T> extends A<T> {public static void main(String[] args) {B  b = new B();b.data="";}
}

2.子类若不是泛型类,则在继承时需要明确指定出父类泛型的具体类型

/*当一个类继承一个泛型类时,子类不是泛型类,那么就必须明确父类泛型类型public class B extends A<String>*/public class B extends A<String> {public static void main(String[] args) {B  b = new B();b.data="";}
}

5. 泛型接口

泛型接口和泛型类的继承是一样的,可以参考上面的方式

1.一个类实现泛型接口,如果该类也是泛型类,则两者的泛型要一致

2.一个类实现泛型接口,如果该类不是泛型类,则要指明该接口泛型的具体类型

6. 类型擦除

类型擦除:泛型只是在编译期间帮助我们检查类型是否符合规定的类型,当我们在实际运行时,进入JVM前,关于泛型的一切信息就会被擦除,统一当做Object类型或上限类型处理,这就是类型擦除

public class Demo2 {public static void main(String[] args) throws NoSuchFieldException {Result<String,String> result2 = new Result<>();result2.setData("abc");//虽然声明了泛型,但是实际在底层存储时,还是按照Object接收存储,这个称为类型擦除Field data = result2.getClass().getField("data");System.out.println(data.getType());//获取实际运行时类型}
}

上述代码通过反射机制,获取result2中data成员变量实际运行时的类型,结果如下

 可以看到result2类中的data成员变量在实际运行时并不是我们的String类型,而是Object类型

 

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

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

相关文章

uniapp 去掉小数末尾多余的0

文章目录 在uniapp或者一般的JavaScript环境中&#xff0c;要去掉小数末尾的0&#xff0c;可以使用以下几种方法&#xff1a; 使用parseFloat()函数 let num 123.4500; let result parseFloat(num); console.log(result); // 输出: 123.45字符串处理 将数字转换为字符串&am…

Excel中按列的首行字母顺序,重新排列(VBA脚本)

排序前 要求对4列数据按照第一行abcd的顺序排列 VB脚本如下&#xff1a; 要使用这个脚本&#xff0c;请按照以下步骤操作&#xff1a; 打开Excel&#xff0c;然后按下 Alt F11 打开VBA编辑器。在VBA编辑器中&#xff0c;选择“插入” > “模块”&#xff0c;在打开的模块…

C#——使用ini-parser第三方操作ini文件

使用ini-parser第三方操作ini文件 IniParser - 一个轻量级的.NET类库&#xff0c;用于读写INI文件。 安装 在NuGet程序包中下载IniParser第三方 使用IniParser第三方操作Ini文件 读取 // 初始化解析器var parser new FileIniDataParser();// 读取INI文件string iniFilePat…

Lambda架构

1.Lambda架构对大数据处理系统的理解 Lambda架构由Storm的作者Nathan Marz提出&#xff0c;其设计目的在于提供一个能满足大数据系统关键特性的架构&#xff0c;包括高容错、低延迟、可扩展等。其整合离线计算与实时计算&#xff0c;融合不可变性、读写分离和复杂性隔离等原则&…

图片管理新纪元:高效批量横向拼接图片,一键生成灰色艺术效果,打造专业视觉体验!

在数字时代&#xff0c;图片已成为我们生活和工作中不可或缺的一部分。但面对海量的图片&#xff0c;如何高效地进行批量管理、拼接和调色&#xff0c;成为许多人面临的难题。今天&#xff0c;我们为您带来了一款颠覆性的图片管理工具&#xff0c;让您轻松实现图片批量横向拼接…

Linux 查看磁盘是不是 ssd 的方法

lsblk 命令检查 $ lsblk -d -o name,rota如果 ROTA 值为 1&#xff0c;则磁盘类型为 HDD&#xff0c;如果 ROTA 值为 0&#xff0c;则磁盘类型为 SSD。可以在上面的屏幕截图中看到 sda 的 ROTA 值是 1&#xff0c;表示它是 HDD。 2. 检查磁盘是否旋转 $ cat /sys/block/sda/q…

使用 PCA 可视化数据的分类能力

使用 PCA 探索数据分类的效果&#xff08;使用 Python 代码&#xff09; 「AI秘籍」系列课程&#xff1a; 人工智能应用数学基础人工智能Python基础人工智能基础核心知识人工智能BI核心知识人工智能CV核心知识 主成分分析 (PCA) 是数据科学家使用的绝佳工具。它可用于降低特征…

[VN2020 公开赛]strangeCpp

每天水一道题计划&#xff0c;打卡第三天 看着挺奇怪的&#xff0c;然后想动调&#xff0c;出现了一点错误 沉默&#xff0c;反思&#xff0c;不解&#xff0c;疑惑 然后观察&#xff0c;最开始有一堆数据&#xff0c;不知道干嘛的 对welcome中间的数据交叉引用发现 重点应该…

leetcode判断二分图

判断二分图 图的问题肯定要用到深度优先遍历或者广度优先遍历&#xff0c;但又不是单纯的深度优先遍历算法和广度优先遍历算法&#xff0c;而是需要在遍历的过程中加入与解决题目相关的逻辑。 题干中说了&#xff0c;这个图可能不是连通图&#xff0c;这个提示有什么作用呢&a…

Mysql慢日志、慢SQL

慢查询日志 查看执行慢的SQL语句&#xff0c;需要先开启慢查询日志。 MySQL 的慢查询日志&#xff0c;记录在 MySQL 中响应时间超过阀值的语句&#xff08;具体指运行时间超过 long_query_time 值的SQL。long_query_time 的默认值为10&#xff0c;意思是运行10秒以上(不含10秒…

用C#调用Windows API向指定窗口发送按键消息详解与示例

文章目录 1. 按键消息的定义及功能2. 引入所需的命名空间3. 定义Windows API函数4. 定义发送消息的方法5. 获取窗口句柄6. 调用API发送按键消息7. 使用示例注意事项总结 在C#中调用Windows API向指定窗口发送按键消息是一种常见的操作&#xff0c;这通常用于自动化脚本、游戏辅…

讲个SystemVerilog随机约束小坑

正文 记录个在写SystemVerilog随机约束时遇到的一个小坑&#xff0c;如果没有认真去查看随机结果是否符合预期&#xff0c;还真不容易发现。 为了方便讲述&#xff0c;写了如下示例代码。类cl_a里有个随机变量aa&#xff0c;初始值为222。在module top里对类cl_a例化并进行约…

短链接学习day2

用户敏感信息脱敏展示&#xff1a; RequestParam 和 PathVariable的区别 注解是用于从request中接收请求的&#xff0c;两个都可以接收参数&#xff0c;关键点不同的是RequestParam 是从request里面拿取值&#xff0c;而 PathVariable 是从一个URI模板里面来填充。 PathVari…

[leetcode hot 150]第一百一十七题,填充每个节点的下一个右侧节点

题目&#xff1a; 给定一个二叉树&#xff1a; struct Node {int val;Node *left;Node *right;Node *next; } 填充它的每个 next 指针&#xff0c;让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点&#xff0c;则将 next 指针设置为 NULL 。 初始状态下&#x…

数据结构试卷(一)王彬

一、单选题&#xff08;每题 2 分&#xff0c;共20分&#xff09; 栈和队列的共同特点是( )。 A.只允许在端点处插入和删除元素 B.都是先进后出 C.都是先进先出 D.没有共同点 用链接方式存储的队列&#xff0c;在进行插入运算时( ). A. 仅修改头指针   …

深入理解C# log4Net日志框架:功能、使用方法与性能优势

文章目录 1、log4Net的主要特性2、log4Net框架详解配置日志级别 3、log4Net的使用示例4、性能优化与对比5、总结与展望 在软件开发过程中&#xff0c;日志记录是一个不可或缺的功能。它可以帮助开发者追踪错误、监控应用程序性能&#xff0c;以及进行调试。在C#生态系统中&…

STM32-LED和蜂鸣器

本内容是基于江协科技STM32视频整理而得。 1. LED和蜂鸣器 1.1 LED和蜂鸣器简介 LED&#xff1a;发光二极管&#xff0c;正向导通点亮&#xff0c;反向通电不亮 有源蜂鸣器&#xff1a;内部自带振荡源&#xff0c;将正负极接上直流电压即可持续发声&#xff0c;频率固定。 无…

Linux服务器升级openssh9.8最新版全过程,及遇到问题处理

前言&#xff1a;由于2024年7月1日&#xff0c;openssh发布了最新版9.8&#xff0c;所以服务器需要升级一下&#xff0c;特此做个详细记录&#xff1a; 由于下载最新版openssh9.8&#xff0c;需要将openssl也一并进行升级 一、下载openssh最新版本与openssl对应版本&#xff…

易保全推动区块链应用与AI融合创新发展

数字化时代&#xff0c;区块链和人工智能技术作为当下两大“黑科技”&#xff0c;两者的深度结合&#xff0c;正在为企业数字化转型带来前所未有的机遇。 易保全作为国内权威的电子数据存证保全机构&#xff0c;积极探索两者的融合之道&#xff0c;将区块链的去中心化、不可篡…

Java项目:基于SSM框架实现的高校共享单车管理系统分前后台【ssm+B/S架构+源码+数据库+开题报告+任务书+毕业论文】

一、项目简介 本项目是一套基于SSM框架实现的高校共享单车管理系统 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、操作简单、…