2010-12-14 172 views
0

這是在java中存儲重複值的最佳數據結構?從它檢索價值是多麼容易!我應該在java中使用哪種數據結構來存儲重複值?

謝謝 編輯#1我正在閱讀1000個文件的內容,並且我想將每個文件內容作爲標記放在某些數據結構中。我使用Hashtable,但當我這樣做時,我無法查看許多單詞。這就是爲什麼我想要一個可以存儲重複值的數據結構。

+6

你是什麼意思的「重複值?」什麼數據被存儲?您需要對這些值執行哪些操作?沒有更多的信息,這是無法回答的。 – syrion 2010-12-14 15:42:40

+0

你需要重複的值還是重複的參考?換句話說,您是否有多個包含相同內容的對象,或者您是否需要對同一對象進行多次引用? – 2010-12-14 15:55:17

+0

有什麼內容?號碼?你希望以後如何訪問這些內容? – 2010-12-14 19:27:08

回答

2

只需存儲簡單值,就應該使用List<E>接口的實現。

要從List<E>你可以做以下獲取數據:

list.get(index); // will get data at a given index 
// or you can iterate over all of the items in the list 
for(E item: list) { 
    // use E 
} 

根據你使用任何一個ArrayList<E>LinkedList<E>會做你的需要。

另一種選擇是Map<K, V>(它的實現HashMap)。這將允許您在唯一鍵下保存重複的值。

你可以得到的值從以下幾方面一Map<K,V>的:

map.get(someKey); // will retrieve the value associated with a key 
// or you can iterate through all of the entries in a map like so: 
for(Entry<K,V> entry: map.entrySet()){ 
    // use entry 
} 

回答您的編輯:

您可能需要使用Map<String, List<String>>,其中的關鍵是的名稱文件,並且該值是文件中單詞的列表。

您的代碼可能是這樣的:

Map<String, List<String>> data = new HashMap<String, List<String>>(); 
for(File f: files) { 
    List<String> words = new ArrayList<String(); 
    data.put(f.getName(), words); 
    Scanner s = new Scanner(f); 
    while(s.hasNext()) { 
     words.add(s.next()); 
    } 
} 

在這個snipit結束,data將與每個文件中的單詞列表來填補。

+0

以及我需要檢查數據結構中的值,所以我該怎麼做!?其實我正在使用散列表,我認爲它正在跳過一些值,儘管我使用的是獨特的密鑰。 – Maverick 2010-12-14 16:02:29

+0

@mad究竟是什麼 - 「我需要檢查數據結構中的值」是什麼意思? – jjnguy 2010-12-14 16:03:19

+0

@mad,你的意思是你需要看看這個值是否在結構中? – jjnguy 2010-12-14 16:08:24

0

theres缺乏信息正確回答這個qn ..但無論如何,hashmaps可以做的伎倆。檢索值可以在平均時間內完成..

+0

在HashMap中重複值?只有當他們有獨特的鑰匙時,這似乎極不可能。 – GaryF 2010-12-14 15:47:56

+0

或者用鍵值作爲重複計數器的值。 – enguerran 2010-12-14 15:49:21

+0

它可能生成唯一的密鑰。但是,顯然mad_programmer正在使用散列表,即使使用唯一的鍵也不適合他。 – 2010-12-14 16:24:17

0

您應該使用List<E>但您應該實施int[] getDuplicateValuesIndexes(String value)方法和int getCount(String value)。這些將會很有用,因爲在List<E>實現中,沒有什麼可以處理重複值,因爲它們只存儲任何類型的值。

0

任何沒有實現Set接口的java.util.Collection。可能你會想要實現List的東西。

0

使用數組獲得價值使用指數(我知道它的不完整答案,但問題也是如此)

相關問題