我有一個未排序的字符串條目的數組,我想將它「轉換」爲一個二維數組,其中包含來自舊數組的每個條目和豐度(每個字符串發生的數量)爲那個條目。從一維數組到二維數組的丰度
我不知道如何在Java中實現這一點,我不確定是否這是一個好方法,因爲數組有90k +條目。
我有一個未排序的字符串條目的數組,我想將它「轉換」爲一個二維數組,其中包含來自舊數組的每個條目和豐度(每個字符串發生的數量)爲那個條目。從一維數組到二維數組的丰度
我不知道如何在Java中實現這一點,我不確定是否這是一個好方法,因爲數組有90k +條目。
我建議使用地圖:
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);
}
}
像這樣的事情?
我用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條目,這將需要一些時間。
這是學生問題嗎?如果沒有,您可以使用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");
我不知道你的意思是豐富的數組中的條目。 – 2013-07-30 13:35:32
@JackManey可能是每個元素的計數。 –
爲什麼你不使用數據庫來處理那麼多的數據 – exexzian