从ArrayList Java中删除

时间:2009-11-27 19:50:03

标签: java arraylist

我正在尝试从数组列表中删除一个项目,方法是从JList中选择它并单击“删除”。

我到目前为止的代码,

buttondeleteContact.addActionListener(new ActionListener() {    
  public void actionPerformed(ActionEvent event) {
    if (contactList.getSelectedIndex() != -1) {
      people.removeElementAt(contactList.getSelectedIndex());   
      People.remove(contactList.getSelectedIndex());
      System.out.println(People);
    }
  });

我知道有些东西的名字很差,但是人(小写的p)是我的DefaultListModel的名字而People(大写的P)是我的ArrayList的名字。基本上,我只想从数组中删除4行的块。那么,数组中的位置,以及它之后的3。

4 个答案:

答案 0 :(得分:9)

虽然ListArrayList没有直接(且可访问)removeRange()方法,但通过提供subList()方法可以消除对此类方法的需求。

subList()提供原始列表的一部分视图。需要注意的重要部分是修改返回的List也会修改原始List。因此,要删除索引为indexindex+3的元素,您可以执行以下操作:

myList.subList(index, index+4).clear();

请注意,subList()的第二个参数是独占的,因此此subList()调用将返回大小为4的List

答案 1 :(得分:4)

这是一个奇怪的要求。之后删除3个项目?它们如何相互关联?他们必须以某种方式相互关联。听起来你有一个如下所示的联系人列表:

List<String> contacts = new ArrayList<String>();
contacts.add("John Doe");
contacts.add("Main street 1"); // His street.
contacts.add("New York"); // His city.
contacts.add("555 123 456 789"); // His phone.
// etc..

这是真的吗?那么你应该考虑将相关元素分组到另一个真实世界中表示对象。您可以创建一个如下所示的Javabean类Contact

public class Contact {
    private String name;
    private String street;
    private String city; // You could consider another Address class for street and city as well.
    private String phone;
    // Add/generate getters and setters.

    public Contact() {
        // Keep default constructor alive.
    }

    public Contact(String name, String street, String city, String phone) {
        this.name = name;
        this.street = street;
        this.city = city;
        this.phone = phone;
    }
}

这样你最终会得到

List<Contact> contacts = new ArrayList<Contact>();
contacts.add(new Contact("John Doe", "Main Street 1", "New York", "555 123 456 789"));
// etc..

这样您就可以按索引删除单个真实 Contact

您甚至可以将其设为People

的属性
public class People {
    private List<Contact> contacts;
    // +getter +setter
}

试着想想OO。

答案 2 :(得分:1)

Joachim的回答提供了直接从ArrayList删除的好方法,但我怀疑你真的想直接从模型中删除范围。 DefaultListModel有一个removeRange方法:

int index = contactList.getSelectedIndex();
people.removeRange(index, index + 4);

我希望它具有正确的行为,也可以从基础列表中删除项目。假设情况就是这样,那我怀疑这是最好的方式。再说一遍,我不太了解Swing:)

答案 3 :(得分:1)

尝试,

people.subList(index, index+4).clear()