2013-11-21 72 views
1

所以,我是java中的新手。查找並替換java中的重複項

我有一個字符串的ArrayList的..所以..這個數組類似:

[ "foo 123", "bar 124", "foobar 124","foo 125"] 

我想是去除foo 123 ..

爲什麼..

因爲foo是重複兩次..我想保留最大的計數(旁邊的密鑰)..

我的方法已經有點複雜..

使用key和count維護hashmap。如果密鑰存在..檢查值,如果值更大,則更換條目??

我覺得這是一個笨拙的方式來解決這個問題。 有沒有一個很好的方式來基本上重複這個列表? 謝謝

+0

好的方法做到底是什麼?使用HashMaps的流程或者你想要一個替代? – Adarsh

+0

@Adarsh:oops ..改寫了這個問題:) – Fraz

+0

爲什麼地圖笨重?似乎完全合理。 –

回答

1

你的方法非常簡單 - 事實上,它是你可以有的最快的一個,因爲它在時間和空間上都是O(N)

實現也非常簡單。使用LinkedHashMap來保留您的密鑰的插入順序。

String[] data = new String[] {"foo 123", "bar 124", "foobar 124","foo 125"}; 
Map<String,Integer> counts = new LinkedHashMap<String,Integer>(); 
for (String s : data) { 
    String[] tok = s.split(" "); 
    Integer count = Integer.valueOf(tok[1]); 
    if (!counts.containsKey(tok[0]) || counts.get(tok[0]) < count) { 
     counts.put(tok[0], count); 
    } 
} 
for (Map.Entry<String,Integer> e : counts.entrySet()) { 
    System.out.println(e.getKey() + " " +e.getValue()); 
} 

Demo on ideone