java中刪除 數組中的指定元素

來源:互聯網
上載者:User

java的api中,並沒有提供刪除數組中元素的方法。雖然數組是一個對象,不過並沒有提供add()、remove()或尋找元素的方法。這就是為什麼類似ArrayList和HashSet受歡迎的原因。不過,我們要感謝Apache Commons Utils,我們可以使用這個庫的ArrayUtils類來輕易的刪除數組中的元素。不過有一點需要注意,數組是在大小是固定的,這意味這我們刪除元素後,並不會減少數組的大小。所以,我們只能建立一個新的數組,然後使用System.arrayCopy()方法將剩下的元素拷貝到新的數組中。對於對象數組,我們還可以將數組轉化為List,然後使用List提供的方法來刪除對象,然後再將List轉換為數組。
為了避免麻煩,我們使用第二種方法:

我們使用Apache commons庫中的ArrayUtils類根據索引來刪除我們指定的元素。

Apache commons lang3下載地址:
http://commons.apache.org/proper/commons-lang/download_lang.cgi
下載好後,匯入jar。


import java.util.Arrays;
import org.apache.commons.lang3.ArrayUtils;
/**
 *
 * Java program to show how to remove element from Array in Java
 * This program shows How to use Apache Commons ArrayUtils to delete
 * elements from primitive array.
 *
 */
public class RemoveObjectFromArray{
    public static void main(String args[]) {
                
        //let's create an array for demonstration purpose
        int[] test = new int[] { 101, 102, 103, 104, 105};
    
        System.out.println("Original Array : size : " + test.length );
        System.out.println("Contents : " + Arrays.toString(test));
    
        //let's remove or delete an element from Array using Apache Commons ArrayUtils
        test = ArrayUtils.remove(test, 2); //removing element at index 2
    
        //Size of array must be 1 less than original array after deleting an element
        System.out.println("Size of array after removing an element  : " + test.length);
        System.out.println("Content of Array after removing an object : "
                           + Arrays.toString(test));
    
    }
 
}
Output:
Original Array : size : 5
Contents : [101, 102, 103, 104, 105]
Size of array after removing an element  : 4
Content of Array after removing an object : [101, 102, 104, 105]

 
當然,我們還有其他的方法,不過使用已經的庫或java api來實現,更快速。
我們來看下ArrayUtils.remove(int[] array, int index) 方法原始碼:

 public static int[] remove(int[] array, int index) {
        return (int[])((int[])remove((Object)array, index));
    }

 
在跳轉到remove((Object)array, index)) ,原始碼:

private static Object remove(Object array, int index) {
        int length = getLength(array);
        if(index >= 0 && index < length) {
            Object result = Array.newInstance(array.getClass().getComponentType(), length - 1);
            System.arraycopy(array, 0, result, 0, index);
            if(index < length - 1) {
                System.arraycopy(array, index + 1, result, index, length - index - 1);
            }
            return result;
        } else {
            throw new IndexOutOfBoundsException("Index: " + index + ", Length: " + length);
        }
    }

 
這下明白了ArrayUtils的刪除數組中元素的原理了吧。其實還是要用到兩個數組,然後利用System.arraycopy()方法,將除了要刪除的元素外的其他元素都拷貝到新的數組中,然後返回這個新的數組。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.