【面向对象的程序设计——集合框架】主要接口

news2024/11/29 21:02:32

文章目录

  • 主要接口
    • 集合框架的主要接口
    • Collect接口
    • Set接口
      • 实现Set接口的类
      • SortedSet接口
    • List接口:线性表
      • 实现List接口的类:
    • Queue接口
      • 实现Queue接口的类
    • Map接口
      • Map接口的定义
      • Map接口的方法
      • SortedMap接口

主要接口

集合框架的主要接口

声明了对各种集合类型执行的一般操作
包括Collection、Set、List、Queue、SortedSet、Map、SortedMap
基本结构如图:
在这里插入图片描述

Collect接口

声明了一组操作成批对象的抽象方法,包括查询和修改方法,包含两个主要的子接口:集合(Set)、列表(List),Collection接口声明时应该使用泛型,即Collection<E>,以下是Collect接口的几个常见的方法

查询方法

  • int size():返回集合对象中包含的元素个数
  • boolean isEmpty():判断集合对象中是否还包含元素,如果没有任何元素,则返回true
  • boolean contains(Object obj):判断对象是否在集合中
  • boolean containsAll(Collection c):判断方法的接收者对象是否包含集合中的所有元素

修改方法

  • boolean add(Object obj): 向集合中增加对象
  • boolean addAll(Collection<?> c): 将参数集合中的所有元素增加到接收者集合中
  • boolean remove(Object obj):从集合中删除对象
  • boolean removeAll(Collect c):将参数集合中的所有元素从接收者集合中删除
  • boolean retainAll(Collection c):在接收者集合中保留参数集合中的所有元素,其它元素都删除
  • void clear():删除集合中的所有元素

eg-1
调用接口

import java.util.ArrayList;
import java.util.List;

public class Main
{
    public static void main(String[] args) {
        // 创建一个书籍列表
        List<String> books = new ArrayList<>();
        books.add("Java编程思想");
        books.add("Python编程入门");
        books.add("算法导论");
        books.add("计算机网络");

        // 创建一个要保留的书籍类型的列表
        List<String> typesToRetain = new ArrayList<>();
        typesToRetain.add("Java编程思想");
        typesToRetain.add("算法导论");

        System.out.println("原始书籍列表: " + books);

        // 使用 retainAll 方法保留只存在于 typesToRetain 列表中的书籍
        boolean result = books.retainAll(typesToRetain);

        System.out.println("更新后的书籍列表: " + books);
        System.out.println("是否进行了修改: " + result); // 如果列表有改变,则返回 true
    }
}

运行结果:
原始书籍列表: [Java编程思想, Python编程入门, 算法导论, 计算机网络]
更新后的书籍列表: [Java编程思想, 算法导论]
是否进行了修改: true

Set接口

Set接口不允许有重复的元素,是数学几何的抽象,其不记录元素的保存顺序。对于equals和hashCode操作有了更强的约定,如果两个Set对象包含同样的元素,二者便是相等的。

实现Set接口的类

哈希集合(HashSet)及树集合(TreeSet)
其他:AbstractSet, ConcurrentSkipListSet, CopyOnWriteArraySet, EnumSet, JobStateReasons, LinkedHashSet

eg-1
HashSet接口的使用举例

//此代码由AI生成
import java.util.HashSet;
import java.util.Set;

public class Main {
    public static void main(String[] args) {
        // 创建一个 HashSet 实例
        Set<String> set = new HashSet<>();

        // 添加元素到 Set 中
        set.add("Apple");
        set.add("Banana");
        set.add("Orange");
        set.add("Apple"); // 尝试添加重复元素,不会成功

        // 输出 Set 的内容
        System.out.println("HashSet 内容: " + set);

        // 检查 Set 是否包含某个元素
        boolean containsBanana = set.contains("Banana");
        System.out.println("Set 包含 Banana: " + containsBanana);

        // 删除一个元素
        set.remove("Orange");
        System.out.println("删除 Orange 后的 HashSet: " + set);
    }
}

运行结果:
HashSet 内容: [Apple, Orange, Banana]
Set 包含 Banana: true
删除 Orange 后的 HashSet: [Apple, Banana]

