關(guān)于刪除數(shù)組元素的問(wèn)題

在這里我說(shuō)幾種方法
第一種利用了System.arraycopy method
/*

  • 此方法主要即找出要?jiǎng)h除元素的位置,然后再左右復(fù)制進(jìn)目標(biāo)數(shù)組 在jdk保 Long包下面 public static void
  • arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
  • src - 源數(shù)組。
  • srcPos - 源數(shù)組中的起始位置。
  • dest - 目標(biāo)數(shù)組。
  • destPos - 目標(biāo)數(shù)據(jù)中的起始位置。
  • ength - 要復(fù)制的數(shù)組元素的數(shù)量。
    */
    刪除元素方法如下:
public static int[] isit(int[] arr,int ele) {//這個(gè)方法一次只能刪除一次,如果有多個(gè)重復(fù)那么要多次調(diào)用即可
        int[] ar = new int[arr.length-1];
        int index = 0;//用作標(biāo)號(hào)
        for (int i = 0; i < arr.length; i++) {
            if(arr[i] == ele) {
                index = i;
            }
        }
        /*
         * 此方法主要即找出要?jiǎng)h除元素的位置,然后再左右復(fù)制進(jìn)目標(biāo)數(shù)組 在jdk保 Long包下面 public static void
         * arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
         * src - 源數(shù)組。
         * srcPos - 源數(shù)組中的起始位置。
         * dest - 目標(biāo)數(shù)組。
         * destPos - 目標(biāo)數(shù)據(jù)中的起始位置。
         * ength - 要復(fù)制的數(shù)組元素的數(shù)量。
         */
        int[] a1 = new int[index];//前段數(shù)組長(zhǎng)度
        int[] a2 = new int[ar.length - a1.length];
        System.arraycopy(arr, 0, a1, 0, a1.length);
        System.arraycopy(arr, index+1, a2, 0, a2.length);
        //這注釋的for循環(huán)合并就是下面的一個(gè)for循環(huán)
//      for (int i = 0; i < a1.length; i++) {
//          ar[i] = a1[i];
//      }
//      for (int i = 0; i < a2.length; i++) {
//          ar[i+a1.length] = a2[i];
//      }

        for (int i = 0; i < ar.length; i++) {
            if(i < a1.length) {//把前段數(shù)據(jù)添加到返回?cái)?shù)組中來(lái)
                ar[i] = a1[i];
            }
            if(i >= a1.length) {//把后段數(shù)據(jù)添加到返回?cái)?shù)組中來(lái)
                ar[i] = a2[i-a1.length];//a2的索引必須從0開(kāi)始所以要減去前面a1數(shù)組的長(zhǎng)度
            }
        }
        return ar;
    }

測(cè)試

public static void main(String[] args) {
        int[] arr = new int[] {4,6,3,7,10,9,6743,3262,7537,99};
        int ele = 9;
        int [] ar = isit(arr, ele);//如果9只有1個(gè)那么調(diào)用一次即可
        /*如果像這樣
        int[] arr = new int[] {4,6,3,7,10,9,9,6743,3262,7537,99};
        有兩個(gè)9那么就調(diào)用兩次即可
        int [] ar = isit(isit(arr, ele), ele);
        如果3個(gè)那么就調(diào)用3次,當(dāng)然這也可以寫(xiě)成一個(gè)遞歸遞歸我這沒(méi)有加
        */
        System.out.println("源:"+Arrays.toString(arr));
        System.out.println("刪:"+Arrays.toString(ar));
    }

console

源:[4, 6, 3, 7, 10, 9, 6743, 3262, 7537, 9, 99]
刪:[4, 6, 3, 7, 10, 6743, 3262, 7537, 99]

///然后在說(shuō)一種,這種方法挺蠢的
思路也是找到要?jiǎng)h除的索引,然后在把刪除的元素修改為最大的,然后就再次用一個(gè)返回?cái)?shù)組來(lái)接收
源代碼如下

public class DeleteElement {

