當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Java ArrayList轉LinkedHashSet用法及代碼示例


ArrayList 是一種數據結構,它克服了 Java 中常見數組的大小必須事先明確指定的缺點。數組數據結構的長度不能修改,這是由 ArrayList 數據結構處理的。這種數據結構也稱為動態數組,可以根據需要增長或修改。它是Collections框架下的一個類,可以通過導入java.util包來包含在java程序中。

LinkedHashSet 是 Java 中傳統 HashSet 類的增強版本,它提供了 HashSet 中缺少的附加排序函數。它維護元素插入其中的順序,這與 HashSet 的順序是不可預測的不同。它是使用 doubly-linked 列表實現的,並且可以使用迭代器進行迭代。

本文使用 4 種不同的方法處理將 ArrayList 轉換為 LinkedHashSet,如下所示:

  1. 在 LinkedHashSet 構造函數初始化期間將 ArrayList 作為參數傳遞。
  2. 使用 LinkedHashSet 類的 addAll() 方法。
  3. 在遍曆 ArrayList 的所有元素時使用 LinkedHashSet 類的 add() 方法。
  4. 使用流首先將 ArrayList 轉換為 Set,然後再轉換為 LinkedHashSet。

方法一

使用這種方法,我們隻需在初始化 LinkedHashSet 類時將 ArrayList 作為參數傳遞



用法

LinkedHashSet(Collection C):用於用集合 C 的元素初始化 HashSet。

LinkedHashSet<E> hs = new LinkedHashSet<E>(Collection c);

示例

Java


// java program to convert ArrayList
// to LinkedHashSet
// importing the utils package
import java.util.*;
class GFG {
    // defining the method
    void arrayListToLinkedHashSet()
    {
        // initializing the ArrayList
        ArrayList<String> arrayList = new ArrayList<>();
        // adding values in the ArrayList
        arrayList.add("Geeks");
        arrayList.add("For");
        arrayList.add("Geeks");
        // printing the list
        System.out.println("The array list:" + arrayList);
        // initializing the LinkedHashSet class
        // passing the ArrayList as parameter
        LinkedHashSet<String> linkedHashSet
            = new LinkedHashSet<String>(arrayList);
        // printing the LinkedHashSet
        System.out.println("The converted "
                           + "Linked Hash Set:"
                           + linkedHashSet);
    }
    // Driver Code
    public static void main(String[] args)
    {
        // instantiating the class
        GFG ob = new GFG();
        // calling the method
        ob.arrayListToLinkedHashSet();
    }
}
輸出
The array list:[Geeks, For, Geeks]
The converted Linked Hash Set:[Geeks, For]

說明:
ArrayList 包含三個條目,它們是 [Geeks, For, Geeks]。這被轉換為一個有序集,並且隻包含兩個值:Geeks 和 For。由於 Set 不允許多個相似的值。

方法二

使用這種方法,我們在初始化之後使用 LinkedHashSet 類的預定義方法 addAll() 來填充 LinkedHashSet。

用法:



LinkedHashSet.addAll(Collection C)

參數:參數 C 是要添加到集合中的任何類型的集合。

返回值:如果成功地將集合 C 的元素附加到此 Set,則該方法返回 true,否則返回 False。

示例

Java


// java program to convert ArrayList
// to LinkedHashSet
// importing the java.utils package
import java.util.*;
class GFG {
    // defining the method
    void arrayListToLinkedHashSet()
    {
        // initializing the ArrayList
        ArrayList<String> arrayList = new ArrayList<>();
        // filling the ArrayList with values
        arrayList.add("Geeks");
        arrayList.add("For");
        arrayList.add("Geeks");
        // printing the list
        System.out.println("The Array List:" + arrayList);
        // initializing the LinkedHashSet
        LinkedHashSet<String> linkedHashSet
            = new LinkedHashSet<>();
        // using the addAll() to
        // fill the HashSet
        linkedHashSet.addAll(arrayList);
        // printing the LinkedHashSet
        System.out.println("The Linked "
                           + "Hash Set:" + linkedHashSet);
    }
    // Driver Code
    public static void main(String[] args)
    {
        // instantiating the class
        GFG ob = new GFG();
        // calling the method
        ob.arrayListToLinkedHashSet();
    }
}
輸出
The Array List:[Geeks, For, Geeks]
The Linked Hash Set:[Geeks, For]

方法 3

使用這種方法,我們迭代 ArrayList 並在每次迭代中使用 LinkedHashSet 類的預定義 add() 方法用值填充 LinkedHashSet。

用法:

Hash_Set.add(Object element)

參數:參數element 是 LinkedHashSet 類型,指的是要添加到 Set 中的元素。

返回值:如果元素不存在於 LinkedHashSet 中,則該函數返回 True,否則如果元素已存在於 LinkedHashSet 中,則返回 False。

示例



Java


// java program to convert ArrayList
// to LinkedHashSet
// importing the java.utils package
import java.util.*;
class GFG {
    // defining the method
    void arrayListToHashSet()
    {
        // initializing the ArrayList
        ArrayList<String> arrayList = new ArrayList<>();
        // filling the ArrayList with values
        arrayList.add("Geeks");
        arrayList.add("For");
        arrayList.add("Geeks");
        // printing the list
        System.out.println("The Array List:" + arrayList);
        // declaring the iterator
        Iterator<String> itr = arrayList.iterator();
        // initializing the LinkedHashSet
        LinkedHashSet<String> linkedHashSet
            = new LinkedHashSet<>();
        // loop to iterate through the ArrayList
        while (itr.hasNext())
            // using the add()
            // to fill the HashSet
            linkedHashSet.add(itr.next());
        // printing the LinkedHashSet
        System.out.println("The Linked Hash Set:"
                           + linkedHashSet);
    }
    // Driver Code
    public static void main(String[] args)
    {
        // instantiating the class
        GFG ob = new GFG();
        // calling the method
        ob.arrayListToHashSet();
    }
}
輸出
The Array List:[Geeks, For, Geeks]
The Linked Hash Set:[Geeks, For]