SortedSet接口

是一种特殊的Set类,其中元素是按照升序排列,还增加了与次序相关的操作,通常用于存放词汇表这样的内容,实现它的类有ConcurrentSkipListSet和TreeSet

eg-2

//此代码由AI生成
import java.util.SortedSet;
import java.util.TreeSet;

public class Main {
    public static void main(String[] args) {
        // 创建一个 SortedSet 实例(TreeSet)
        SortedSet<String> sortedSet = new TreeSet<>();

        // 添加元素到 SortedSet 中
        sortedSet.add("Orange");
        sortedSet.add("Apple");
        sortedSet.add("Banana");
        sortedSet.add("Grapes");

        // 输出 SortedSet 的内容,按字母顺序排序
        System.out.println("SortedSet 内容: " + sortedSet);

        // 获取第一个和最后一个元素
        String firstElement = sortedSet.first();
        String lastElement = sortedSet.last();
        System.out.println("第一个元素: " + firstElement);
        System.out.println("最后一个元素: " + lastElement);
    }
}

运行结果:
SortedSet 内容: [Apple, Banana, Grapes, Orange]
第一个元素: Apple
最后一个元素: Orange

List接口:线性表

线性表允许有重复元素;记录元素的保存顺序,每个元素都有一个index值(从0开始)标明元素在列表中的位置。
主要的实现类是ArrayList、LinkedList,以及早期的Vector

实现List接口的类:

  • ArrayList:一种类似数组的形式进行存储,因此它的随机访问速度极快
  • LinkedList:内部实现是链表,适合于在链表中间需要频繁进行插入和删除操作
  • 栈Stack:重要线性数据结构,遵循“后进先出”(Last In First Out,LIFO)原则
  • 其他 : AbstractList, AbstractSequentialList, AttributeList,CopyOnWriteArrayList, RoleList, RoleUnresolvedList

Queue接口

除了Collection 的基本操作,队列接口另外还有插入、移除和查看操作。队列遵循“先进先出”(First In First Out,FIFO)的原则固定在一端输入数据(称为入队),另一端输出数据(称为出队)。重要的实现是LinkedList类。

实现Queue接口的类

  • LinkedList:同时也实现了List,先进先出
  • PriorityQueue: 按元素值排序的队列
  • 其他:AbstractQueue, ArrayBlockingQueue, ArrayDeque, ConcurrentLinkedQueue, DelayQueue, LinkedBlockingDeque, LinkedBlockingQueue, PriorityBlockingQueue, SynchronousQueue

Map接口

Map接口的定义

用于维护键/值对(key/value pairs),不能有重复的关键字,每个关键字最多能够映射到一个值,声明时可以带有两个参数,即Map<K, V>,其中K表示关键字的类型,V表示值的类型,每一个Key不可重复并与唯一的Value值对应,在程序中可以通过K找到并访问唯一的V。重要实现类:HashMap类、TreeMap类

Map接口的方法

查询方法

  • int size() —— 返回Map中的元素个数
  • boolean isEmpty() —— 返回Map中是否包含元素,如不包括任何元素,则返回true
  • boolean containsKey(Object key) —— 判断给定的参数是否是Map中的一个关键字key)
  • boolean containsValue(Object val) —— 判断给定的参数是否是Map中的一个值(value)
  • Object get(Object key) —— 返回Map中与给定关键字相关联的值(value)
  • Collection values() —— 返回包含Map中所有值(value)的Collection对象
  • Set keySet() ——返回包含Map中所有关键字(key)的Set对象
  • Set entrySet() —— 返回包含Map中所有项的Set对象

修改方法

  • Object put(Object key, Object val) —— 将给定的关键字(key)/值(value)对加入到Map对象中。其中关键字(key)必须唯一,否则,新加入的值会取代Map对象中已有的值
  • void putAll(Map m) —— 将给定的参数Map中的所有项加入到接收者Map对象中
  • Object remove(Object key) —— 将关键字为给定参数的项从Map对象中删除
  • void clear() —— 从Map对象中删除所有的项

SortedMap接口

