java泛型集合的使用

Java泛型集合是Java集合框架中广泛使用的一种类型安全机制。使用泛型集合可以提高代码的类型安全性和可读性。下面详细介绍Java泛型集合的基本概念、常用集合类及其使用方法,并提供示例代码。

基本概念

Java泛型集合允许在集合中存储特定类型的对象,并在编译时进行类型检查。这可以避免运行时的类型转换错误和提高代码的可读性和可维护性。

常用集合类

Java集合框架中最常用的泛型集合类包括:

  1. List
  2. Set
  3. Map

示例代码

示例1:使用List
1import java.util.ArrayList;
2import java.util.List;
3
4public class ListExample {
5    public static void main(String[] args) {
6        // 创建一个存储字符串的List
7        List<String> stringList = new ArrayList<>();
8
9        // 添加元素
10        stringList.add("Hello");
11        stringList.add("World");
12
13        // 访问元素
14        String first = stringList.get(0);
15        String second = stringList.get(1);
16
17        // 遍历List
18        for (String item : stringList) {
19            System.out.println(item);
20        }
21    }
22}
示例2:使用Set
1import java.util.HashSet;
2import java.util.Set;
3
4public class SetExample {
5    public static void main(String[] args) {
6        // 创建一个存储整数的Set
7        Set<Integer> integerSet = new HashSet<>();
8
9        // 添加元素
10        integerSet.add(1);
11        integerSet.add(2);
12        integerSet.add(3);
13
14        // 访问元素
15        boolean containsTwo = integerSet.contains(2);
16
17        // 遍历Set
18        for (Integer number : integerSet) {
19            System.out.println(number);
20        }
21    }
22}
1import java.util.HashMap;
2import java.util.Map;
3
4public class MapExample {
5    public static void main(String[] args) {
6        // 创建一个存储字符串键和整数值的Map
7        Map<String, Integer> map = new HashMap<>();
8
9        // 添加键值对
10        map.put("one", 1);
11        map.put("two", 2);
12        map.put("three", 3);
13
14        // 访问键值对
15        Integer valueForOne = map.get("one");
16
17        // 遍历Map
18        for (Map.Entry<String, Integer> entry : map.entrySet()) {
19            System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
20        }
21    }
22}

泛型集合的常见操作

1. 创建泛型集合
1List<String> stringList = new ArrayList<>();
2Set<Integer> integerSet = new HashSet<>();
3Map<String, Integer> map = new HashMap<>();
2. 添加元素
1stringList.add("Hello");
2integerSet.add(1);
3map.put("one", 1);
3. 访问元素
1String first = stringList.get(0);
2boolean containsTwo = integerSet.contains(2);
3Integer valueForOne = map.get("one");
4. 遍历集合
1// 遍历List
2for (String item : stringList) {
3    System.out.println(item);
4}
5
6// 遍历Set
7for (Integer number : integerSet) {
8    System.out.println(number);
9}
10
11// 遍历Map
12for (Map.Entry<String, Integer> entry : map.entrySet()) {
13    System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
14}

类型通配符

类型通配符通常使用?表示,可以表示任何类型。这在处理不确定类型的集合时非常有用。

示例4:使用类型通配符
1import java.util.Collection;
2import java.util.List;
3import java.util.Set;
4
5public class WildcardExample {
6    public static void printCollection(Collection<?> collection) {
7        for (Object item : collection) {
8            System.out.println(item);
9        }
10    }
11
12    public static void main(String[] args) {
13        List<String> stringList = new ArrayList<>();
14        stringList.add("Hello");
15        stringList.add("World");
16
17        Set<Integer> integerSet = new HashSet<>();
18        integerSet.add(1);
19        integerSet.add(2);
20
21        // 调用泛型方法
22        printCollection(stringList);
23        printCollection(integerSet);
24    }
25}

在这个例子中,printCollection方法接受任何类型的Collection,使用类型通配符?

泛型上下界

泛型上下界可以限制类型参数的范围,使其只能是某个特定类型的子类型或超类型。

示例5:使用泛型上下界
1import java.util.List;
2import java.util.Comparator;
3
4public class BoundedWildcardExample {
5    public static <T extends Comparable<T>> T max(List<T> list) {
6        if (list.isEmpty()) {
7            throw new IllegalArgumentException("List must not be empty.");
8        }
9
10        T maxElement = list.get(0);
11        for (T element : list) {
12            if (element.compareTo(maxElement) > 0) {
13                maxElement = element;
14            }
15        }
16
17        return maxElement;
18    }
19
20    public static void main(String[] args) {
21        List<Integer> intList = List.of(1, 2, 3);
22        List<String> stringList = List.of("a", "b", "c");
23
24        Integer maxInt = max(intList);
25        String maxString = max(stringList);
26
27        System.out.println("Max Int: " + maxInt); // 输出 Max Int: 3
28        System.out.println("Max String: " + maxString); // 输出 Max String: c
29    }
30}

