我有一个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;
}
答案 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是动态的,这意味着你可以添加和删除项目,并为你调整大小。
希望即使我的答案不是很完整我也能提供帮助