是Map的子接口;一种特殊的Map,其中的关键字是升序排列的;通常用于词典和电话目录等 。

PS:这些笔记是我个人所写,难免存在一些疏漏或错误。如果大家在阅读过程中发现任何问题,请不吝赐教,我将非常感激您的指正和谅解。如笔记内容涉及任何侵权问题,请及时与我联系,以便我尽快做出相应的删除处理。

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

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

相关文章

工业物联网网关在设备接入物联网中的核心作用

一、工业物联网网关的定义与功能 工业物联网网关是工业领域中的一种重要设备&#xff0c;它位于工业物联网系统的边缘位置&#xff0c;负责连接、管理和协调工业设备与云平台之间的通信。作为边缘计算的关键组件&#xff0c;工业物联网网关能够实现工业设备、传感器、PLC、DCS…

2024年第十三届”认证杯“数学中国数学建模国际赛(小美赛)

↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓

selinux和防火墙实验

1 、 selinux 的说明 SELinux 是 Security-Enhanced Linux 的缩写&#xff0c;意思是安全强化的 linux 。 SELinux 主要由美国国家安全局&#xff08; NSA &#xff09;开发&#xff0c;当初开发的目的是为了避免资源的误用。 系统资源都是通过程序进行访问的&#xff0c;如…

flink学习(12)——checkPoint

