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

我正在尝试从对象数组中删除一个对象,但是我似乎无法让它正常工作。我是 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 MAX

static final int MAX = 10;

//Define a constant PROMPT

static final String PROMPT = "---->";

//Define a constant SPACES

static final String SPACES = "     ";

//String array of menu options

static 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 QUIT

static final int QUIT = options.length;

//Create an array capable of managing up to MAX Dog instances

static Dog pets[] = new Dog[MAX];

static Dog empty[] = new Dog[MAX];

//Define a value 'count' to indicate number of objects in array

static int count = 0;

//A menu title

static String title = "Dog Manager";

//Define a menu using title & options

static Menu myMenu = new Menu(title,options);

//Define a Scanner

static 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;

        }



哔哔one
浏览 113回答 3
3回答

LEATH

在java中,当初始化数组时,它会为初始化保留内存,该内存需要保存与声明的数组的数据类型相对应的数据。所以删除数组元素是你不能做的事情。您可以做的简单事情是通过覆盖需要从数组中删除的数组元素来向左移动其他数组元素。这意味着声明一个新变量来保存数组当前保存的元素数量。那么删除数组元素就变得简单了。从要删除的元素开始向左移动元素。将变量减 1当您想要获取当前数组元素时,只需参考 no of elements 变量循环遍历数组即可。

胡子哥哥

在 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));

慕工程0101907

在https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array中,告诉您可以使用 array.splice(pos, n) 按索引删除项目,其中 pos 是开始删除的索引,n 是删除的元素数量。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java