在Java中,如何將字符串數組轉換爲唯一值數組?如何將字符串數組轉換爲唯一值數組?
如果我有這樣的字符串數組:
String[] test = {"1","1","1","2"}
而且我想直到結束:
String[] uq = {"1","2"}
在Java中,如何將字符串數組轉換爲唯一值數組?如何將字符串數組轉換爲唯一值數組?
如果我有這樣的字符串數組:
String[] test = {"1","1","1","2"}
而且我想直到結束:
String[] uq = {"1","2"}
如果你與HashSet
-approach去(這似乎非常方便),你應該使用的LinkedHashSet
而不是HashSet
,如果你想保持陣列的訂單!
Set<String> temp = new LinkedHashSet<String>(Arrays.asList(array));
String[] result = temp.toArray(new String[temp.size()]);
一個簡單的方法是創建一個組,在陣列中添加的每個元素它,然後將該集合轉換爲數組。
List list = Arrays.asList(test);
Set set = new HashSet(list);
String[] uq = set.toArray();
調用'Set.toArray()'會更容易。 – 2009-12-08 01:21:34
是的,我選擇loooong的方式不知道爲什麼 – 2009-12-08 01:22:55
快速但有些低效的方式將是:
Set<String> temp = new HashSet<String>(Arrays.asList(test));
String[] uq = temp.toArray(new String[temp.size()]);
爲什麼它效率低下?考慮到該陣列可能有四個以上的值。另一種方法是對數組進行排序並查找模糊,對不對? – 2009-12-08 01:28:44
到HashSet的方法的一個替代方案是:
排序輸入數組
計算數字o所述排序後的數組
f中不重複的值分配輸出數組
迭代排序陣列上,複製非重複值到它。
的HashSet的方法是O(N)
平均假設1)你預先分配與右大小HashSet中和在輸入數組散列2)(非重複)值大致均勻。 (但是如果哈希值是病態的,最壞的情況是O(N**2)
!)
平均分類方法是O(NlogN)
。
HashSet方法平均需要更多內存。
如果您很少這樣做或對於非常大的「良好行爲」的輸入數組,HashSet方法可能會更好。否則,這可能是一種折騰,哪種方法更好。
我試着在這個頁面上的所有答案,沒有工作原樣。所以,這裏是我如何解決它,很多答案來自靈感Taig和akuhn:
import groovy.io.*;
def arr = ["5", "5", "7", "6", "7", "8", "0"]
List<String> uniqueList = new ArrayList<String>(
new LinkedHashSet<String>(arr.asList()).sort());
System.out.println(uniqueList)
這裏是我的解決方案:
int[] A = {2, 1, 2, 0, 1};
Arrays.sort(A);
ArrayList<Integer> B = new ArrayList<Integer>();
for (int i = 0; i < A.length; i++) {
if (i == A.length-1) {
B.add(A[i]);
}
else if (A[i] != A[i+1]) {
B.add(A[i]);
}
}
String[] getDistinctElementsArray(String[] arr){
StringBuilder distStrings = new StringBuilder();
distStrings.append(arr[0] + " ");
for(int i=1;i<arr.length;i++){
if(arr[i].equals(arr[i-1])){}
else{
distStrings.append(arr[i] + " ");
}
}
return distStrings.toString().split(" ");
}
剛剛發現一個更好的方式Java 8:
Arrays.stream(aList).distinct().toArray(String[]::new)
使用修改後的Mergesort,刪除重複項w母雞遇到,而不是將兩個副本添加回列表。運行於**'O(N * logN)'** – 2013-10-06 18:45:01