从数组列表中删除具有特定值的项目

2022-09-02 22:50:05

我创建了一个对象列表,并让人们添加到其中:

ArrayList<Person> peeps = new ArrayList<Person>(); 

peeps.add(new Person("112", "John", "Smith"));
peeps.add(new Person("516", "Jane", "Smith"));
peeps.add(new Person("114", "John", "Doe"));

我正在尝试弄清楚如何通过ID号从列表中删除该人。因此,如果我想删除ID号为114的人,但现在没有删除它在列表中的位置,我该怎么办?


答案 1

使用 Java8:

peeps.removeIf(p -> p.getId().equals("112"));

请注意,这相当于线性搜索,需要时间。如果此操作将频繁重复,建议使用 a,以便将速度加快到 。O(n)HashMapO(1)

或者,使用排序列表也可以解决问题,但需要时间。O(log n)


答案 2

如果您要使用ArrayList,唯一的方法是浏览整个列表,查看每个人,并看到它的ID号是114。对于较大的数据集,这不会有效,应该避免。

如果您可以更改数据结构,那么某种Map会更好(HashMap通常是一个不错的选择)。您可以将ID号作为“密钥”,然后将其与每个人相关联。稍后,您可以按键查询地图。缺点是你只能有一个值作为键,所以你不能同时说名字和ID号键

编辑:
使用ArrayList的更有效方法是按ID号对其进行排序。然后,您可以使用 Collections.binarySearch() 之类的东西按 ID 号快速访问元素。缺点是,从排序数组中删除/插入到排序数组中是昂贵的,因为必须移动元素的所有更大的东西。因此,如果您要进行的更改与读取次数相比相对较少,则这可能是可行的


推荐