    public static int[] isArr(int[] arr,int ele) {
        int[] ar = new int[arr.length-1];

        for (int i = 0; i < arr.length; i++) {
            if(arr[i] == ele) {
                arr[i] = Integer.MAX_VALUE;
            }
        }
        //排序  歸并排序
        for (int i = 0; i < arr.length; i++) {
            for (int j = i +1; j < arr.length; j++) {
                if (arr[i] > arr[j]) {//找出值,并修改為最大值
                    arr[i] = arr[i] + arr[j];
                    arr[j] = arr[i] - arr[j];
                    arr[i] = arr[i] - arr[j];
                }
            }
        }
        //
        for (int i = 0; i < ar.length; i++) {
            ar[i] = arr[i];
        }
        return ar;
    }
    public static long[] isArr(long[] arr,long ele) {
        long[] ar = new long[arr.length-1];
        for (int i = 0; i < arr.length; i++) {
            if(arr[i] == ele) {
                arr[i] = Long.MAX_VALUE;
            }
        }
        //排序  歸并排序
        for (int i = 0; i < arr.length; i++) {
            for (int j = i +1; j < arr.length; j++) {
                if (arr[i] > arr[j]) {//找出值,并修改為最大值
                    arr[i] = arr[i] + arr[j];
                    arr[j] = arr[i] - arr[j];
                    arr[i] = arr[i] - arr[j];
                }
            }
        }
      //----------------------
        for (int i = 0; i < ar.length; i++) {
            ar[i] = arr[i];
        }
        return ar;
    }
    public static double[] isArr(double[] arr,double ele) {
        double[] ar = new double[arr.length-1];
        for (int i = 0; i < arr.length; i++) {
            if(arr[i] == ele) {//找出值,并修改為最大值
                arr[i] = Double.MAX_VALUE;
            }
        }
        //排序  歸并排序
        for (int i = 0; i < arr.length; i++) {
            for (int j = i +1; j < arr.length; j++) {
                if (arr[i] > arr[j]) {
                    arr[i] = arr[i] + arr[j];
                    arr[j] = arr[i] - arr[j];
                    arr[i] = arr[i] - arr[j];
                }
            }
        }
      //----------------------
        for (int i = 0; i < ar.length; i++) {
            ar[i] = arr[i];
        }
        return ar;
    }
    public static float[] isArr(float[] arr,float ele) {
        float[] ar = new float[arr.length-1];
        for (int i = 0; i < arr.length; i++) {
            if(arr[i] == ele) {//找出值,并修改為最大值
                arr[i] = Float.MAX_VALUE;
            }
        }
        //排序  歸并排序
        for (int i = 0; i < arr.length; i++) {
            for (int j = i +1; j < arr.length; j++) {
                if (arr[i] > arr[j]) {
                    arr[i] = arr[i] + arr[j];
                    arr[j] = arr[i] - arr[j];
                    arr[i] = arr[i] - arr[j];
                }
            }
        }
      //----------------------
        for (int i = 0; i < ar.length; i++) {
            ar[i] = arr[i];
        }
        return ar;
    }
    public static short[] isArr(short[] arr,short ele) {
        short[] ar = new short[arr.length-1];
        for (int i = 0; i < arr.length; i++) {
            if(arr[i] == ele) {//找出值,并修改為最大值
                arr[i] = Short.MAX_VALUE;
            }
        }
        //排序  歸并排序
        for (int i = 0; i < arr.length; i++) {
            for (int j = i +1; j < arr.length; j++) {
                if (arr[i] > arr[j]) {
                    arr[i] = (short) (arr[i] + arr[j]);
                    arr[j] = (short) (arr[i] - arr[j]);
                    arr[i] = (short) (arr[i] - arr[j]);
                }
            }
        }
      //----------------------
        for (int i = 0; i < ar.length; i++) {
            ar[i] = arr[i];
        }
        return ar;
    }
    public static byte[] isArr(byte[] arr,byte ele) {
        byte[] ar = new byte[arr.length-1];
        for (int i = 0; i < arr.length; i++) {
            if(arr[i] == ele) {//找出值,并修改為最大值
                arr[i] = Byte.MAX_VALUE;
            }
        }
        //排序  歸并排序
        for (int i = 0; i < arr.length; i++) {
            for (int j = i +1; j < arr.length; j++) {
                if (arr[i] > arr[j]) {
                    arr[i] = (byte) (arr[i] + arr[j]);
                    arr[j] = (byte) (arr[i] - arr[j]);
                    arr[i] = (byte) (arr[i] - arr[j]);
                }
            }
        }
      //----------------------
        for (int i = 0; i < ar.length; i++) {
            ar[i] = arr[i];
        }
        return ar;
    }
}

