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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring Boot Actuator未授权访问漏洞的问题解决

    Spring Boot Actuator未授权访问漏洞的问题解决

    Spring Boot Actuator 端点的未授权访问漏洞是一个安全性问题,可能会导致未经授权的用户访问敏感的应用程序信息,本文就来介绍一下解决方法,感兴趣的可以了解一下
    2023-09-09
  • 解决java错误:不支持发行版本5

    解决java错误:不支持发行版本5

    这篇文章主要给大家介绍了关于如何解决java错误:不支持发行版本5的相关资料,发行版本5是Java5,已经是十多年前的版本了,现在已经不再被支持,需要的朋友可以参考下
    2023-07-07
  • SpringBoot进行Web开发的实现

    SpringBoot进行Web开发的实现

    Spring Boot让我们可以快速构建项目并运行web应用,大大简化了Spring的复杂配置,本文主要介绍了SpringBoot进行Web开发的实现,感兴趣的可以了解一下
    2023-10-10
  • java调用微信接口实现网页分享小功能

    java调用微信接口实现网页分享小功能

    这篇文章主要为大家详细介绍了java调用微信接口实现网页分享小功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-04-04
  • SpringBoot实现任意位置获取HttpServletRequest对象

    SpringBoot实现任意位置获取HttpServletRequest对象

    这篇文章主要介绍了SpringBoot实现任意位置获取HttpServletRequest对象,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • 解决swagger2中@ApiResponse的response不起作用

    解决swagger2中@ApiResponse的response不起作用

    这篇文章主要介绍了解决swagger2中@ApiResponse的response不起作用问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • Java TimedCache 带时间缓存工具类详解使用

    Java TimedCache 带时间缓存工具类详解使用

    工具类是包含集合框架、遗留的 collection 类、事件模型、日期和时间设施、国际化和各种实用工具类(字符串标记生成器、随机数生成器和位数组、日期Date类、堆栈Stack类、向量Vector类等)。集合类、时间处理模式、日期工具等各类常用工具包,本文将介绍带时间缓存工具类
    2021-10-10
  • Java中单例模式的七种写法示例

    Java中单例模式的七种写法示例

    作为一个Java开发者,也许你觉得自己对单例模式的了解已经足够多了,但究竟你自己了解的程度到底怎样呢?下面这篇文章主要给大家介绍了关于Java中单例模式的七种写法,需要的朋友可以参考下
    2021-09-09
  • 实例分析java对象中浅克隆和深克隆

    实例分析java对象中浅克隆和深克隆

    在本篇文章中我们给大家分享了关于java对象中浅克隆和深克隆的相关知识点和相关代码内容,有兴趣的朋友们学习下。
    2018-10-10
  • Java 读写Properties配置文件详解

    Java 读写Properties配置文件详解

    这篇文章主要介绍了Java 读写Properties配置文件详解的相关资料,这里举例说明该如何实现,具有参考价值,需要的朋友可以参考下
    2016-11-11

最新评论