Java 之集合框架的详细介绍

在这里插入图片描述

文章目录

    • 总的介绍
      • 1. **Collection 接口**
      • 2. **List 接口**
      • 3. **Set 接口**
      • 4. **Map 接口**
      • 5. **HashMap、LinkedHashMap、TreeMap**
      • 6. **Queue 接口**
      • 7. **Deque 接口**
    • ArrayList 类
      • 1. **创建 ArrayList:**
      • 2. **添加元素:**
      • 3. **插入元素:**
      • 4. **获取元素:**
      • 5. **修改元素:**
      • 6. **删除元素:**
      • 7. **查找元素:**
      • 8. **获取大小:**
      • 9. **遍历 ArrayList:**
      • 完整示例:
    • set接口以及实现类
      • HashSet 类
      • 创建 HashSet:
      • 添加元素:
      • 查找元素:
      • 删除元素:
      • 获取大小:
      • 遍历 HashSet:
      • 用Set 对象实现集合运算
      • 1. 并集(Union):
      • 2. 交集(Intersection):
      • 3. 差集(Difference):
      • 判断是否为子集:
      • TreeSet 类
      • 创建 TreeSet:
      • 添加元素:
      • 查找第一个元素:
      • 删除元素:
      • 获取大小:
      • 遍历 TreeSet:
      • 对象顺序

Java 集合框架提供了一组实现常见数据结构(如列表、集合、映射等)的类和接口,使得数据的存储、检索、操作更加方便和高效。集合框架主要包括以下核心接口和类:

总的介绍

1. Collection 接口

Collection 接口是集合框架的根接口,它定义了一组通用的方法,适用于所有集合类。主要有:

  • add(E e): 将指定的元素添加到集合中。
  • remove(Object o): 从集合中移除指定的元素。
  • size(): 返回集合中的元素数量。
  • isEmpty(): 判断集合是否为空。
  • contains(Object o): 判断集合是否包含指定的元素。
  • iterator(): 返回一个迭代器,用于遍历集合中的元素。

2. List 接口

List 接口继承自 Collection 接口,表示有序的集合,允许重复元素。主要特点是可以通过索引访问元素。常用的实现类有 ArrayListLinkedListVector

3. Set 接口

Set 接口继承自 Collection 接口,表示不允许重复元素的集合。主要特点是不维护元素的顺序。常用的实现类有 HashSetLinkedHashSetTreeSet

4. Map 接口

Map 接口表示键值对的集合,每个键关联一个值。键不能重复,但值可以。主要方法包括:

  • put(K key, V value): 将指定的键值对存储到 Map 中。
  • get(Object key): 返回与指定键关联的值。
  • remove(Object key): 从 Map 中移除指定键的映射。
  • containsKey(Object key): 判断 Map 中是否包含指定的键。
  • containsValue(Object value): 判断 Map 中是否包含指定的值。

5. HashMap、LinkedHashMap、TreeMap

  • HashMap: 基于哈希表实现,提供快速的检索性能,无固定顺序。
  • LinkedHashMap:HashMap 基础上,保持元素插入顺序。
  • TreeMap: 基于红黑树实现,按键有序存储。

6. Queue 接口

Queue 接口表示一种先进先出(FIFO)的数据结构,通常用于处理任务调度。主要方法包括 offer(E e)poll()peek()

7. Deque 接口

Deque 接口是 Queue 接口的扩展,表示一种双端队列。可以在两端插入和删除元素。主要方法包括 addFirst(E e)addLast(E e)removeFirst()removeLast()

ArrayList 类

当使用 ArrayList 类时,您可以执行许多常见的操作,例如添加、获取、修改、删除元素以及其他一些集合操作。以下是 ArrayList 类的详细使用说明:

1. 创建 ArrayList:

import java.util.ArrayList;

public class ArrayListUsage {
    public static void main(String[] args) {
        // 创建一个 ArrayList
        ArrayList<String> cityList = new ArrayList<>();
    }
}

2. 添加元素:

使用 add 方法向 ArrayList 中添加元素。

cityList.add("Beijing");
cityList.add("Shanghai");
cityList.add("Guangzhou");

3. 插入元素:

使用 add 方法的指定索引位置,将元素插入 ArrayList。

cityList.add(1, "Chengdu");

4. 获取元素:

使用 get 方法通过索引获取元素。

String city = cityList.get(0);

5. 修改元素:

