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日

相关文章

  • javs运算符及选择语句结构

    以下是关于Java运算符及选择语句结构的完整攻略,包括定义、使用方法、示例说明和注意事项。 Java运算符 Java运算符是用于执行种操作的符号。Java中的运算符分为以下几类: 算术运算符 关系运算符 逻辑运符 位运算符 赋值运算符 其他运算符 算术运算符 Java中的算术运算包括加、减、乘、除、取模和自增自减运算符。以下是Java中的算术运算符: 运算符…

    other 2023年5月8日
    00
  • vue注册组件的几种方式总结

    下面详细讲解关于Vue注册组件的几种方式总结: 1. 全局注册 全局注册的方式是指在Vue实例之前,使用Vue.component()的方法将组件注册为全局组件,从而在整个应用内都可以使用这个组件。 // 引入Vue.js import Vue from ‘vue’ // 注册全局组件 Vue.component(‘my-component’, { //..…

    other 2023年6月27日
    00
  • JS 加载性能Tree Shaking优化详解

    下面是关于JS加载性能Tree Shaking优化的详细攻略。 一、什么是Tree Shaking Tree Shaking是指编译器在打包时去除无用的代码,使打包出来的文件更小更易于传输。在JavaScript中,Tree Shaking通常用于移除未被使用的模块中的导出(export)。 Tree Shaking利用了ES6的模块化规范中所有的导入(im…

    other 2023年6月25日
    00
  • CSS三大特性继承性、层叠性和优先级详解

    CSS三大特性继承性、层叠性和优先级详解 1. 继承性(Inheritance) 继承性指的是在CSS中,子元素可以继承父元素的某些样式属性。这意味着,如果我们为父元素设置了一些样式属性,子元素将默认继承这些属性,除非子元素显式地重写了这些属性。 示例1:HTML结构 <div class="parent"> <p&gt…

    other 2023年6月28日
    00
  • Java之单链表问题解决案例讲解

    Java之单链表问题解决案例讲解 前言 单链表是数据结构中常见的一种线性表,也是Java面试经常考察的内容之一。掌握单链表的基本操作对于程序员来说非常重要。本文中,我们将通过一个具体的案例,详细讲解如何解决单链表问题。 案例背景 假设我们需要编写一个程序,模拟一个员工信息的管理系统。这个员工信息需要包含姓名、年龄、性别、电话等信息。我们可以使用单链表来存储这…

    other 2023年6月27日
    00
  • 关于spring:无法执行目标org.codehaus.mojoexec-maven

    下面是关于“关于spring:无法执行目标org.codehaus.mojoexec-maven”的完整攻略: 1. 问题描述 在使用 Spring 框架时,有时会出现以下信息: [ERROR] Failed to execute goal org.codehaus.mojo:exec-m-plugin:16.0:exec (default-cli) on …

    other 2023年5月7日
    00
  • python交互模式下输入换行/输入多行命令的方法

    当使用Python交互模式时,输入一次命令后回车会直接执行该命令。如果要输入多个命令或代码,则需要换行或者输入多行命令。 输入多行命令的方法 1. 使用三重引号字符串 当需要输入多行字符串时,可以使用三重引号字符串。在Python交互模式中,输入三个引号(单引号或双引号都可以)时,Python将自动进入多行输入模式,直到输入连续三个引号结束输入。示例代码如下…

    other 2023年6月26日
    00
  • mysql查询字段类型为json时的两种查询方式

    当MySQL的字段类型为JSON类型时,可以使用两种不同的方式进行查询。下面详细讲解这两种查询方式的使用方法: 1. 使用箭头符号(->)查询JSON字段 使用箭头符号可以查询JSON对象中的某个属性的值。具体方法如下: SELECT json_column->"$.key" FROM table_name WHERE con…

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