如何设置checkPoint package com.bigdata.day06;/** * 1、需要三句话 * 2、设置完checkPoint后若程序出现异常&#xff0c;会一直重启 * 3、此时是自动进行checkPoint保存 * 4、注意&#xff1a;此时如果有checkpoint ,是不会出现异常的&#xff0c;需要将checkpoint的代码关…

前端面试题-1(详解事件循环)

1.了解浏览器的进程模型 1.什么是进程&#xff1f; 程序运行需要有它自己专属的内存空间&#xff0c;可以把这块内存空间简单的理解为进程 每个应用至少有一个进程&#xff0c;进程之间相互独立&#xff0c;即使要通信&#xff0c;也需要双方同意。 2.什么是线程&#xff1f…

http的文件上传和下载原理

目录 一&#xff1a;上传 1&#xff1a;http请求格式 2&#xff1a;文件上传类型分析 1&#xff1a;md5秒传 2&#xff1a;分片上传 1. 什么是分片上传 2. 分片上传的场景 3&#xff1a;断点续传 1. 什么是断点续传 2. 应用场景 3. 实现断点续传的核心逻辑 4. 实现流…

【计算机视觉】图像基本操作

1. 数字图像表示 一幅尺寸为MN的图像可以用矩阵表示&#xff0c;每个矩阵元素代表一个像素&#xff0c;元素的值代表这个位置图像的亮度&#xff1b;其中&#xff0c;彩色图像使用3维矩阵MN3表示&#xff1b;对于图像显示来说&#xff0c;一般使用无符号8位整数来表示图像亮度&…

VSCode 下载 安装

VSCode【下载】【安装】【汉化】【配置C环境&#xff08;超快&#xff09;】&#xff08;Windows环境&#xff09;-CSDN博客 Download Visual Studio Code - Mac, Linux, Windowshttps://code.visualstudio.com/Downloadhttps://code.visualstudio.com/Download 注意&#xff0…

【Python入门】Python数据类型

文章一览 前言一、变量1.1.如何使用变量1.2.如何定义变量的名字&#xff08;标识符&#xff09; 二、数据类型2.1 整型数据2.2 浮点型数据2.3 布尔型&#xff08;bool&#xff09;数据2.4 复数型数据2.5 字符串类型1 > 字符串相加&#xff08;合并&#xff09;&#xff08;&…

算法基础 - 高斯牛顿法(曲线拟合)

文章目录 1. 高斯牛顿法发展历程2、问题的引出3、高斯牛顿法的前世3.1、一阶&#xff0c;二阶梯度法共有原理3.2、最速下降法&#xff08;一阶梯度法&#xff09;3.3、牛顿法&#xff08;二阶梯度法&#xff09; 4、高斯牛顿法4.1 高斯牛顿法的思想4.2 最小二乘问题4.3 高斯牛顿…

Vue+Element Plus实现自定义表单弹窗

目录 一、基本框架 1.父组件index.vue 2.子组件FormPop.vue 二、细节补充 1&#xff09;input、textarea、select、input number 2&#xff09;daterange、date、monthrange 3&#xff09;数据定义 4&#xff09;没改样式的效果 5&#xff09;最终效果 三、最终代码 …

VMware Workstation Pro下载安装及简单设置

VMware Workstation Pro下载 方法一&#xff1a;官网下载 https://support.broadcom.com/group/ecx/productdownloads?subfamilyVMwareWorkstationPro账号请自行注册&#xff0c;选择最新版本17.6.1 下载后用md5sum_x64.exe验证下载的文件完整性 方法二 百度网盘 通过网…

ospf协议(动态路由协议)

ospf基本概念 定义 OSPF 是典型的链路状态路由协议&#xff0c;是目前业内使用非常广泛的 IGP 协议之一。 目前针对 IPv4 协议使用的是 OSPF Version 2 &#xff08; RFC2328 &#xff09;&#xff1b;针对 IPv6 协议使用 OSPF Version 3 &#xff08; RFC2740 &#xff09;。…

数据结构之循环链表和栈

一、循环链表 1、概念 循环链表&#xff1a;就是首尾相连的链表&#xff0c;通过任意一个节点&#xff0c;都能将整个链表遍历一遍 分类&#xff1a;单向循环链表、双向循环链表 2、单向循环链表的类格式 单向循环链表也就是单向链表的最后一个节点的next域不再为None,而是…

linux安装部署mysql资料

安装虚拟机 等待检查完成 选择中文 软件选择 网络和主机名 开始安装 设置root密码 ADH-password 创建用户 等待安装完成 重启 接受许可证 Centos 7 64安装完成 安装mysql开始 Putty连接指定服务器 在 opt目录下新建download目录 将mysql文件传到该目录下 查看linux服务器的…

HTML 霓虹灯开关效果

HTML 霓虹灯开关效果 1.简介&#xff1a;该代码为纯html&#xff0c;CSS写在了内部&#xff0c;不需要额外引入&#xff0c;霓虹灯开关效果很漂亮&#xff0c;应用在个人物联网项目中是一个比较不错的选择。 2.运行效果&#xff1a; 3.源码&#xff1a; <!DOCTYPE html&g…

uniapp开发支付宝小程序自定义tabbar样式异常

解决方案&#xff1a; 这个问题应该是支付宝基础库的问题&#xff0c;除了依赖于官方更新之外&#xff0c;开发者可以利用《自定义 tabBar》曲线救国 也就是创建一个空内容的自定义tabBar&#xff0c;这样即使 tabBar 被渲染出来&#xff0c;但从视觉上也不会有问题 1.官方文…

24/11/26 视觉笔记 通过特征提取和透视变换查找对象

在本节中我们将检测和跟踪任意大小的对象&#xff0c;这些对象可能是在不同角度或者在部分遮挡的情况下观察到的。 为此我们将运用特征描述子&#xff08;Feature Descriptor&#xff09;&#xff0c;这是捕获感兴趣对象的重要属性的一种方式。我们这样是为了即使将对象嵌入繁…

【单片机毕业设计12-基于stm32c8t6的智能称重系统设计】

【单片机毕业设计12-基于stm32c8t6的智能称重系统设计】 前言一、功能介绍二、硬件部分三、软件部分总结 前言 &#x1f525;这里是小殷学长&#xff0c;单片机毕业设计篇12-基于stm32c8t6的智能称重系统设计 &#x1f9ff;创作不易&#xff0c;拒绝白嫖可私 一、功能介绍 ----…

ubuntu中使用ffmpeg和nginx推http hls视频流

视频流除了rtmp、rtsp&#xff0c;还有一种是http的hls流&#xff0c;使用http协议传输hls格式的视频数据。 nginx支持推送hls视频流&#xff0c;使用的是rtmp模块&#xff0c;即rtmp流推送成功了&#xff0c;hls流也没问题。怎么推送rtmp流&#xff0c;请参考我的文章&#x…