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

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日

相关文章

  • 学习python 的while循环嵌套

    学习Python的while循环嵌套攻略 在Python中,while循环嵌套是一种重复执行代码块的结构。它允许我们在一个while循环内部嵌套另一个while循环,以实现更复杂的逻辑和控制流程。下面是学习Python的while循环嵌套的完整攻略。 1. 基本语法 while循环嵌套的基本语法如下: while condition1: # 代码块1 whi…

    other 2023年7月27日
    00
  • 逆水寒卡登陆怎么办 卡在登陆界面解决方法介绍

    逆水寒卡登陆怎么办:卡在登陆界面解决方法介绍 当您在尝试登录逆水寒时,可能会遇到卡在登陆界面的问题。这种问题可能是由于服务器负载高、网络连接问题或客户端错误等原因引起的。下面介绍一些解决方法以帮助您尽快解决这个问题。 方法1:检查网络连接 首先请确保您的网络连接稳定,没有丢包或延迟过高的情况。您可以尝试打开网站或使用其他应用程序测试网络连接,如果其他应用程序…

    other 2023年6月27日
    00
  • Shell中处理包含空格的文件名实例

    处理包含空格的文件名,在 Shell 中常见的方法有以下几种: 1. 使用引号包含文件名 在使用包含空格的文件名时,我们可以使用引号将文件名括起来,例如: $ cd "my folder" 这样 shell 就会将 “my folder” 当作一个整体来处理,而不是将其分为两个不同的部分。 2. 使用转义字符 另一种处理包含空格的文件名的…

    other 2023年6月26日
    00
  • 关于python:int的最大值和最小值

    以下是关于“关于Python:int的最大值和最小值”的完整攻略,包含两个示例。 关于Python:int的最大值和最小值 在Python中,整数类型int的最大值和最小值取决于所使用的平台和版本。在Python3中,整数类型int的最大值和最小值可以使用sys模块中的maxsize和minsize属性来获取。以下是关于获取int的大值和最小值的详细攻略。 …

    other 2023年5月9日
    00
  • MySQL中使用innobackupex、xtrabackup进行大数据的备份和还原教程

    MySQL中使用innobackupex、xtrabackup进行大数据的备份和还原教程 1. 安装innobackupex/xtrabackup工具 首先,需要安装innobackupex或xtrabackup工具,这是用于备份和还原MySQL数据库的工具。可以通过以下命令安装: # 使用yum安装 sudo yum install -y innoback…

    other 2023年10月18日
    00
  • Android实现文字垂直滚动、纵向走马灯效果的实现方式汇总

    当实现Android中的文字垂直滚动和纵向走马灯效果时,可以采用以下两种方式: 方式一:使用TextView和属性动画实现垂直滚动效果 首先,在XML布局文件中添加一个TextView控件,用于显示滚动的文字。设置TextView的高度为固定值,以限制显示的行数。例如: <TextView android:id=\"@+id/scrollin…

    other 2023年8月20日
    00
  • PostgreSQL教程(十五):系统表详解

    下面我将为您详细讲解“PostgreSQL教程(十五):系统表详解”的完整攻略。 PostgreSQL教程(十五):系统表详解 在PostgreSQL中,有许多系统表可以查询以获得关于数据库、表、索引、用户等各种信息。这些系统表中的大部分都存储在PostgreSQL的元数据中。 1. pg_database pg_database表包含了数据库的所有信息,包…

    other 2023年6月26日
    00
  • Android Studio配置内嵌JDK的方法

    以下是Android Studio配置内嵌JDK的方法的完整攻略: 首先,打开Android Studio,并进入“File”(文件)菜单。 在菜单中选择“Project Structure”(项目结构)选项。 在弹出的窗口中,选择“SDK Location”(SDK位置)选项卡。 在“JDK Location”(JDK位置)下方,点击“…”按钮。 在弹…

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