亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> java

精通 Java LinkedHashSet:特性、方法与实战示例

Java LinkedHashSet

本教程通过示例讲解 Java LinkedHashSet 类及其方法。

Java 集合框架中的 LinkedHashSet 类结合了哈希表与链表数据结构的功能。

它实现 Set 接口。

精通 Java LinkedHashSet:特性、方法与实战示例

LinkedHashSet 元素存储在类似 HashSet 的哈希表中。

但 LinkedHashSet 内部维护双向链表,链表定义了元素在哈希表中的插入顺序。


创建 LinkedHashSet

先导入 java.util.LinkedHashSet 包。

导入后,可按如下方式创建:

// 容量 8、负载因子 0.75 的 LinkedHashSet
LinkedHashSet<Integer> numbers = new LinkedHashSet<>(8, 0.75);

此处创建名为 numbers 的 LinkedHashSet。

注意 new LinkedHashSet<>(8, 0.75)。第一个参数为 capacity,第二个为 loadFactor。

默认容量与负载因子

也可不指定容量和负载因子创建:

// 默认容量和负载因子的 LinkedHashSet
LinkedHashSet<Integer> numbers1 = new LinkedHashSet<>();

默认值:


从其他集合创建 LinkedHashSet

以下演示如何创建包含其他集合所有元素的 LinkedHashSet。

import java.util.LinkedHashSet;
import java.util.ArrayList;
class Main {
    public static void main(String[] args) {
        // 创建偶数 ArrayList
        ArrayList<Integer> evenNumbers = new ArrayList<>();
        evenNumbers.add(2);
        evenNumbers.add(4);
        System.out.println("ArrayList: " + evenNumbers);
        // 从 ArrayList 创建 LinkedHashSet
        LinkedHashSet<Integer> numbers = new LinkedHashSet<>(evenNumbers);
        System.out.println("LinkedHashSet: " + numbers);
    }
}

输出

ArrayList: [2, 4]
LinkedHashSet: [2, 4]

LinkedHashSet 的方法

LinkedHashSet 类提供多种操作方法。


向 LinkedHashSet 插入元素

示例:

import java.util.LinkedHashSet;
class Main {
    public static void main(String[] args) {
        LinkedHashSet<Integer> evenNumber = new LinkedHashSet<>();
        // 使用 add()
        evenNumber.add(2);
        evenNumber.add(4);
        evenNumber.add(6);
        System.out.println("LinkedHashSet: " + evenNumber);
        LinkedHashSet<Integer> numbers = new LinkedHashSet<>();
        // 使用 addAll()
        numbers.addAll(evenNumber);
        numbers.add(5);
        System.out.println("新 LinkedHashSet: " + numbers);
    }
}

输出

LinkedHashSet: [2, 4, 6]
新 LinkedHashSet: [2, 4, 6, 5]

访问 LinkedHashSet 元素

可用 iterator() 方法访问元素。需导入 java.util.Iterator。示例:

import java.util.LinkedHashSet;
import java.util.Iterator;
class Main {
    public static void main(String[] args) {
        LinkedHashSet<Integer> numbers = new LinkedHashSet<>();
        numbers.add(2);
        numbers.add(5);
        numbers.add(6);
        System.out.println("LinkedHashSet: " + numbers);
        // 调用 iterator()
        Iterator<Integer> iterate = numbers.iterator();
        System.out.print("LinkedHashSet 迭代: ");
        // 访问元素
        while(iterate.hasNext()) {
            System.out.print(iterate.next());
            System.out.print(", ");
        }
    }
}

输出

LinkedHashSet: [2, 5, 6]
LinkedHashSet 迭代: 2, 5, 6,

注意:


从 LinkedHashSet 移除元素

示例:

import java.util.LinkedHashSet;
class Main {
    public static void main(String[] args) {
        LinkedHashSet<Integer> numbers = new LinkedHashSet<>();
        numbers.add(2);
        numbers.add(5);
        numbers.add(6);
        System.out.println("LinkedHashSet: " + numbers);
        // 使用 remove()
        boolean value1 = numbers.remove(5);
        System.out.println("5 是否移除? " + value1);
        boolean value2 = numbers.removeAll(numbers);
        System.out.println("所有元素是否移除? " + value2);
    }
}

输出

LinkedHashSet: [2, 5, 6]
5 是否移除? true
所有元素是否移除? true

集合运算

LinkedHashSet 的各种方法也可用于集合运算。


并集

两集合并集用 addAll()。示例:

import java.util.LinkedHashSet;
class Main {
    public static void main(String[] args) {
        LinkedHashSet<Integer> evenNumbers = new LinkedHashSet<>();
        evenNumbers.add(2);
        evenNumbers.add(4);
        System.out.println("LinkedHashSet1: " + evenNumbers);
        LinkedHashSet<Integer> numbers = new LinkedHashSet<>();
        numbers.add(1);
        numbers.add(3);
        System.out.println("LinkedHashSet2: " + numbers);
        // 两集合并集
        numbers.addAll(evenNumbers);
        System.out.println("并集: " + numbers);
    }
}

输出

LinkedHashSet1: [2, 4]
LinkedHashSet2: [1, 3]
并集: [1, 3, 2, 4]

交集

两集合交集用 retainAll()。示例:

import java.util.LinkedHashSet;
class Main {
    public static void main(String[] args) {
        LinkedHashSet<Integer> primeNumbers = new LinkedHashSet<>();
        primeNumbers.add(2);
        primeNumbers.add(3);
        System.out.println("LinkedHashSet1: " + primeNumbers);
        LinkedHashSet<Integer> evenNumbers = new LinkedHashSet<>();
        evenNumbers.add(2);
        evenNumbers.add(4);
        System.out.println("LinkedHashSet2: " + evenNumbers);
        // 两集合交集
        evenNumbers.retainAll(primeNumbers);
        System.out.println("交集: " + evenNumbers);
    }
}

输出

LinkedHashSet1: [2, 3]
LinkedHashSet2: [2, 4]
交集: [2]

差集

两集合差集用 removeAll()。示例:

import java.util.LinkedHashSet;
class Main {
    public static void main(String[] args) {
        LinkedHashSet<Integer> primeNumbers = new LinkedHashSet<>();
        primeNumbers.add(2);
        primeNumbers.add(3);
        primeNumbers.add(5);
        System.out.println("LinkedHashSet1: " + primeNumbers);
        LinkedHashSet<Integer> oddNumbers = new LinkedHashSet<>();
        oddNumbers.add(1);
        oddNumbers.add(3);
        oddNumbers.add(5);
        System.out.println("LinkedHashSet2: " + oddNumbers);
        // LinkedHashSet1 与 LinkedHashSet2 差集
        primeNumbers.removeAll(oddNumbers);
        System.out.println("差集: " + primeNumbers);
    }
}

输出

LinkedHashSet1: [2, 3, 5]
LinkedHashSet2: [1, 3, 5]
差集: [2]

子集

判断一个集合是否为另一个集合的子集,用 containsAll()。示例:

import java.util.LinkedHashSet;
class Main {
    public static void main(String[] args) {
        LinkedHashSet<Integer> numbers = new LinkedHashSet<>();
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);
        numbers.add(4);
        System.out.println("LinkedHashSet1: " + numbers);
        LinkedHashSet<Integer> primeNumbers = new LinkedHashSet<>();
        primeNumbers.add(2);
        primeNumbers.add(3);
        System.out.println("LinkedHashSet2: " + primeNumbers);
        // 检查 primeNumbers 是否为 numbers 子集
        boolean result = numbers.containsAll(primeNumbers);
        System.out.println("LinkedHashSet2 是否为 LinkedHashSet1 子集? " + result);
    }
}

输出

LinkedHashSet1: [1, 2, 3, 4]
LinkedHashSet2: [2, 3]
LinkedHashSet2 是否为 LinkedHashSet1 子集? true

LinkedHashSet 的其他方法

方法说明
clone()创建 LinkedHashSet 副本
contains()搜索指定元素,返回布尔结果
isEmpty()检查 LinkedHashSet 是否为空
size()返回 LinkedHashSet 大小
clear()移除所有元素

更多 LinkedHashSet 方法请访问 Java LinkedHashSet(官方 Java 文档)。


LinkedHashSet 与 HashSet 对比

两者均实现 Set 接口,但存在差异:



LinkedHashSet 与 TreeSet 对比

LinkedHashSet 与 TreeSet 主要差异:


java

  1. 精通 Java 运算符:类型、语法与实战示例
  2. Java 注释:类型、用法与最佳实践
  3. 精通 Java if…else:控制流全解析
  4. 精通 Java 增强 for 循环:语法、示例与最佳实践
  5. Java break 语句:用法、时机与标签 break 详解
  6. 精通 Java 字符串:创建、方法与最佳实践
  7. 精通 Java 接口:概念、实现与最佳实践
  8. 精通 Java 匿名内部类:定义、语法与实战示例
  9. 精通 Java Try-With-Resources:自动资源管理详解
  10. Java 注解详解:类型、放置位置与实战示例
  11. Java 断言实战指南:尽早发现 Bug 与保障代码可靠性
  12. 深入理解 Java Vector:用法、特性及与 ArrayList 的对比