簡體   English   中英

對鏈接的哈希集進行排序

[英]Sorting a linked hashset

有沒有一種方法可以對鏈接哈希集中的鏈接進行排序? 我知道它保留了添加元素的順序,但是有沒有辦法像鏈接列表一樣重新排序這些鏈接,並且它仍然表現出 hashMap 行為?

不幸的是,沒有,因為sort()來自List接口,它不是由LinkedHashSet實現的。 它實現了 Set -> Collection 接口。

但是,有一個解決方法,您可以將數據放入 ArrayList 或 LinkedList,在那里對其進行排序,然后將它們放入LinkedHashSet但現在將排序。 例子:

ArraysList<> list = ..<put_your_data_here>..
list.sort(...); // with comparator
Set<> set = new LinkedHashSet(list);

結果,您將擁有完全排序的LinkedHashSet

您可以通過幾種方式實現它。分享一些您可以使用的

方式 1:將 LinkedHashSet 轉換為 TreeSet 以實現自然排序

腳步:

  • 創建新的 LinkedHashSet object
  • 將內容存儲/添加到 LinkedHashSet
  • 創建新的樹集 object,
  • 將 LinkedHashSet 內容作為參數傳遞給 TreeSet 的相互轉換構造函數
package in.cj.resources.collection;

import java.util.LinkedHashSet;
import java.util.TreeSet;

public class SortingLinkedHashSetUsingTreeSet {

    public static void main(String[] args) {

        // creating LinkedHashSet object of type String
        LinkedHashSet<String> lhsCompanies = 
                new LinkedHashSet<String>();

        // adding elements to LinkedHashSet object
        lhsCompanies.add("Dutchview");
        lhsCompanies.add("Oracle");
        lhsCompanies.add("Microsoft");

        // Iterating using enhanced for-loop
        System.out.println("Insertion Order:"
                + " Iterating LinkedHashSet\n");
        for(String company : lhsCompanies) {
            System.out.println(company);
        }

        // convert LinkedHashSet to TreeSet
        TreeSet<String> tSet = new TreeSet<String>(lhsCompanies); 

        // Iterating using enhanced for-loop
        System.out.println("\n\nAscending sorting-order:"
                + " Iterating TreeSet\n");
        for(String company : tSet) {
            System.out.println(company);
        }
    }
}

方式2:將LinkedHashSet轉換為TreeSet進行逆序

腳步:

  • 創建新的 LinkedHashSet object 將內容存儲/添加到 LinkedHashSet
  • 創建新的 TreeSet object 並使用 Comparator 提供反向排序邏輯 使用 addAll() 方法將 LinkedHashSet 內容添加到 TreeSet
package in.cj.resources.collection;

import java.util.Comparator;
import java.util.LinkedHashSet;
import java.util.TreeSet;

public class ReverseSortingLinkedHashSetUsingTreeSet {

    public static void main(String[] args) {

        // creating LinkedHashSet object of type String
        LinkedHashSet<String> lhsCompanies = 
                new LinkedHashSet<String>();

        // adding elements to LinkedHashSet object
        lhsCompanies.add("Dutchview");
        lhsCompanies.add("Amazon");
        lhsCompanies.add("Google");

        // Iterating using enhanced for-loop
        System.out.println("Insertion Order:"
                + " Iterating LinkedHashSet\n");
        for(String company : lhsCompanies) {
            System.out.println(company);
        }

        // create new TreeSet object and provide reverse-sorting logic
        TreeSet<String> tSet = new TreeSet<String>(
                new Comparator<String>() {

                    @Override
                    public int compare(String str1, String str2) {
                        return str2.compareTo(str1);
                    }
                }); 

        // add LinkedHashSet to TreeSet for reverse-sorting elements
        tSet.addAll(lhsCompanies);

        // Iterating using enhanced for-loop
        System.out.println("\n\nDescending sorting-order:"
                + " Iterating TreeSet\n");
        for(String company : tSet) {
            System.out.println(company);
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM