java陣列中重複元素的去重

新手程式設計師暢宇嘯發表於2020-12-03

方式①

陣列轉集合轉陣列

方式一,我們就先說最簡單,最常用的,陣列 轉 集合 轉 陣列

public static void main(String[] args) {
        //宣告一個需要去重的陣列
        Object[] arr = {1,1,1,2,3,3,4,5,"夏","夏","冬","春",};
        //建立一個集合
        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();
        //遍歷輸出一下測試是否有效
        for(int i=0;i<newArr.length;i++){
            System.out.print(" "+newArr[i]);
        }

}

list.contains方法
當list呼叫contains()方法並傳遞一個元素時,會執行遍歷,逐個對比item是否等於該元素,當遍歷結束後,如果還沒有一個元素等於該元素的值,則返回false, 否則返回true

偷懶的方法

直接使用set集合的不可重複性

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

方式②

建立一個臨時陣列存放去重後的陣列

 //宣告一個需要去重的陣列
 Object[] arr = {1,1,1,2,3,3,4,5,"夏","夏","冬","春",};
  //用來記錄去除重複之後的陣列長度和給臨時陣列作為下標索引
   int t = 0;
        //臨時陣列
        Object[] tempArr = new Object[arr.length];
        //遍歷原陣列
        for(int i = 0; i < arr.length; i++){
            //宣告一個標記,(賦值true,跟false區分開),並每次重置
            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;
    }

System.arrayCopy方法
public static void arraycopy
(Object src,
int srcPos,
Object dest,
int destPos,
int length)
程式碼解釋:
  Object src : 原陣列
int srcPos : 從後設資料的起始位置開始
  Object dest : 目標陣列
  int destPos : 目標陣列的開始起始位置
  int length : 要copy的陣列的長度

相關文章