Java集合框架之LinkedHashSet类解读

 更新时间:2023年09月04日 10:27:24   作者:@六便士  
这篇文章主要介绍了Java集合框架之LinkedHashSet类解读,LinkedHashSet是HashSet的有序版本,它跨所有元素维护一个双向链接的List,当需要维护迭代顺序时,就使用这个类,当遍历HashSet时,顺序是不可预测的,需要的朋友可以参考下

一、LinkedHashSet 类的介绍

LinkedHashSet是HashSet的 有序版本 ,它跨所有元素维护一个双向链接的List。

  • 当需要 维护迭代顺序时 ,就使用这个类。
  • 当遍历HashSet时,顺序是不可预测的,而LinkedHashSet允许我们按插入元素的顺序遍历元素。
  • 当使用迭代器循环使用LinkedHashSet时,元素将按插入的顺序返回。

LinkedHashSet的层次结构如下:

在这里插入图片描述

LinkedHashSet类声明:

public class LinkedHashSet<E> extends HashSet<E> implements Set<E>, Cloneable, Serializable  

LinkedHashSet类的要点如下:

  • LinkedHashSet类只包含HashSet这样的唯一元素。
  • LinkedHashSet类提供了所有可选的集操作,并允许有空元素。
  • LinkedHashSet类是非同步的。
  • LinkedHashSet类维护插入顺序。

Java LinkedHashSet类的构造函数

ConstructorDescription
HashSet()它用于构造一个默认的HashSet。
HashSet(Collection c)它使用集合c中的元素来初始化散列集。
LinkedHashSet(int capacity)它用于将链接哈希集的容量初始化为给定的整数值容量。
LinkedHashSet(int capacity, float fillRatio)它用于根据其参数初始化散列集的容量和填充比例(也称为负载容量)。

 二、LinkedHashSet 类的操作

在LinkedHashSet类上执行各种操作

2.1 添加操作

为了向LinkedHashSet添加元素,可以使用add()方法。

这与HashSet不同,因为在HashSet中,插入顺序不保留,而是保留在LinkedHashSet中。

    public static void main(String[] args) {
        // 创建
        LinkedHashSet<String> hs = new LinkedHashSet<String>();
        // 添加元素
        // 插入是有序的
        hs.add("深圳");
        hs.add("广州");
        hs.add("东莞");
        // 输出
        System.out.println("LinkedHashSet : " + hs);
    }

输出:

LinkedHashSet : [深圳, 广州, 东莞]

2.2 删除操作

可以使用remove()方法从LinkedHashSet中删除这些值。

实例:

    public static void main(String[] args) {
        // 创建
        LinkedHashSet<String> hs = new LinkedHashSet<String>();
        // 添加元素
        // 插入是有序的
        hs.add("深圳");
        hs.add("广州");
        hs.add("东莞");
        // 输出
        System.out.println("LinkedHashSet : " + hs);
        // 删除 元素: 深圳
        hs.remove("广州");
        System.out.println("删除后的集合:"+hs);
    }

输出:

LinkedHashSet : [深圳, 广州, 东莞]
删除后的集合:[深圳, 东莞]

2.3 迭代操作

使用iterator()方法迭代LinkedHashSet的元素。

最著名的方法是使用增强的for循环。

实例:

    public static void main(String[] args) {
        // 创建
        LinkedHashSet<String> hs = new LinkedHashSet<String>();
        // 添加元素
        // 插入是有序的
        hs.add("深圳");
        hs.add("广州");
        hs.add("东莞");
        // 输出
        System.out.println("LinkedHashSet : " + hs);
        // 使用迭代器
        Iterator itr = hs.iterator();
        while (itr.hasNext())
            System.out.print(itr.next() + ", ");
        // 换行
        System.out.println();
        // 使用 for-each
        for (String s : hs)
            System.out.print(s + ", ");
        System.out.println();
    }

输出:

LinkedHashSet : [深圳, 广州, 东莞]
深圳, 广州, 东莞, 
深圳, 广州, 东莞, 

三、LinkedHashSet 类的API

在类java.util.AbstractSet中声明的方法

METHODDESCRIPTION
equals()用于验证对象与HashSet是否相等并比较它们。只有当两个HashSet都包含相同的元素时,该列表才会返回true,无论顺序如何。
hashcode()返回此集合的散列代码值。
removeAll(collection)此方法用于删除集合中存在于集合中的所有元素。如果该集合因调用而发生更改,则此方法返回true。

在类java.util.AbstractCollection中声明的方法

METHODDESCRIPTION
addAll(collection)此方法用于将上述集合中的所有元素追加到现有集合。元素是随机添加的,不遵循任何特定的顺序。
containsAll(collection)此方法用于检查集合是否包含给定集合中的所有元素。如果集合包含所有元素,则该方法返回true;如果缺少任何元素,则返回false。
retainAll(collection)此方法用于保留集合中给定集合中提到的所有元素。如果该集合因调用而发生更改,则此方法返回true。
toArray()此方法用于形成与Set的相同元素的数组。
toString()Java HashSet的toString()方法用于返回HashSet集合元素的字符串表示形式。

接口java.util.Collection中声明的方法

METHODDESCRIPTION
parallelStream()返回一个可能并行的流,并将此集合作为其源。
removeIf(Predicate<? super E> filter)删除此集合中满足给定谓词的所有元素。
stream()返回一个序列流,并将此集合作为其源。

在类java.util.HashSet中声明的方法

METHODDESCRIPTION
add(E e)用于添加指定的元素,如果该元素不存在,则返回false。
clear()用于从集合中删除所有元素。
contains(Object o)用于当元素在set中出现时返回true。
remove(Object o)用于删除集合中存在的元素。
iterator()用于返回一个遍历集合中元素的迭代器。
isEmpty()用于检查集合是否为空。如果为空则返回true,如果set的条件非空则返回false。
size()用于返回集合的大小。
clone()用于创建该集合的浅副本。

接口java.lang.Iterable中声明的方法

METHODDESCRIPTION
forEach(Consumer action)对Iterable中的每个元素执行给定的操作,直到所有元素都被处理完或该操作引发异常。

到此这篇关于Java集合框架之LinkedHashSet类解读的文章就介绍到这了,更多相关Java集合LinkedHashSet内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 30分钟入门Java8之lambda表达式学习

    30分钟入门Java8之lambda表达式学习

    本篇文章主要介绍了30分钟入门Java8之lambda表达式学习,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • Java LocalDateTime获取时间信息、格式化、转换为数字时间戳代码示例

    Java LocalDateTime获取时间信息、格式化、转换为数字时间戳代码示例

    其实我们在Java项目中对日期进行格式化,主要是利用一些日期格式化类,下面这篇文章主要给大家介绍了关于Java LocalDateTime获取时间信息、格式化、转换为数字时间戳的相关资料,需要的朋友可以参考下
    2023-11-11
  • Java 常量池详解之class文件常量池 和class运行时常量池

    Java 常量池详解之class文件常量池 和class运行时常量池

    这篇文章主要介绍了Java 常量池详解之class文件常量池 和class运行时常量池,常量池主要存放两大类常量:字面量,符号引用,本文结合示例代码对java class常量池相关知识介绍的非常详细,需要的朋友可以参考下
    2022-12-12
  • SpringBoot3整合SpringDoc实现在线接口文档的详细过程

    SpringBoot3整合SpringDoc实现在线接口文档的详细过程

    这篇文章主要介绍了SpringBoot3整合SpringDoc实现在线接口文档的详细过程,本文通过示例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-06-06
  • SpringBoot配置Druid数据监控代码实例

    SpringBoot配置Druid数据监控代码实例

    这篇文章主要介绍了SpringBoot配置Druid数据监控代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • vue 使用vuex在页面跳转的实现方式

    vue 使用vuex在页面跳转的实现方式

    这篇文章主要介绍了vue 使用vuex在页面跳转的实现方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • Java 实战练手项目之校园超市管理系统的实现流程

    Java 实战练手项目之校园超市管理系统的实现流程

    读万卷书不如行万里路,只学书上的理论是远远不够的,只有在实战中才能获得能力的提升,本篇文章手把手带你用java+SSM+Mysql+Maven+Bootstrap实现一个校园超市管理系统,大家可以在过程中查缺补漏,提升水平
    2021-11-11
  • Springcloud+Mybatis使用多数据源的四种方式(小结)

    Springcloud+Mybatis使用多数据源的四种方式(小结)

    这篇文章主要介绍了Springcloud+Mybatis使用多数据源的四种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • spring+maven实现邮件发送

    spring+maven实现邮件发送

    这篇文章主要为大家详细介绍了spring+maven实现邮件发送,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • Java跨域问题的处理详解

    Java跨域问题的处理详解

    这篇文章主要给大家介绍了关于Java跨域问题处理的相关资料,文中介绍的非常详细,相信对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
    2017-03-03

最新评论