在这个例子中,max方法接受一个List,并且类型参数T必须是Comparable的子类型。这样可以确保List中的元素可以相互比较。

泛型方法

泛型方法可以在非泛型类或接口中声明。泛型方法允许在方法内部使用泛型类型参数,从而实现类型安全的代码。

示例6:使用泛型方法
1import java.util.List;
2
3public class GenericMethodExample {
4    public static <T> void printList(List<T> list) {
5        for (T item : list) {
6            System.out.println(item);
7        }
8    }
9
10    public static void main(String[] args) {
11        List<Integer> intList = List.of(1, 2, 3);
12        List<String> stringList = List.of("Hello", "World");
13
14        printList(intList);
15        printList(stringList);
16    }
17}

在这个例子中,printList方法接受任何类型的List,使用类型参数T

总结

Java泛型集合是Java集合框架中广泛使用的一种类型安全机制。使用泛型集合可以提高代码的类型安全性和可读性。通过使用泛型集合,开发者可以编写更加清晰、简洁和安全的代码。掌握这些基本概念和用法后,可以进一步探索更高级的泛型特性,如泛型通配符、边界类型等,以实现更加复杂的类型安全需求。

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

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

相关文章

十九、石英晶体振荡电路

石英晶体振荡电路 1、石英晶体的特点、等效电路、特性曲线; 2、石英晶体振动器的特点&#xff0c; 3、石英晶体振动器的振荡频率

软考(中级-软件设计师)计算机系统篇(0921)

六、计算机系统组成&#xff08;五大部件&#xff09; &#xff08;冯.诺依曼) 冯.诺依曼计算机的特点&#xff1a; 计算机有五大部件组成&#xff1a;输入设别&#xff0c;输出设备&#xff0c;控制器&#xff0c;运算器&#xff0c;存储器;指令和疏忽都以同等地位存于存储器…

为什么年轻人都热衷找搭子,而不是找对象?

在繁华的都市中&#xff0c;有一个名叫晓悦的年轻人。晓悦每天穿梭于忙碌的工作和快节奏的生活之间&#xff0c;渐渐地&#xff0c;她发现身边的朋友们都开始找起了 “搭子”。 有一天&#xff0c;晓悦结束了一天疲惫的工作&#xff0c;坐在咖啡店里&#xff0c;看着窗外匆匆而…

为写论文头疼?推荐4款ai写毕业论文初稿的软件

写论文对于许多学生来说是一项既重要又具挑战性的任务。为了帮助大家更高效地完成这一过程&#xff0c;我将推荐四款优秀的AI写毕业论文初稿的软件&#xff0c;并详细介绍它们的功能和优势。 传送门&#xff1a;https://www.aipaperpass.com?piclLGw 千笔-AIPassPaper是一款功…

面向对象例题之例题的特性

答案&#xff1a;C 解析&#xff1a;对象里面的方法和属性数量是不确定的&#xff0c;可以不断扩展写多个属性和方法 清洗的边界是对象必备的&#xff0c;哪些是这个类的&#xff0c;哪些是其他类的都有体现。 良好的定义行为一般指定义良好的属性和方法 可扩展性指的是子类…

【问题随记】在使用 AuthenticationManager 的时候,出现循环依赖问题 —— `java.lang.StackOverflowError`

问题随记 在使用 AuthenticationManager 的时候&#xff0c;出现循环依赖问题 —— java.lang.StackOverflowError&#xff0c;查资料查了两天半&#xff0c;终于找到原因。 2024-06-16T17:54:19.48708:00 ERROR 20672 --- [nio-8789-exec-1] o.a.c.c.C.[.[.[/].[dispatcherS…

波分技术基础 -- FEC

信号在传输过程中&#xff0c;不可避免的会出现劣化、误码&#xff0c;FEC (Forward error correction) 技术确保通信系统在噪声和其他损伤的影响下&#xff0c;依然能够实现无错误传输。 应用场景&#xff1a;长途密集波分系统&#xff08;DWDM&#xff09;实现方式&#xff…

LED显示屏迎来革新:GOB封装技术引领行业新风尚

在我们日常生活中&#xff0c;LED显示屏无处不在&#xff0c;从繁华的街头广告牌到家庭娱乐中心的大屏幕电视&#xff0c;它们都以鲜明的色彩和清晰的画质吸引着我们的目光。然而&#xff0c;在LED显示屏技术日新月异的今天&#xff0c;一种名为GOB&#xff08;Glue On Board&a…

