Java 菜鳥教程

Java 流程控制

Java 數(shù)組

Java 面向?qū)ο?I)

Java 面向?qū)ο?II)

Java 面向?qū)ο?III)

Java 異常處理

Java 列表(List)

Java Queue(隊列)

Java Map集合

Java Set集合

Java 輸入輸出(I/O)

Java Reader/Writer

Java 其他主題

Java LinkedHashSet

在本教程中,我們將借助示例學習Java LinkedHashSet類及其方法。

Java集合框架的LinkedHashSet類提供了哈希表和鏈接列表數(shù)據(jù)結(jié)構(gòu)的功能。

它實現(xiàn)Set接口

Java LinkedHastSet類實現(xiàn)Set接口。

LinkedHashSet的元素存儲在類似于HashSet的哈希表中。

但是,鏈表哈希集合在內(nèi)部為其所有元素維護一個雙鏈表。鏈表定義了在哈希表中插入元素的順序。

創(chuàng)建一個LinkedHashSet

為了創(chuàng)建鏈表的哈希集,我們必須首先導入java.util.LinkedHashSet包。

導入包后,就可以在Java中創(chuàng)建鏈表的哈希集。

//具有8個容量和0.75負載因子的LinkedHashSet
LinkedHashSet<Integer> numbers = new LinkedHashSet<>(8, 0.75);

在這里,我們創(chuàng)建了一個名為numbers的鏈表哈希集合。

注意,語句 new LinkedHashSet<>(8, 0.75)。在這里,第一個參數(shù)是容量,第二個參數(shù)是負載因子。

  • capacity - 該哈希集的容量為8。意味著,它可以存儲8個元素。

  • loadFactor- 此哈希集的負載因子為0.6。這意味著,只要我們的哈希表填充了60%,元素就會移動到新哈希表中,該哈希表的大小是原始哈希表的兩倍。

默認容量和負載因子

可以在不定義其容量和負載因子的情況下創(chuàng)建鏈表的哈希集合。例如,

//具有默認容量和負載因子的LinkedHashSet
LinkedHashSet<Integer> numbers1 = new LinkedHashSet<>();

默認,

  • 鏈接哈希集的容量將為16

  • 負載因子將為0.75

從其他集合創(chuàng)建LinkedHashSet

這是我們?nèi)绾蝿?chuàng)建包含其他集合的所有元素的鏈接哈希集。

import java.util.LinkedHashSet;
import java.util.ArrayList;

class Main {
    public static void main(String[] args) {
        //創(chuàng)建偶數(shù)的arrayList
        ArrayList<Integer> evenNumbers = new ArrayList<>();
        evenNumbers.add(2);
        evenNumbers.add(4);
        System.out.println("ArrayList: " + evenNumbers);

        //從ArrayList創(chuàng)建LinkedHashSet
        LinkedHashSet<Integer> numbers = new LinkedHashSet<>(evenNumbers);
        System.out.println("LinkedHashSet: " + numbers);
    }
}

輸出結(jié)果

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

LinkedHashSet的方法

LinkedHashSet類提供了讓我們對所鏈表的哈希集合執(zhí)行各種操作方法。

將元素插入LinkedHashSet

  • add() - 將指定的元素插入鏈表的哈希集

  • addAll() - 將指定集合的所有元素插入鏈表的哈希集

例如,

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("New LinkedHashSet: " + numbers);
    }
}

輸出結(jié)果

LinkedHashSet: [2, 4, 6]
New 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);

        //調(diào)用iterator()方法
        Iterator<Integer> iterate = numbers.iterator();

        System.out.print("使用Iterator的LinkedHashSet: ");

        //訪問元素
        while(iterate.hasNext()) {
            System.out.print(iterate.next());
            System.out.print(", ");
        }
    }
}

輸出結(jié)果

LinkedHashSet: [2, 5, 6]
使用Iterator的LinkedHashSet: 2, 5, 6,

注意事項

  • hasNext()返回true鏈接的哈希集中是否存在下一個元素

  • next() 返回鏈接的哈希集中的下一個元素

從HashSet中刪除元素

  • remove() - 從鏈表的哈希集中刪除指定的元素

  • removeAll() - 從鏈表的哈希集中刪除所有元素

例如,

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);
    }
}

輸出結(jié)果

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

LinkedHashSet操作方法

LinkedHashSet該類的各種方法也可以用于執(zhí)行各種Set操作。

并集

執(zhí)行兩個集合之間的并集,我們可以使用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);
    }
}

輸出結(jié)果

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

交集

要執(zhí)行兩個集合之間的交集,我們可以使用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);
    }
}

輸出結(jié)果

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);
    }
}

輸出結(jié)果

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);
    }
}

輸出結(jié)果

LinkedHashSet1: [1, 2, 3, 4]
LinkedHashSet2: [2, 3]
LinkedHashSet2是LinkedHashSet1的子集嗎? true

LinkedHashSet的其他方法

方法描述
clone()創(chuàng)建LinkedHashSet副本
contains()在中搜索LinkedHashSet指定的元素,并返回布爾結(jié)果
isEmpty()檢查是否LinkedHashSet為空
size()返回LinkedHashSet的大小
clear()從LinkedHashSet中刪除所有元素

LinkedHashSet與HashSet的區(qū)別

LinkedHashSet和HashSet都實現(xiàn)Set接口。 但是,它們之間存在一些差異。

  • LinkedHashSet在內(nèi)部維護一個鏈表。因此,它保持其元素的插入順序。

  • LinkedHashSet類比HashSet需要更多的存儲空間。這是因為LinkedHashSet在內(nèi)部維護鏈表。

  • LinkedHashSet的性能比HashSet慢。這是因為LinkedHashSet中存在鏈表。

LinkedHashSet 與TreeSet的區(qū)別

以下是LinkedHashSet和TreeSet之間的主要區(qū)別:

  • TreeSet類實現(xiàn)了SortedSet接口。這就是為什么樹集中的元素是有序的。但是,LinkedHashSet類只維護其元素的插入順序。

  • TreeSet通常比LinkedHashSet慢。這是因為每當將元素添加到TreeSet時,它都必須執(zhí)行排序操作。

  • LinkedHashSet允許插入空值。但是,我們不能向TreeSet插入空值。
丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清