2013-07-30 109 views
-1

我有一個未排序的字符串條目的數組,我想將它「轉換」爲一個二維數組,其中包含來自舊數組的每個條目和豐度(每個字符串發生的數量)爲那個條目。從一維數組到二維數組的丰度

我不知道如何在Java中實現這一點,我不確定是否這是一個好方法,因爲數組有90k +條目。

+6

我不知道你的意思是豐富的數組中的條目。 – 2013-07-30 13:35:32

+0

@JackManey可能是每個元素的計數。 –

+0

爲什麼你不使用數據庫來處理那麼多的數據 – exexzian

回答

2

我建議使用地圖:

Map<String, Integer> counted = new HashMap<String, Integer>(); 

for (String s : theOriginalArray) { 
     Integer count = counted.get(s); 
     if (count == null) { 
      counted.put(s, 1); 
     } else { 
      counted.put(s, count + 1); 
     } 
} 
+1

不要在每個數組元素上調用'get',而應該使用'containsKey'來檢查它是否存在於地圖中,只有在存在時才調用'get'來更新條目。 – arshajii

+0

@arshajii'containsKey()'運行與get()'基本相同的代碼,所以這將意味着工作的兩倍 – kiheru

+0

@kiheru'containsKey()'返回一個布爾值,'get()'返回一個對象 – pad

1

像這樣的事情?

我用List和Map做了它,但是你可以很容易地將一個數組轉換成一個列表,而且使用起來更容易。

public static Map<String, Integer> getUniqueStrings(List<String> rawData) { 
    Map<String, Integer> uniques = new HashMap<String, Integer>(); 

    for(String s : rawData) { 
     if(uniques.containsKey(s)) { 
      uniques.put(s, uniques.get(s) + 1); 
     } else { 
      uniques.put(s, 1); 
     } 
    } 

    return uniques; 
} 

當然,對於90K條目,這將需要一些時間。

1

這是學生問題嗎?如果沒有,您可以使用Google Guava提供的解決方案。

import com.google.common.collect.HashMultiSet; 
import com.google.common.collect.MultiSet; 
// ... 
String[] stringArray = ...; 
MultiSet<String> bag = HashMultiSet.create(); 
Collections.addAll(bag, stringArray); 
int sos = bag.count("Stack Overflow");