python:给1个整数,你怎么判断是否等于2的幂次方?

最近在csdn上刷到一个比较简单的题目&#xff0c;题目要求不使用循环和递归来实现检查1个整数是否等于2的幂次方&#xff0c;题目如下&#xff1a; 题目的答案如下&#xff1a; def isPowerofTwo(n):z bin(n)[2:]print(bin(n))if z[0] ! 1:return Falsefor i in z[1:]:if i !…

华为全联接大会HUAWEI Connect 2024印象(二):昇腾AI端侧推理

此次参加HUAWEI Connect 2024最主要目标是了解昇腾AI端侧推理技术&#xff0c;希望将其融合到我现在嵌入式系统课程中&#xff0c;不过刚开始在一楼找到一个小展台&#xff0c;看到了香橙派Orange Pi。香橙派是深圳迅龙的一个品牌&#xff0c;他们和很多芯片厂商都合作过&#…

IPsec-VPN中文解释

网络括谱图 IPSec-VPN 配置思路 1 配置IP地址 FWA:IP地址的配置 [FW1000-A]interface GigabitEthernet 1/0/0 [FW1000-A-GigabitEthernet1/0/0]ip address 10.1.1.1 24 //配置IP地址 [FW1000-A]interface GigabitEthernet 1/0/2 [FW1000-A-GigabitEthernet1/0/2]ip a…

计算机毕业设计 基于Python的美术馆预约系统的设计与实现 Python+Django+Vue 前后端分离 附源码 讲解 文档

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

【笔记】第三节 组织与性能

3.1 基本成分 3.2 微观组织特征 0.6-0.8C%碳素钢的组织为珠光体和少量的铁素体。 如何把组织和性能联系起来&#xff1f;德国克虏伯公司的研究——珠光体片间距与渗碳体片层厚度成比例&#xff1a; t s 0 ( ρ 15 ( C % ) − 1 ) ts_0(\frac{\rho}{15(C\%)}-1) ts0​(15(C%)…

【Web】PolarCTF2024秋季个人挑战赛wp

EZ_Host 一眼丁真命令注入 payload: ?host127.0.0.1;catf* 序列一下 exp: <?phpclass Polar{public $lt;public $b; } $pnew Polar(); $p->lt"system"; $p->b"tac /f*"; echo serialize($p);payload: xO:5:"Polar":2:{s:2:"…

我的AI工具箱Tauri版-VideoDuplication视频素材去重

本教程基于自研的AI工具箱Tauri版进行VideoDuplication视频素材去重。 该项目是基于自研的AI工具箱Tauri版的视频素材去重工具&#xff0c;用于高效地处理和去除重复视频内容。用户可以通过搜索关键词"去重"或通过路径导航到"Python音频技术/视频tools"模…

MySQL高阶1907-按分类统计薪水

目录 题目 准备数据 分析数据 总结 题目 结果表 必须 包含所有三个类别。 如果某个类别中没有帐户&#xff0c;则报告 0 。 按 任意顺序 返回结果表。 查询每个工资类别的银行账户数量。 工资类别如下&#xff1a; "Low Salary"&#xff1a;所有工资 严格低于…

MQ入门(4)

Erlang&#xff1a;面向高并发的 单机的吞吐量就是并发性&#xff1a;Rabbitmq是10w左右&#xff08;现实项目中已经足够用了&#xff09;&#xff0c;RocketMQ是10w到20w&#xff0c;Kafka是100w左右。 公司里的并发&#xff08;QPS&#xff09; 大部分的公司每天的QPS大概…

自动化测试框架设计详解

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、引言 随着IT技术的快速发展&#xff0c;软件开发变得越来越快速和复杂化。在这种背景下&#xff0c;传统的手工测试方式已经无法满足测试需求&#xff0c;而自…

【RabbitMQ】⾼级特性

RabbitMQ ⾼级特性 1. 消息确认1.1 消息确认机制1.2 代码示例 2. 持久化2.1 交换机持久化2.2 队列持久化2.3 消息持久化 3. 发送⽅确认3.1 confirm确认模式3.2 return退回模式3.3 问题: 如何保证RabbitMQ消息的可靠传输? 4. 重试机制5. TTL5.1 设置消息的TTL5.2 设置队列的TTL…

C++——模拟实现string

1.再谈string string为什么要被设计成模板&#xff1f;日常使用string好像都是char*&#xff0c;char*不够使用吗&#xff0c;为什么要设计成模板呢&#xff1f; 1.1 关于编码 //计算机的存储如何区分呢&#xff1f;int main() {//比如在C语言中&#xff0c;有整型//如果是有…