java數組去重的方法
A. java中List的五種去重方法及效率對比,你都用對了嗎
Java中List的五種去重方法及效率對比
在Java中,處理List去重問題時,有多種方法可供選擇。下面介紹五種常見的去重方法,以及針對它們的效率對比。注意,這五種方法在具體實現時,順序上可能會有所不同。
**方法一:使用兩個for循環實現List去重(有序)**
這種傳統方法需要雙重循環,檢查當前元素是否等於後續的所有元素,如果等於,則移除它。盡管操作邏輯直觀,但這種方法的效率較低,尤其是當List元素數量眾多時。
**方法二:使用List集合contains方法循環遍歷(有序)**
這種方法更加高效,因為它利用了contains方法的O(n)復雜度。遍歷列表,每次檢查當前元素是否存在於結果列表中,如果存在,則跳過;反之,添加到結果列表。
**方法三:使用HashSet實現List去重(無序)**
將元素添加到HashSet中自動實現了去重操作,由於HashSet內部採用哈希表實現,查找和插入操作的時間復雜度通常為O(1),所以這種方法在實際應用中效率較高。
**方法四:使用TreeSet實現List去重(有序)**
TreeSet同樣能通過哈希表實現高效的去重操作。但它保證了元素的自然排序,意味著輸出結果也是有序的。盡管比普通HashSet多了一層排序操作,但在有序列表去重中,這種方法相對高效。
**方法五:使用Java8新特性stream實現List去重(有序)**
利用Java8的stream流式操作,通過filter方法結合distinct過濾器可以實現去重,同時通過collect方法收集結果。這種方案簡潔優雅,但在處理大量數據時,效率可能不如前幾種方法。
**效率測試代碼**
執行測試代碼可以獲取更具體的數據比較結果,包括三種列表元素規模不同的情況,觀察它們的運行時間。
**結論**
總的來說,HashSet或TreeSet是去重時的高效選擇,尤其在需要無序結果時;在需要保持有序結果的場景下,TreeSet尤為適用。而Stream實現雖然簡便,但對於大規模數據集,速度上可能不如純迭代方法。
**最後**
感謝大家閱讀至此。希望本文能幫助你理解和選擇最適合去重場景的方法。如果有任何疑問或建議,歡迎在評論區留言。每份支持都是我前進的動力。期待更多交流和分享!
B. Java如何將數組中具有相同的元素都刪去
如果是要把List中的重復元素刪除的話可以先吧List轉成Set去除重復元素
比如現在有個數組為 myArray ,裡面有部分的重復元素
Set mySet = new HashSet();
for(Object obj : Array){
mySet.add(obj);
}
mySet中所保存的元素就是唯一的了.
再吧mySet保存到數組中
完整例子:
// 創建一個數組,裡面存在重復的元素
String[] myArray = {"s","s","f","d"};
Set<String> mySet = new HashSet<String>();
// 去除重復元素
for(String s : myArray){
mySet.add(s);
}
myArray = new String[mySet.size()];
int index = 0;
// 將去重後的結果存入數組
for(String s : mySet){
myArray[index] = s;
index++;
}
// 列印出來結果
System.out.println(Arrays.toString(myArray));
C. java中怎麼將字元串數組中的重復的元素去掉,但是還是保留一個。
import java.util.*;
class BaiDu
{
public static void main(String[] args)
{
TreeSet<String> tr = new TreeSet<String>();
String[] s ={"11","22","22","33","33","33"};
System.out.print("====處理前=======");
for(int i=0;i<s.length;i++){
System.out.print(s[i]+" ");
tr.add(s[i]);
}
String[] s2= new String[tr.size()];
System.out.println("=====處理後======");
for(int i=0;i<s2.length;i++){
s2[i]=tr.pollFirst();//從TreeSet中取出元素重新賦給數組
System.out.print(s2[i]+" ");
}
}
}
D. java中怎麼樣子找出數組中重復的數,並去除
其實只要遍歷數組,然後放進set集合內即可實現。
比如:
//set集合可以自動去重
Integer[] a = {1, 2, 2 , 19, 19, 8, 9};
Set<Integer> set = new HashSet<Integer>();
for(Integer i : a)
set.add(i);
for(Object s: set.toArray())
System.out.print(s+ " ");
}
E. 用Java刪除數組中所有相同的數,使之僅剩下一個,然後輸出剩下的數據
public class ArrayUnique {
/**
* 方法1 就是申請一個和nums大小一樣的數組tmpNums,
* 然後遍歷nums中的元素,對每個元素判斷是否在tmpNums出現過,
* 如果出現過,那麼就不放到新數組裡面,也就是不做處理;
* 如果沒有出現過,那麼就把它放到新的數組裡面
* 這種方法數組原來的相對順序可以保證
* 時間復雜度是n^2和空間復雜度是n
*
*
@param nums 輸入需要去重的數組
*
@return 返回去重後數組的長度
*/
public static int unique1(int[] nums) {
if (nums.length == 0) {
return 0;
}
int[] tmpNums = new int[nums.length];
tmpNums[
0] = nums[0];
int index = 1;
for (int i = 1, len = nums.length; i < len; i++) {
int j = 0;
for (; j < index; j++) {
if (tmpNums[j] == nums[i]) {
break;
}
}
if (j == index) {
tmpNums[index
++] = nums[i];
}
}
nums
= tmpNums;
return index;
}
F. java涓鎬庝箞鏍峰瓙鎵懼嚭鏁扮粍涓閲嶅嶇殑鏁幫紝騫跺幓闄
public static void main(String[] args) {
//鍙浠ユ崲縐嶆濊礬錛屾妸鏁扮粍鏀懼埌set閲岄潰錛坰et鐨勫間笉浼氶噸澶嶏級灝卞彲浠ュ幓閲嶄簡
Integer[] arr = {85,4,2,6,11,4,5,8,9};
Set<Integer> set = new HashSet<Integer>();
for(Integer i : arr)
set.add(i);
for(Object j: set.toArray())
System.out.print(j + " ");
}