使用 set 方法通过索引修改元素。

cityList.set(1, "Nanjing");

6. 删除元素:

使用 remove 方法通过元素值或索引删除元素。

cityList.remove("Guangzhou");
cityList.remove(0);

7. 查找元素:

使用 contains 方法判断 ArrayList 中是否包含某个元素。

boolean containsChengdu = cityList.contains("Chengdu");

8. 获取大小:

使用 size 方法获取 ArrayList 的大小。

int cityCount = cityList.size();

9. 遍历 ArrayList:

使用 for-each 循环遍历 ArrayList。

for (String city : cityList) {
    System.out.println(city);
}

完整示例:

import java.util.ArrayList;

public class ArrayListUsage {
    public static void main(String[] args) {
        // 创建一个 ArrayList
        ArrayList<String> cityList = new ArrayList<>();

        // 添加元素
        cityList.add("Beijing");
        cityList.add("Shanghai");
        cityList.add("Guangzhou");

        // 插入元素
        cityList.add(1, "Chengdu");

        // 获取元素和修改元素
        String firstCity = cityList.get(0);
        cityList.set(1, "Nanjing");

        // 删除元素
        cityList.remove("Guangzhou");
        cityList.remove(0);

        // 查找元素
        boolean containsChengdu = cityList.contains("Chengdu");

        // 获取大小
        int cityCount = cityList.size();

        // 遍历 ArrayList
        System.out.println("遍历城市列表:");
        for (String city : cityList) {
            System.out.println(city);
        }
    }
}

这个示例演示了如何使用 ArrayList 进行添加、获取、修改、删除元素以及其他一些集合操作。

set接口以及实现类

HashSet 类

明白了,以下是更简洁的介绍:

创建 HashSet:

Set<String> hashSet = new HashSet<>();

添加元素:

hashSet.add("Apple");
hashSet.add("Banana");
hashSet.add("Orange");

查找元素:

boolean containsBanana = hashSet.contains("Banana");

删除元素:

hashSet.remove("Orange");

获取大小:

int setSize = hashSet.size();

遍历 HashSet:

for (String fruit : hashSet) {
    System.out.println(fruit);
}

这些简单的代码片段展示了 HashSet 的基本操作,包括创建、添加、查找、删除、获取大小和遍历。

用Set 对象实现集合运算

1. 并集(Union):

Set<Integer> unionSet = new HashSet<>(set1);
unionSet.addAll(set2);

2. 交集(Intersection):

Set<Integer> intersectionSet = new HashSet<>(set1);
intersectionSet.retainAll(set2);

3. 差集(Difference):

Set<Integer> differenceSet = new HashSet<>(set1);
differenceSet.removeAll(set2);

判断是否为子集:

boolean isSubset = set1.containsAll(set2);

这行代码判断 set2 是否为 set1 的子集,如果是,则 isSubsettrue

TreeSet 类

创建 TreeSet:

Set<String> treeSet = new TreeSet<>();

添加元素:

treeSet.add("Apple");
treeSet.add("Banana");
treeSet.add("Orange");

查找第一个元素:

String firstElement = ((TreeSet<String>) treeSet).first();

删除元素:

treeSet.remove("Orange");

获取大小:

int treeSetSize = treeSet.size();

遍历 TreeSet:

for (String fruit : treeSet) {
    System.out.println(fruit);
}

这些简洁的代码片段展示了 TreeSet 的基本操作,包括创建、添加、查找、删除、获取大小和遍历。

对象顺序

在 Java 中,对象的顺序通常涉及到两个方面:插入顺序和排序顺序。

  1. 插入顺序(Insertion Order): 插入顺序指的是元素被添加到集合的顺序。例如,如果你按照顺序添加元素 A、B、C 到集合中,那么在遍历集合时,元素的顺序将是 A、B、C。

    示例:

    Set<String> insertionOrderSet = new HashSet<>();
    insertionOrderSet.add("Apple");
    insertionOrderSet.add("Banana");
    insertionOrderSet.add("Orange");
    
    for (String fruit : insertionOrderSet) {
        System.out.println(fruit);
    }
    

    输出可能是:

    Apple
    Banana
    Orange
    
  2. 排序顺序(Sorting Order): 排序顺序指的是元素按照一定的顺序排列。在有序的集合中,元素通常按照升序或降序排列。TreeSet 就是一个有序集合的例子,它使用红黑树数据结构来保持元素的顺序。

    示例:

    Set<String> sortingOrderSet = new TreeSet<>();
    sortingOrderSet.add("Apple");
    sortingOrderSet.add("Banana");
    sortingOrderSet.add("Orange");
    
    for (String fruit : sortingOrderSet) {
        System.out.println(fruit);
    }
    

    输出可能是:

    Apple
    Banana
    Orange
    

需要注意的是,有些集合类(如 HashSet)并不保证元素的排序,而有些集合类(如 TreeSet)则明确保持元素的排序。在选择集合类时,可以根据对顺序的需求来选择合适的实现。

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

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

相关文章

Antv/G2 折线图 使用 DataSet 进行数据排序

DataSet 文档 G2 3.2 DataSet 文档 安装 浏览器引入 可以通过 <script> 标签引入在线资源或者本地脚本&#xff1a; <!-- 引入在线资源 --> <script src"https://unpkg.com/antv/data-set"></script><!-- 引入本地脚本 --> <sc…

Linux学习第41天:Linux SPI 驱动实验(二):乾坤大挪移

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 本章的思维导图如下&#xff1a; 二、I.MX6U SPI主机驱动分析 主机驱动一般都是由SOC厂商写好的。不作为重点需要掌握的内容。 三、SPI设备驱动编写流程 1、SP…

软件测试面试,一份八股文足矣(含文档)

前言 在我认为&#xff0c;对于测试面试以及进阶的最佳学习方法莫过于刷题博客书籍视频总结&#xff0c;前几者我将淋漓尽致地挥毫于这篇博客文章中&#xff0c;至于总结在于个人&#xff0c;实际上越到后面你会发现面试并不难&#xff0c;其次就是在刷题的过程中有没有去思考…

Topaz Photo AI for Mac/win(人工智能降噪软件) 完美兼容激活版

Topaz Photo AI是一款基于人工智能的照片编辑软件&#xff0c;具有革命性的功能。它提供了强大的工具和技术&#xff0c;让用户能够编辑照片而不降低质量。该软件具备高清晰度效果、降噪和自动照片润色工具&#xff0c;能够帮助用户制作令人惊叹的照片。 它包括复杂的锐化算法…

DNS域名解析

目录 1.概述 1.1产生原因 1.2作用 1.3连接方式 1.4因特网的域名结构 1.4.1拓扑 1.4.2分类 1.4.3域名服务器类型划分 2. DNS域名解析过程 2.1分类 2.2解析图 2.2.2过程分析 3.搭建DNS域名解析服务器 3.1.概述 3.2安装软件 3.3bind服务中三个关键文件 3.4主配置…

Matplotlib的使用方法

Matplotlib是Python最著名的绘图库&#xff0c;它提供了一整套和Matlab相似的命令API&#xff0c;十分适合交互式地进行制图。而且也可以方便地将它作为绘图控件&#xff0c;嵌入到GUI应用程序中。Matplotlib能够创建多数类型的图表&#xff0c;如条形图、散点图、条形图、饼图…

mysql之正则表达式匹配

题目&#xff1a; 今天在牛客网看到一道关于数据库正则表达式匹配的问题&#xff0c;发现自己一点不会做。 正则表达式&#xff1a; 一、正则表达式 MySQL 正则表达式通常是在检索数据库记录的时候&#xff0c;根据指定的匹配模式匹配记录中 符合要求的特殊字符串。MySQL 的…

JavaScript事件处理

在IE 3.0和Netscape 2.0浏览器中开始出现事件。DOM 2规范开始标准化DOM事件&#xff0c;直到2004年发布DOM 3.0时&#xff0c;W3C才完善事件模型。目前&#xff0c;所有主流浏览器都支持DOM 2事件模块。IE8及其早期版本还继续使用IE事件模块。 1、事件基础 1.1、事件模型 在…

deepstream生成pipeline拓扑图的方法

deepstream生成pipeline拓扑图的方法 1、前期工作1.1 安装dot 2、使用命令行生成2.1、添加环境变量2.2 、运行管道2.3 、使用dot 生成png图片 3、在c中使用3.1、添加代码3.2、运行代码3.3 、使用dot 生成png图片 4、在python中使用4.1、添加代码4.2 、使用dot 生成png图片 1、前…

【机器学习基础】机器学习入门(2)

