2015-02-06 71 views
1

我想創建一個鏈接列表,它將佔用大量的數據,整數或字符串,並獲取它們出現的頻率。我知道如何創建一個基本的鏈表來達到這個目的,但是由於數據量太大,我想找一個更快的方法來對數據進行排序,而不是每次調用某個特定的時候都瀏覽整個鏈表方法。爲了做到這一點,我需要做一個Pair<Object, Integer>其中Object是數據和integer是它發生的頻率。在Java中存儲一對鏈接列表的數據

到目前爲止,我已經嘗試創建陣列名單這將幫助我整理出數據,但無法弄清楚如何得到它變成一個Pair表示數據和頻率。如果你有任何想法可以幫助我至少開始,將不勝感激。

+1

也許你想要一個'HashMap'? – 5gon12eder 2015-02-06 22:37:54

回答

2

你必須定義自己的數據類型首先,讓我們說

public FrequencyCount<T> implements Comparable<FrequencyCount<T>> 
{ 
    public final T data; 
    public int frequency; 

    public int compareTo(FrequencyCount<T> other) { 
    // implement this method to choose your correct natural ordering 
    } 
} 

具有類似目標,一切都變得簡單了:

List<FrequencyCount<Some>> data = new ArrayList<FrequencyCount<Some>>(); 
Collections.sort(data); 

Set<FrequencyCount<Some>> sortedData = new TreeSet<FrequencyCount<Some>>(data); 
0

可以將所有值到一個列表,創建從中進行設置,然後迭代Set以查找使用集合的列表中的頻率。頻率:http://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#frequency(java.util.Collection,%20java.lang.Object)

List<Integer> allValues = ...; 
Set<Integer> uniqueValues = new HashSet<Integer>(allValues); 
for(Integer val : uniqueValues) { 
    int frequency = Collections.frequency(allValues, val); 
// use val and frequency as key and value as you wish 
}