這個(gè)方法沒(méi)有寫(xiě)測(cè)試方法,但是在我的機(jī)器上倒是測(cè)試過(guò)了,可以運(yùn)行的

另一種方法就是利用for循環(huán)的遍歷來(lái)刪除元素 //方法

public static int[] deleteD(int[] arr, int ele) {//整形
        int[] ax = new int[arr.length - 1];
        int i = 0;// 用作目標(biāo)數(shù)組的指針?biāo)饕?        for (int a : arr) {
            if (!(a == ele)) {// 取 找到指定數(shù)字的相反
                ax[i] = a;// 把遍歷出來(lái)且不等于待刪除元素的元素添加到目標(biāo)數(shù)組(返回?cái)?shù)組)
                i++;
            }
        }
        return ax;
    }

    public static String[] deleteD(String[] strings, String string) {//字符串型
        String[] str = new String[strings.length - 1];
        int i = 0;// 用作目標(biāo)數(shù)組的指針?biāo)饕?        for (String s : strings) {
            if (!string.equals(s)) {// 取 找到指定字符串 的相反
                str[i] = s;// 把遍歷出來(lái)且不等于待刪除元素的元素添加到目標(biāo)數(shù)組(返回?cái)?shù)組)
                i++;
            }
        }
        return str;
    }

測(cè)試

public static void main(String[] args) {
        String[] strings = new String[] { "6", "hdh", "67", "x5", "0", "fg" };// 源數(shù)組
        int[] arr = new int[] { 4, 3, 7, 234, 626, 8, 73, 1, 0, 9 };// 源數(shù)組
        int ele = 1;// 待刪除元素
        String string = "x5";// 待刪除元素

        System.out.println("待刪除元素:" + string + " " + ele);
        System.out.println(Arrays.toString(deleteD(arr, ele)) + "-int \n");
        System.out.println(Arrays.toString(deleteD(strings, string)) + "-String \n");
    }

console

待刪除元素:x5 1
[4, 3, 7, 234, 626, 8, 73, 0, 9]-int 

[6, hdh, 67, 0, fg]-String 
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,568評(píng)論 19 139
  • 前言 最先接觸編程的知識(shí)是在大學(xué)里面,大學(xué)里面學(xué)了一些基礎(chǔ)的知識(shí),c語(yǔ)言,java語(yǔ)言,單片機(jī)的匯編語(yǔ)言等;大學(xué)畢...
    oceanfive閱讀 3,395評(píng)論 0 7
  • 1、查看ssh是否已安裝 在終端輸入 $ ssh -v ,查看版本 1.1 如果出現(xiàn)如下輸出,說(shuō)明這個(gè)ssh已經(jīng)安...
    伯牙呀閱讀 32,023評(píng)論 0 4
  • 文/葉孜 當(dāng)銀杏樹(shù)只剩下枝椏,大地丟了落葉,雪花飄散在半空中,你的背影也隨之消失在路的盡頭。 你說(shuō)圣誕的夜景最美,...
    小小葉不愛(ài)謊言閱讀 407評(píng)論 10 3
  • 唐代:劉皂 雨滴長(zhǎng)門秋夜長(zhǎng),愁心和雨到昭陽(yáng)。淚痕不學(xué)君恩斷,拭卻千行更萬(wàn)行。 宮殿沈沈月欲分,昭陽(yáng)更漏不堪聞。珊瑚...
    chenge微博談閱讀 609評(píng)論 0 1

友情鏈接更多精彩內(nèi)容