&#x1f680;个人主页&#xff1a;为梦而生~ 关注我一起学习吧&#xff01; &#x1f4a1;专栏&#xff1a;机器学习 欢迎订阅&#xff01;后面的内容会越来越有意思~ &#x1f4a1;往期推荐&#xff1a;【机器学习基础】机器学习入门&#xff08;1&#xff09; &#x1f4a1;…

设计模式之工厂模式 ( Factory Pattern )(1)

其他设计模式也会后续更新… 设计模式其实需要有一定开发经验才好理解&#xff0c;对代码有一定的设计要求&#xff0c;工作中融入才是最好的 工厂模式 ( Factory Pattern ) 工厂模式&#xff08;Factory Pattern&#xff09;提供了一种创建对象的最佳方式 工厂模式在创建对…

“ChatGPT 之父”暗讽马斯克;传安卓版本与鸿蒙将不再兼容;PICO 裁撤游戏工作室团队丨 RTE 开发者日报 Vol.83

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE &#xff08;Real Time Engagement&#xff09; 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文…

ubuntu开机系统出错且无法恢复。请联系系统管理员。

背景&#xff1a; ubuntu22.04.2命令行&#xff0c;执行自动安装系统推荐显卡驱动命令&#xff0c;字体变大&#xff0c;重启后出现如下图错误&#xff0c;无法进入系统&#xff0c;无法通过CTRLALTF1-F3进入TTY模式。 解决办法&#xff1a; 1.首先要想办法进入系统&#xff…

VMware 虚拟机开启后黑屏问题的解决方式

很好&#xff0c;现在是vm 虚拟机节目的连续剧了 首先&#xff0c;我们安装好了&#xff0c;vm软件。 其次&#xff0c;我们在vm中创建了虚拟机。 再其次&#xff0c;我们解决了&#xff0c;开启虚拟机计算机自动重启的问题。 最后我们遇到了这个问题&#xff1a;虚拟机开启后整…

CSDN的规范、检测文章质量、博客等级好处等等(我也是意外发现的,我相信很多人还不知道,使用分享给大家!)

前言 都是整理官方的文档&#xff0c;方便自己查看和检查使用&#xff0c;以前我也不知道。后来巧合下发现的&#xff0c;所以分享给大家&#xff01; 下面都有官方的链接&#xff0c;详情去看官方的文档。 大家严格按照官方的规范去记录自己工作生活中的文章&#xff0c;很快…

AP/PF PLASMA电源维修等离子变频电源PF23V-A1-138

维修包括&#xff1a;PECVD、MOCVD、IONIMP,PLASMA的设备电源,包括直流、高压、脉冲、射频、微波、匹配器、RPSC、CHILLER等。电源维修的时候&#xff0c;需要检测一下各功率器件是否存在击穿短路&#xff0c;例如电源整流桥堆、开关管、高频大功率整流管、浪涌电流的大功率电阻…

东莞松山湖数据中心|莞服务器托管的优势

东莞位于珠江三角洲经济圈&#xff0c;交通便利&#xff0c;与广州、深圳等大城市相邻&#xff0c;而且东莞是中国重要的制造业基地&#xff0c;有众多的制造业和科技企业集聚于此&#xff0c;随着互联网和数字化时代的到来&#xff0c;企业都向数字化转型&#xff0c;对于信息…

将请求映射到servlet的规则

参考资源 详情可以参考&#xff1a;https://jakarta.ee/specifications/servlet/6.0/jakarta-servlet-spec-6.0.html#mapping-requests-to-servlets URL路径的使用 web容器接收到客户端的请求&#xff0c;决定转发给哪个web应用。被选中的web 应用必须具有最长的上下文&…

【LittleXi】C程序预处理、编译、汇编、链接步骤

【LittleXi】C程序预处理、编译、汇编、链接步骤 C程序 #include<stdio.h> int main(){int x1,y1;printf("xy%d",xy); }1、预处理 将头文件引入进来、除去注释、宏定义下放 执行指令 g -E esc.c -o esc.i 2、编译 将处理好的代码编译为汇编代码.s 执行…

测试行业爬了7年,从功能测试到高级测试,工资也翻了好几倍

我在测试行业爬了7年。从功能测试到现在成为高级测试&#xff0c;我的工资也翻了好几倍。 入门阶段&#xff08;功能测试&#xff09; 个人认为&#xff0c;测试的前景还不错&#xff0c;只要你肯努力&#xff1b;刚出来的时候在鹅厂做外包功能测试。每天都很悠闲。点了两年&a…