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) {// 创建一个 ArrayListArrayList<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) {// 创建一个 ArrayListArrayList<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();// 遍历 ArrayListSystem.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)则明确保持元素的排序。在选择集合类时,可以根据对顺序的需求来选择合适的实现。

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

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

相关文章

深度学习基于python+TensorFlow+Django的花朵识别系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 花朵识别系统&#xff0c;基于Python实现&#xff0c;深度学习卷积神经网络&#xff0c;通过TensorFlow搭建卷积神经…

视觉大模型DINOv2:自我监督学习的新领域

1 DINOv2 1.1 DINOv2特点 前段时间&#xff0c;Meta AI 高调发布了 Segment Anything&#xff08;SAM&#xff09;&#xff0c;SAM 以交互式方式快速生成 Mask&#xff0c;并可以对从未训练过的图片进行精准分割&#xff0c;可以根据文字提示或使用者点击进而圈出图像中的特定…

Spring-Security前后端分离权限认证

前后端分离 一般来说&#xff0c;我们用SpringSecurity默认的话是前后端整在一起的&#xff0c;比如thymeleaf或者Freemarker&#xff0c;SpringSecurity还自带login登录页,还让你配置登出页,错误页。 但是现在前后端分离才是正道&#xff0c;前后端分离的话&#xff0c;那就…

Postgresql数据类型-数组类型

PostgreSQL支持一维数组和多维数组&#xff0c;常用的数组类型为数字类型数组和字符型数组&#xff0c;也支持枚举类型、复合类型数组。 数组类型定义 先来看看数组类型的定义&#xff0c;创建表时在字段数据类型后面加方括号“[]”即可定义数组数据类型&#xff0c;如下所示…

JVS低代码表单自定义按钮的使用说明和操作示例

在普通的表单设计中&#xff0c;虽然自带的【提交】、【重置】、【取消】按钮可以满足基本操作需求&#xff0c;但在面对更多复杂的业务场景时&#xff0c;这些按钮的显示控制就显得有些力不从心。为了更好地满足用户在表单操作过程中的个性化需求&#xff0c;JVS低代码推出了表…

【03】Istio Gateway示例配置

3.1 开放kiali至集群外部 首先将istio-inressateway暴露集群外部; 在node02的ens33网卡上面有多余的ip地址&#xff0c;将该地址绑定在igressgateway的svc 上面。 kubectl edit svc istio-ingressgateway -n istio-system定义kiali的ingress gateway的资源配置清单 apiVersion:…

阿里云服务器搭建sql 服务

阿里云搭建mysql服务 环境准备 系统镜像 ubuntu 如果买点的实例不是ubuntu 系统镜像&#xff0c;需要停止服务之后&#xff0c;更改镜像 更新 apt-get &#xff1a; 更新apt-get: sudo apt-get update 如果没有出现&#xff1a;apt-get 找不到此命令的错误&#xff0c;可能是…

【KVM-4】硬件虚拟化技术(详)

前言 大家好&#xff0c;我是秋意零。 经过前面章节的介绍&#xff0c;已经知道KVM虚拟化必须依赖于硬件辅助的虚拟化技术&#xff0c;本节就来介绍一下硬件虚拟化技术。 &#x1f47f; 简介 &#x1f3e0; 个人主页&#xff1a; 秋意零&#x1f525; 账号&#xff1a;全平…

OpenCV:图像噪点消除与滤波算法

人工智能的学习之路非常漫长&#xff0c;不少人因为学习路线不对或者学习内容不够专业而举步难行。不过别担心&#xff0c;我为大家整理了一份600多G的学习资源&#xff0c;基本上涵盖了人工智能学习的所有内容。点击下方链接,0元进群领取学习资源,让你的学习之路更加顺畅!记得…

2023NewStarCTF

目录 一、阳光开朗大男孩 二、大怨种 三、2-分析 四、键盘侠 五、滴滴滴 六、Include? 七、medium_sql 八、POP Gadget 九、OtenkiGirl 一、阳光开朗大男孩 1.题目给出了secret.txt和flag.txt两个文件&#xff0c;secret.txt内容如下&#xff1a; 法治自由公正爱国…

网络编程套接字(3)——协议定制 | 序列化与反序列化

文章目录 一.认识“协议”1.协议的概念2.结构化数据的传输3.序列化和反序列化 二. 网络版计算器1.服务端2.协议定制(1) 网络发送和读取的正确理解(2) 协议定制的问题 3.客户端4.代码 三.Json实现序列化反序列化1.简单介绍2.使用 一.认识“协议” 1.协议的概念 协议&#xff0c…

Golang源码分析 | 程序引导过程

环境说明 CentOS Linux release 7.2 (Final&#xff09; go version go1.16.3 linux/amd64 GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-80.el7使用gdb查看程序入口 编写一个简单的go程序 // main.go package mainfunc main() {print("Hello world") } 编译go …