为了账号安全,请及时绑定邮箱和手机立即绑定

如何在不创建新数组或不使用 ArrayList 的情况下从数组中删除元素?

如何在不创建新数组或不使用 ArrayList 的情况下从数组中删除元素?

哔哔one 2023-10-13 16:36:59
我正在尝试从对象数组中删除一个对象,但是我似乎无法让它正常工作。我是 java 新手,注意到你不能简单地对数组执行 .remove() 。我知道你可以使用ArrayList,但是有没有办法从java中的数组中删除元素?我知道从技术上讲你无法做到这一点,因为数组是固定长度的,所以我所做的是将值 null 分配给数组中的对象引用。这是可行的,但是当我打印数组时,我收到此错误。错误 java.lang.NullPointerException对象定义public class Dog {    //Iniatilising instance variables    private String name;    private String breed;    private Gender gender;    private int age;    ...测试类常量public class TestDog {//Create a constant value for MAXstatic final int MAX = 10;//Define a constant PROMPTstatic final String PROMPT = "---->";//Define a constant SPACESstatic final String SPACES = "     ";//String array of menu optionsstatic final String options[] = {"Add new Dog","Display details for a Dog",        "Update details for a Dog","List all Dogs","Delete all Dogs","Delete one Dog","Quit"};//Define a constant QUITstatic final int QUIT = options.length;//Create an array capable of managing up to MAX Dog instancesstatic Dog pets[] = new Dog[MAX];static Dog empty[] = new Dog[MAX];//Define a value 'count' to indicate number of objects in arraystatic int count = 0;//A menu titlestatic String title = "Dog Manager";//Define a menu using title & optionsstatic Menu myMenu = new Menu(title,options);//Define a Scannerstatic Scanner input = new Scanner(System.in);测试类删除方法    public static void deleteOneDog() {    System.out.println("\nOK - Delete one dog");    boolean noDogs = false;    if (count == 0) {        System.out.println(PROMPT+"Sorry, there are no dogs.");        noDogs = true;        }
查看完整描述

3 回答

?
LEATH

TA贡献1936条经验 获得超6个赞

在java中,当初始化数组时,它会为初始化保留内存,该内存需要保存与声明的数组的数据类型相对应的数据。

所以删除数组元素是你不能做的事情

您可以做的简单事情是通过覆盖需要从数组中删除的数组元素来向左移动其他数组元素。这意味着声明一个新变量来保存数组当前保存的元素数量。

那么删除数组元素就变得简单了。

  • 从要删除的元素开始向左移动元素。

  • 将变量减 1

    当您想要获取当前数组元素时,只需参考 no of elements 变量循环遍历数组即可。


查看完整回答
反对 回复 2023-10-13
?
胡子哥哥

TA贡献1825条经验 获得超6个赞

在 Java 中没有直接的方法从数组中删除元素。虽然Java对象中的Array,但它不提供任何方法来搜索add()remove()搜索Array中的元素。ArrayList这就是像HashSet 这样的 Collection 类非常流行的原因。

尽管

感谢Apache Commons Utils,您可以使用该类ArrayUtils比您自己操作更轻松地从数组中删除元素。要记住的一件事是,Java 中的数组是固定大小的,一旦创建数组,就无法更改其大小,这意味着删除或删除项目不会减少数组的大小。事实上,这是 Java 中 Array 和 ArrayList 之间的主要区别。

您需要做的是创建一个新数组,并使用System.arrayCopy()或任何其他方式将该数组的剩余内容复制到新数组中。事实上,您将使用的所有其他 API 和函数都会执行此操作,但您无需重新发明轮子。

   import java.util.Arrays;

    import org.apache.commons.lang.ArrayUtils;


     ....

    //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 an Array

    // using Apache Commons ArrayUtils

    test = ArrayUtils.remove(test, 2); //removing element at index 2


    // Size of an array must be 1 less than the original array

    // after deleting an element

    System.out.println("Size of the array after

              removing an element  : " + test.length);

    System.out.println("Content of Array after

             removing an object : " + Arrays.toString(test));


查看完整回答
反对 回复 2023-10-13
?
慕工程0101907

TA贡献1887条经验 获得超5个赞

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array中,告诉您可以使用 array.splice(pos, n) 按索引删除项目,其中 pos 是开始删除的索引,n 是删除的元素数量。



查看完整回答
反对 回复 2023-10-13
  • 3 回答
  • 0 关注
  • 82 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信