当前位置: 首页 > article >正文

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

文章目录

  • 主要接口
    • 集合框架的主要接口
    • 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.kler.cn/a/414796.html

相关文章:

  • torch.is_nonzero(input)
  • 如何为 ext2/ext3/ext4 文件系统的 /dev/centos/root 增加 800G 空间
  • 28.UE5实现对话系统
  • CentOS Docker 安装
  • 极狐GitLab 17.6 正式发布几十项与 DevSecOps 相关的功能【四】
  • 数据结构——排序算法第二幕(交换排序:冒泡排序、快速排序(三种版本) 归并排序:归并排序(分治))超详细!!!!
  • java charAt()返回数值型 详解
  • python之Flask入门—路由参数
  • 从数据孤岛到数据协同:企业如何构建安全的数据共享生态?
  • php 导出excel 带图片
  • 基于Matlab的图像去噪算法仿真
  • 用 llama.cpp 体验 Meta 的 Llama AI 模型
  • 软件工程头歌实训作业:Junit实训入门篇
  • 一个高效的Java对象映射库Orika
  • SpringBoot 接口加密SM2非对称加密算法 国密算法 公钥加密 私钥解密
  • 使用Alpine镜像作为基础镜像的Dockerfile配置
  • 154. tweenjs相机运动动画
  • sqlmap使用过程中的每个步骤及其相关命令
  • 3D格式转换工具HOOPS Exchange如何保证不同CAD数据准确性和一致性?
  • js:函数
  • 【Db First】.NET开源 ORM 框架 SqlSugar 系列
  • Github 2024-11-28 Go开源项目日报Top10
  • pyspark实现基于协同过滤的电影推荐系统
  • MQ高级2:MQ的可靠性
  • 鸿蒙开发-在ArkTS中制作音乐播放器
  • GDPU Android移动应用 数据存储