java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言, 是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台 (即 JavaEE(j2ee), JavaME(j2me), JavaSE(j2se)) 的总称
下面小编就为大家带来一篇 java 中删除 数组中的指定元素方法小编觉得挺不错的, 现在就分享给大家, 也给大家做个参考一起跟随小编过来看看吧
java 中删除 数组中的指定元素要如何来实现呢, 如果各位对于这个算法不是很清楚可以和小编一起来看一篇关于 java 中删除 数组中的指定元素的例子
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()方法, 将除了要删除的元素外的其他元素都拷贝到新的数组中, 然后返回这个新的数组
来源: http://www.phperz.com/article/18/0220/358858.html