方法 4

在這種方法下,我們首先將 ArrayList 轉換為流,然後再轉換為 Set。這個 Set 最終被轉換為 LinkedHashSet。 Stream 類僅適用於 JDK 8 或更高版本。

示例

Java


// java program to convert ArrayList
// to LinkedHashSet
import java.util.*;
import java.util.stream.*;
class GFG {
    // defining the method
    void arrayListToLinkedHashSet()
    {
        // initializing the ArrayList
        ArrayList<String> arrayList = new ArrayList<>();
        // filling the ArrayList with values
        arrayList.add("Geeks");
        arrayList.add("For");
        arrayList.add("Geeks");
        // printing the list
        System.out.println("The Array List:" + arrayList);
        // creating a stream from the ArrayList
        Stream<String> stream = arrayList.stream();
        // creating a set from the Stream
        // using the predefined toSet()
        // method of the Collectors class
        Set<String> set
            = stream.collect(Collectors.toSet());
        // converting the Set to
        // LinkedHashSet
        LinkedHashSet<String> linkedHashSet
            = new LinkedHashSet<>(set);
        // printing the LinkedHashSet
        System.out.println("The Linked Hash Set:"
                           + linkedHashSet);
    }
    // Driver Code
    public static void main(String[] args)
    {
        // instantiating the class
        GFG ob = new GFG();
        // calling the method
        ob.arrayListToLinkedHashSet();
    }
}
輸出
The Array List:[Geeks, For, Geeks]
The Linked Hash Set:[Geeks, For]

將自定義類對象的 ArrayList 轉換為 LinkedHashSet

以上示例說明了轉換 Integer、String 等原始數據類型的 ArrayList 的過程。在這裏,我們將使用上述方法將自定義類對象的 ArrayList 轉換為 LinkedHashSet。轉換的一個有趣特征是,這允許複製上述場景中不允許的對象。相同的原因是每次創建同一類的新對象時,在比較對象時用於在將元素輸入集合之前檢查元素的 equals() 方法會找到唯一引用,因為每個新對象都有一個新引用.這允許相同的數據出現在 LinkedHashSet 中的多個位置。

示例

Java


// java code to convert an ArrayList
// of custom class objects to
// LinkedHashSet
// importing the libraries
import java.util.*;
// the custom class
class Sports {
    // global variable name of type String
    // to hold the name of the sport
    private String name;
    // constructor
    public Sports(String name)
    {
        // initializing the name
        this.name = name;
    }
    // method to return the string
    public String returnString()
    {
        return name + " is a great sport";
    }
}
// primary class
class GFG {
    // declaring the method
    static void arrayListToLinkedHashSet()
    {
        // creating an array list of type
        // class Sports
        ArrayList<Sports> listOfSports
            = new ArrayList<Sports>();
        // adding the new instances of Sports
        // in the array list
        listOfSports.add(new Sports("Football"));
        listOfSports.add(new Sports("Basketball"));
        listOfSports.add(new Sports("Football"));
        // printing the list
        System.out.println("The Array List:"
                           + listOfSports);
        // declaring an iterator of type Sports
        // to iterate over the list
        Iterator<Sports> itr = listOfSports.iterator();
        // iterating over the list
        while (itr.hasNext())
            // printing the contents
            // by calling the returnString()
            System.out.println(itr.next().returnString());
        // initializing the linkedhashset
        // of type Sports
        LinkedHashSet<Sports> linkedHashSet
            = new LinkedHashSet<Sports>(listOfSports);
        // printing the contents of the
        // linked hash set
        System.out.println("The Linked Hash Set:"
                           + linkedHashSet);
        // declaring an iterator to iterate
        // over linkedhashset
        Iterator<Sports> itr1 = linkedHashSet.iterator();
        // iterating over the linkedhashset
        while (itr1.hasNext()) {
            // calling the returnString()
            // of Sports
            System.out.println(itr1.next().returnString());
        }
    }
    // Driver Code
    public static void main(String[] args)
    {
        // calling the method
        arrayListToLinkedHashSet();
    }
}
輸出
The Array List:[Sports@4e50df2e, Sports@1d81eb93, Sports@7291c18f]
Football is a great sport
Basketball is a great sport
Football is a great sport
The Linked Hash Set:[Sports@4e50df2e, Sports@1d81eb93, Sports@7291c18f]
Football is a great sport
Basketball is a great sport
Football is a great sport

說明:
在第一行,打印了 ArrayList 的內容,可以看出是對 Sports 類的引用。在下麵的三行中,打印了 Sports 類的 returnString() 方法的內容。應該注意的是,所有引用都是唯一的,因此即使內容可能相同,LinkedHashSet 也允許它們。在下一行中,打印出 LinkedHashSet 的內容,這些內容再次引用了 Sports 類。後麵的行是 returnString() 方法調用。




相關用法


注:本文由純淨天空篩選整理自ag01harshit大神的英文原創作品 How to Convert ArrayList to LinkedHashSet in Java?。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。