-3

我有一个联系人对象数组,其 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;

}

4

7 回答 7

1

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

所以如果我有Array5 个,我可以在里面放 5 个项目,不多不少。您可以做的一件事是在Arraytonull或 0 中设置对象。

编辑:关于您的评论,只需对Array. 在 Java 中查找一个简单的冒泡排序算法。

于 2013-04-09T07:08:27.123 回答
1

尝试

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

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

于 2013-04-09T07:19:30.917 回答
0

您的代码会在第 numContacts 次迭代时出现异常,因为 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。

于 2013-04-09T07:08:12.957 回答
0

为什么不将数组转换为List并使用完全符合您描述的remove(Object o)方法?

这将为您节省一些时间和一些测试。

于 2013-04-09T07:10:20.583 回答
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() 方法!否则什么都不会正常工作!

于 2013-04-09T07:13:46.947 回答
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>类似的数据结构,但线程安全。

于 2013-04-09T07:14:20.433 回答
0

在我看来,当你知道如何使用 arrayList 时,Array 就变得毫无用处了。我建议使用arrayLists。 数组列表教程

在创建 ht econtact arrayList 时这样做:

import java.util.ArrayList;

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

联系人。添加(新联系人());}

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

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

于 2013-04-09T07:17:37.370 回答