Java Set集合及其子类HashSet与LinkedHashSet详解

yizhihongxing

Java Set集合及其子类HashSet与LinkedHashSet详解

Java中的Set是一种集合类,它不能包含重复元素。Java的Set集合有两个主要的实现类:HashSet和LinkedHashSet。

HashSet

HashSet是基于哈希表实现的Set集合。当我们向HashSet中添加元素时,HashSet首先使用元素的hashCode生成对应的哈希值,然后将这个值对应的桶上添加元素。当我们需要从HashSet中查找元素时,HashSet会根据要查找元素的哈希码值,找到对应的桶,然后在这个桶上线性查找要查找的元素。

示例1:HashSet的使用

import java.util.*;

public class HashSetExample {
    public static void main(String[] args) {
        Set<String> set = new HashSet<>();
        set.add("apple");
        set.add("banana");
        set.add("orange");
        set.add("banana"); // 重复元素不会被添加
        System.out.println(set);
        System.out.println(set.contains("apple"));
        System.out.println(set.contains("grape"));
        set.remove("orange");
        System.out.println(set);
    }
}

输出结果:

[banana, orange, apple]
true
false
[banana, apple]

LinkedHashSet

LinkedHashSet是基于哈希表实现的Set集合,除了具有HashSet的特点外,还可以按照元素的插入顺序进行迭代。它通过使用双向链表维护元素之间的插入顺序,所以LinkedHashSet可以记录添加元素的顺序,从而支持按照插入顺序进行迭代。

示例2:LinkedHashSet的使用

import java.util.*;

public class LinkedHashSetExample {
    public static void main(String[] args) {
        Set<String> set = new LinkedHashSet<>();
        set.add("apple");
        set.add("banana");
        set.add("orange");
        set.add("banana");
        System.out.println(set);
        System.out.println(set.contains("apple"));
        System.out.println(set.contains("grape"));
        set.remove("orange");
        System.out.println(set);
    }
}

输出结果:

[apple, banana, orange]
true
false
[apple, banana]

总结

HashSet和LinkedHashSet的区别在于,LinkedHashSet是可以按照插入顺序迭代的,并且它的添加、删除、查找操作的时间复杂度在平均意义下都是常数级别的,即O(1)。而其它的Set集合类,如TreeSet,是按照元素的比较结果进行排序的,添加、删除、查找操作的时间复杂度是O(log n),其中n是元素的个数。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java Set集合及其子类HashSet与LinkedHashSet详解 - Python技术站

(0)
上一篇 2023年6月26日
下一篇 2023年6月26日

相关文章

  • burpsuite的使用(一)

    BurpSuite的使用(一) BurpSuite是一款常用的Web应用安全测试工具,同时也是将安全问题演示给开发者、渗透测试人员等人员的必备工具之一。本文将介绍BurpSuite的基本使用方法:如何使用代理拦截请求,发送请求并对响应进行分析等操作。 下载与安装 BurpSuite官方网站:https://portswigger.net/burp/commu…

    其他 2023年3月28日
    00
  • Vue实现嵌套菜单组件

    Vue实现嵌套菜单组件攻略 1. 创建菜单组件 首先,我们需要创建一个菜单组件,用于显示菜单项和处理点击事件。可以使用Vue的单文件组件(.vue)来创建菜单组件。 <template> <ul> <li v-for=\"item in menuItems\" :key=\"item.id\&quo…

    other 2023年7月28日
    00
  • crontab每小时运行一次(转)

    crontab每小时运行一次(转) 作为一个网站站长,我们需要经常执行一些脚本或者程序来保证我们的网站能够正常运行。在这个过程中,我们通常会使用到Linux系统的计划任务工具-crontab来实现自动化。 在这篇文章中,我们将介绍如何使用crontab每小时运行一次来执行一个脚本。 什么是crontab Crontab是一种计划任务管理器,它可以在指定的时间…

    其他 2023年3月29日
    00
  • Win8怎么恢复系统 轻松重装Win8系统的方法(图文教程)

    Win8系统恢复与重装完整攻略 恢复系统 在某些情况下,我们可能需要恢复Win8系统到之前某一个时间点的状态,这时候就需要使用Win8自带的恢复工具。具体操作如下: 打开“控制面板”,点击“系统和安全”选项。 在“系统和安全”界面中,点击“文件历史记录”选项。 在“文件历史记录”界面中,点击“恢复个人文件”选项。 接下来会弹出“恢复文件”窗口,按照提示选择需…

    other 2023年6月20日
    00
  • springboot启动时如何指定spring.profiles.active

    要指定Spring Boot启动时使用哪个application.properties文件中的配置,可以使用spring.profiles.active属性。这个属性的值可以是”dev”、”test”、”prod”中的任意一个,我们需要创建不同的配置文件来放置不同环境的属性。 下面是指定spring.profiles.active属性的完整攻略: 1.在ap…

    other 2023年6月27日
    00
  • mysql如何将一个字段赋值给另一个字段

    将一个字段的值赋给另一个字段可以使用MySQL中的UPDATE语句。下面是详细的攻略: 利用UPDATE语句将一个字段赋值给另一个字段 使用UPDATE语句可以将一个字段的值赋给另一个字段,语法如下: UPDATE table_name SET column_name1 = column_name2 WHERE condition; 其中table_name…

    other 2023年6月25日
    00
  • Android基础入门之dataBinding的简单使用教程

    Android基础入门之dataBinding的简单使用教程 什么是dataBinding? dataBinding是Android开发中的一个功能强大的库,它允许您以声明性的方式将布局文件中的视图与数据绑定在一起。通过使用dataBinding,您可以减少手动编写繁琐的findViewById代码,并且可以更轻松地在视图和数据之间进行双向绑定。 如何使用d…

    other 2023年8月21日
    00
  • vue cli4下环境变量和模式示例详解

    Vue-cli4环境变量和模式示例详解 环境变量介绍 在我们日常开发中,我们经常会需要在单个代码库中支持多个部署环境,比如开发环境、测试环境、预发环境和生产环境。而在不同的部署环境下,我们经常需要对不同环境进行不同的配置,比如服务器地址,接口路径等。Vue-cli4提供了灵活的方式,使我们能够对这些不同的环境进行不同的配置。 简单来说,Vue-cli4 中的…

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部