java - 在不知道元素索引的情况下,我可以更轻松地从哪个java容器中删除元素?

标签 java containers

是否有任何java容器有两个方法,add,remove,只接受元素(而不是索引)?

我想做这样的事情:

MagicContainer<Foo> mc = MagicContainer<Foo>();

mc.add(new Foo());
mc.add(someFoo1=new Foo());
mc.add(new Foo());
mc.add(someFoo2=new Foo());

mc.remove(someFoo1);
mc.remove(someFoo2);

最佳答案

每个 Java Collection有一个 add()和一个remove()做你想做的事情的方法。

由于 Collection 是一个接口(interface),因此您需要选择其中一种实现(通常也是 SetList 实现)。 ArrayList是一个非常常见的选择。

一个HashSet是另一个可能的候选人。

Colllection<Foo> mc = new ArrayList<Foo>();

mc.add(new Foo());
mc.add(someFoo1=new Foo());
mc.add(new Foo());
mc.add(someFoo2=new Foo());

mc.remove(someFoo1);
mc.remove(someFoo2);

您想要哪种具体实现,将取决于您想要的其他属性。

如果您想保持定义的顺序并通过索引访问对象,那么您将需要一个 List 实现。 “默认”ListArrayList。如果您经常在除了末尾的任何位置删除/添加元素,那么LinkedList将提供更好的性能(但大多数时候您不会注意到差异)。

如果您想避免重复的对象,那么您将需要一个 Set 实现。 “默认”SetHashSet,但是 TreeSet偶尔也会使用,提供定义顺序的额外好处(但它要求您提供 Comparator 或确保所有元素都是 Comparable )。

关于java - 在不知道元素索引的情况下,我可以更轻松地从哪个java容器中删除元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5260528/

相关文章:

java - 仅在 maven-changes-plugin JIRA 报告中包含特定问题

java - Hibernate 支持哪些不同的集合

Java Spring Controller 拒绝除 GET 之外的所有请求

docker - Docker Compose YAML版本1和版本2有什么区别?

linux - 如何在 Dockerfile 中使用here-strings?

c++ - 如何提取 OLE 容器的内容?

java - Java 中 token 的 Hashmap 语法错误

java - 如何使用 sql2o 访问和打印数据

docker - 无法检索容器列表

linux - 检查权限的脚本