1. 程式人生 > >java:去除陣列重複元素的四種方法

java:去除陣列重複元素的四種方法

方法1:

需要一個儲存去重後元素的陣列,然後兩層迴圈,外層遍歷原陣列,內容逐個判斷是否和之後的元素重複,然後再提出來存入新的陣列。方法System.arraycopy(被複制的陣列,起始下標,接收的新陣列,起始下標,結束下標);可以直接複製陣列,既然這樣,我就沒必要糾結新陣列的長度了,直接宣告一個跟原陣列長度一樣的臨時陣列,只要記錄下去重後的元素個數,然後就可以確定去重後陣列長度再去將臨時陣列拷貝到新陣列就行了。 
package testPro.test;


public class testDistinctArr {

	public static void main(String[] args) {
		String[] arr = new String[7];
		arr[0] = "a";
		arr[1] = "a";
		arr[2] = "b";
		arr[3] = "c";
		arr[4] = "d";
		
		System.out.println(arr.toString());
		for (String s : arr) {
			System.out.println(s);
		}
		System.out.println("===============");
		Object[] s  = ifRepeat(arr);
		for (Object o : s) {
			System.out.println(o);
		}
		
		
	}

	/**
     * 去掉陣列中重複的元素
     *
     * @param arr
     * @return
     */
	//方法一:需要傳入一個Object陣列,然後返回去重後的陣列  
    public static Object[] ifRepeat(Object[] arr){  
        //用來記錄去除重複之後的陣列長度和給臨時陣列作為下標索引  
        int t = 0;  
        //臨時陣列  
        Object[] tempArr = new Object[arr.length];  
        //遍歷原陣列  
        for(int i = 0; i < arr.length; i++){  
            //宣告一個標記,並每次重置  
            boolean isTrue = true;  
            //內層迴圈將原陣列的元素逐個對比  
            for(int j=i+1;j<arr.length;j++){  
                //如果發現有重複元素,改變標記狀態並結束當次內層迴圈  
                if(arr[i]==arr[j]){  
                    isTrue = false;  
                    break;  
                }  
            }  
            //判斷標記是否被改變,如果沒被改變就是沒有重複元素  
            if(isTrue){  
                //沒有元素就將原陣列的元素賦給臨時陣列  
                tempArr[t] = arr[i];  
                //走到這裡證明當前元素沒有重複,那麼記錄自增  
                t++;  
            }  
        }  
        //宣告需要返回的陣列,這個才是去重後的陣列  
        Object[]  newArr = new Object[t];  
        //用arraycopy方法將剛才去重的陣列拷貝到新陣列並返回  
        System.arraycopy(tempArr,0,newArr,0,t);  
        return newArr;  
    }  
}

去重效果:

方法2:

只需要建立一個集合,然後遍歷陣列逐一放入集合,只要在放入之前用contains()方法判斷一下集合中是否已經存在這個元素就行了,然後用toArray轉成陣列一切搞定。
 public static Object[]  ifRepeat2(Object[] arr){  
        //建立一個集合  
        List list = new ArrayList();  
        //遍歷陣列往集合裡存元素  
        for(int i=0;i<arr.length;i++){  
            //如果集合裡面沒有相同的元素才往裡存  
            if(!list.contains(arr[i])){  
                list.add(arr[i]);  
            }  
        }  
          
        //toArray()方法會返回一個包含集合所有元素的Object型別陣列  
        Object[] newArr = list.toArray();  
		return newArr;  
  
    }  

執行效果:

方法3:

利用Set集合無序不可重複的特性進行元素過濾。 

    public static Object[] ifRepeat3(Object[] arr){  
        //例項化一個set集合  
        Set set = new HashSet();  
        //遍歷陣列並存入集合,如果元素已存在則不會重複存入  
        for (int i = 0; i < arr.length; i++) {  
            set.add(arr[i]);  
        }  
        //返回Set集合的陣列形式  
        return set.toArray();  
    } 

執行效果:

方法4:

連結串列的雜湊集合:有順序,不重複。
 public static Set<Object>  ifRepeat4(Object[] arr){  
          
        Set<Object> haoma = new LinkedHashSet<Object>();  
        for (int i = 0; i < arr.length; i++) {  
            haoma.add(arr[i]);  
        }  
		return haoma;  
          
          
    } 

執行效果: