如何从数组中删除项目并将其他所有内容移动?

时间:2013-04-09 07:04:01

标签: java arrays

我有一个Contact对象的数组,其MAX最多为50个,但是会少得多,所以数组的初始化大小为50.但是我需要我的方法来移除联系人并在其后移动所有内容。我有时似乎工作,但不是每次都这样。

   public Contact remove(String lstnm)
  {
       int contactIndex = findContactIndex(lstnm); // Gets the index of the Contact that needs to be removed
  Contact contactToBeRemoved;

  if(contactIndex == -1) // If the Contact is not in the Array
  {
      contactToBeRemoved = null;
  }
  else
  {
      contactToBeRemoved = Contact_List[contactIndex]; // Assigns the Contact that is going to be removed
      for(int i = contactIndex; i < numContacts; i++) // From where the Contact was removed to the last Contact in the list
      {
          Contact_List[i] = Contact_List[i + 1]; // Shift all of the Contacts after the one removed down
      }
      numContacts -= 1; // One Contact is removed from the total number of Contacts
  }
  return contactToBeRemoved;

}

7 个答案:

答案 0 :(得分:1)

Arrays固定大小,您无法调整大小。另一方面,ArrayList每次添加元素时都会自动调整大小。

因此,如果我的Array为5,我可以放入5个项目,不多也不少。您可以做的一件事是将Array中的对象设置为null或0。

修改:关于您的评论,只需对Array进行排序即可。在Java中查找一个简单的冒泡排序算法。

答案 1 :(得分:1)

    System.arraycopy(contactList, contactIndex + 1, contactList, contactIndex, contactList.length - contactIndex - 1);

请注意,System.arraycopy是复制/移动数组元素的最有效方法

答案 2 :(得分:0)

你的代码会在numContacts'th迭代时给出异常,因为i + 1将超出数组的大小。

   for(int i = contactIndex; i < numContacts-1; i++) 
          {
              Contact_List[i] = Contact_List[i + 1]; 
          }
    Contact_List[Contact_List.length-1] = null;

Ps:在这种情况下使用Array非常糟糕,请考虑使用ArrayList。

答案 3 :(得分:0)

为什么不将数组转换为List并使用完全按照您描述的方式执行的remove(Object o)方法?

这会节省你一些时间和一些测试。

答案 4 :(得分:0)

使用集合而不是数组,这样你就不必完成所有的转换过程! 集合自动转移元素,你不必担心它!

你可以这样做,

ArrayList<Contact> list=new ArrayList<Contact>();
Contact c=new Contact();

Contact.Add(Contact);
Contact.remove(Contact);

并且ArrayList中还有更多行为!

您可以写下删除方法如下

public Contact remove(String lstnm)
  {
       Contact c=new Contact(1stnm);
       Contact contactToBeRemoved=list.get(1);
       List.remove(c);
        return contactToBeRemoved;
  }

但是你必须覆盖Contact类中对象类的equal()和compareTo()方法! 否则什么都不会正常工作!

答案 5 :(得分:0)

出于此目的使用ArrayList

ArrayList<Contact> array = new ArrayList<Contact>(50);

创建一个初始容量为50的动态数组(随着更多元素添加到ArrayList中,这会增加)

array.add(new Contact());
array.remove(contact); //assuming Contact class overrides equals()

ArrayList在内部维护一个数组并执行重新调整大小,重构,因为添加已删除元素。

您也可以使用类似数据结构的Vector<Contact>,但线程安全。

答案 6 :(得分:0)

在我看来,当你知道如何使用arrayList时,数组变得毫无用处。我建议使用arrayLists。 ArrayList tutorial

在创建ht econtact arrayList时这样做:

import java.util.ArrayList;

public static void main(String args[]){
ArrayList<Contact> contacts = new ArrayList();

contacts.add(new Contact()); }

使用arrayLists,这是最好的方法。阅读教程,其中有很多。 我建议它导致arralist是动态的,这意味着你可以添加和删除项目,并为你调整大小。

希望即使我的答案不是很完整我也能提供帮助