从对象数组中删除对象

时间:2014-12-12 05:33:56

标签: java arrays object

我正在研究java中的一系列对象。

我做了一个Add,它有效。我在实现删除(从数组中)时遇到了问题。

对象来自名为Student的类,它具有名称和ID作为成员

我的工作:

// delete an object
if (count == 0)
    System.out.println("Sorry there are no items in the system");
else {
    System.out.print("Please enter the ID of Student you'd like to Delete: "); 
    String searchID = in.nextLine();
    for (int i =1 ; i<count; i++) { // first : search for the object 
        if (searchID.equalsIgnoreCase(Students[i].getID())) {
            System.out.print("Are you sure you want do delete " 
                    + Students[i].getName()+ " from the System? ");
            String ans = in.nextLine();
            if (ans.equalsIgnoreCase("no")) { break; }
            if (ans.equalsIgnoreCase("yes")) { 
                Students[i] = Students[Students.length-1];
                break;
            }
        } else {
            System.out.println("Sorry, you need to type a valid ID to delete it's object.. ");
        }                     
    }

5 个答案:

答案 0 :(得分:0)

for循环之前创建一个与输入数组大小相同的新数组。

如果您不想删除它,只能添加到新数组。

然后,忽略具有空值的数组项

答案 1 :(得分:0)

你无法在数组中轻松实现这一点。你可以试试arraylist。

删除

arrayList.remove(Object) or arrayList.remove(index) 

如果你想做那个阵列那么。

  1. 找到删除对象的索引
  2. 创建一个长度为1的数组的新数组。
  3. 从0复制到元素index-1到新数组(如果index为0则不需要此步骤。)
  4. 从索引+ 1复制到数组的长度到新数组(如果索引是数组的末尾则不需要)。

答案 2 :(得分:0)

首先,你应该只使用一个ArrayList并使用内置的here。如果您一直在使用数组,则需要在将Students的最后一个元素复制到已删除对象后调整数组大小。如果没有这种截断,您只需复制数组的最后一个元素。

因为您无法调整java数组的大小,这实际上意味着您需要将除最后一个元素之外的所有数组复制到新数组中。为此,您可以尝试添加

  

Students = Arrays.copyOf(Students,Students.length-1);

休息之前

但是如果使用ArrayList,则可以减少内存开销。

答案 3 :(得分:0)

首先,我无法理解代码的逻辑。在从用户那里获得100 * 2输入之前,您应该检查答案。无论如何,如果你真的想用简单的java数组做这个,你应该做这样的事情,然后删除空对象。这是一种效率低下的方法:

    String[] a = {"student1", "student2"};
    String[] b = {"strudnt3"};
    String[] c = new String[a.length + b.length];
    // removing one object
    a[1] = null;
    // copying both arrays to c
    System.arraycopy(a, 0, c, 0, a.length);
    System.arraycopy(b, 0, c, a.length, b.length);
    // ignore null objects
    System.out.println(Arrays.toString(c));

更好的方法是使用ArrayList:您可以轻松地在List中添加和删除对象。在这里查看JavaDoc http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html

如果要使用ArrayList重写代码:

    // creat an ArrayList of the object
    ArrayList<Student> studentList = new ArrayList<Student>();

    // then, ask if the user wants to add object
    Scanner in = new Scanner (System.in);
    System.out.print("Would you like to add an object?");

    while (true) {
        String ans = in.nextLine();
        if (ans.equals("no")) 
        {
            break;
        }
        // else, create the object and add it to the ArrayList
        // you can add the attributes from the constructor
        studentList.add(new Student(22, "name"));
    }

然后你可以轻松地创建一个Iterator,在你的List中做一个Loop并匹配你想要的任何字段,最后从列表中删除该对象:

    if (//find the object) {
        studentList.remove(object)
    }

还要检查此问题以从ArrayList中删除对象: remove an object from a List

答案 4 :(得分:0)

正如其他人所建议的那样,最好的数据结构是使用ArrayList,因为它提供了内置的api方法来有效地动态调整Array的大小。它让开发人员再次重写它。

如果完全学习,请从上面的例子中。 您可以在删除的索引处指定null,或者最佳方式

  1. 删除对象
  2. 将子数组从删除的索引复制到数组长度
  3. 相应地调整数组,即..,以减少Arraylength-1。
  4. 你可以通过使用Arraylist实现所有这一切,为什么不使用它;)