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

文章目录

主要接口

集合框架的主要接口

声明了对各种集合类型执行的一般操作

包括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

调用接口

java 复制代码
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接口的使用举例

java 复制代码
//此代码由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

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

相关推荐
邓熙榆1 分钟前
Logo语言的网络编程
开发语言·后端·golang
graceyun4 分钟前
C语言进阶习题【1】指针和数组(4)——指针笔试题3
android·java·c语言
我科绝伦(Huanhuan Zhou)9 分钟前
Linux 系统服务开机自启动指导手册
java·linux·服务器
旦沐已成舟1 小时前
K8S-Pod的环境变量,重启策略,数据持久化,资源限制
java·docker·kubernetes
S-X-S1 小时前
项目集成ELK
java·开发语言·elk
Ting-yu1 小时前
项目实战--网页五子棋(游戏大厅)(3)
java·java-ee·maven·intellij-idea
Johaden2 小时前
EXCEL+Python搞定数据处理(第一部分:Python入门-第2章:开发环境)
开发语言·vscode·python·conda·excel
ByteBlossom6666 小时前
MDX语言的语法糖
开发语言·后端·golang
程序研6 小时前
JAVA之外观模式
java·设计模式
计算机学姐6 小时前
基于微信小程序的驾校预约小程序
java·vue.js·spring boot·后端·spring·微信小程序·小程序