在不知道元素的索引的情况下,我可以从哪个java容器中更容易地删除元素?
有没有java容器有两个方法,add和remove,它们只接受元素(而不是索引) 我想这样做:在不知道元素的索引的情况下,我可以从哪个java容器中更容易地删除元素?,java,containers,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); Mag
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);
MagicContainer mc=MagicContainer();
mc.add(新的Foo());
mc.add(someFoo1=newfoo());
mc.add(新的Foo());
mc.add(someFoo2=newfoo());
mc.移除(1);
mc.移除(2);
任何集合实现都应该工作。任何集合实现都应该工作。每个Java都有一个和一个方法来实现您想要的功能
由于Collection
是一个接口,因此您需要选择其中一个实现(通常也是or实现)。这是一个相当普遍的选择
A是另一个可能的候选人
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);
collection mc=newarraylist();
mc.add(新的Foo());
mc.add(someFoo1=newfoo());
mc.add(新的Foo());
mc.add(someFoo2=newfoo());
mc.移除(1);
mc.移除(2);
您想要哪种特定的实现,将取决于您想要的其他属性
如果要保持已定义的顺序并按索引访问对象,则需要一个列表
实现。“默认”列表是ArrayList
。如果您经常在末尾以外的任何位置删除/添加元素,则LinkedList
将提供更好的性能(但大多数情况下您不会注意到差异)
如果要避免重复对象,则需要Set
实现。“default”Set
是HashSet
,但偶尔也会使用a,提供了定义顺序的额外好处(但它要求您提供a或确保所有元素都是)。每个Java都有一个和一个方法来做您想做的事情
由于Collection
是一个接口,因此您需要选择其中一个实现(通常也是or实现)。这是一个相当普遍的选择
A是另一个可能的候选人
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);
collection mc=newarraylist();
mc.add(新的Foo());
mc.add(someFoo1=newfoo());
mc.add(新的Foo());
mc.add(someFoo2=newfoo());
mc.移除(1);
mc.移除(2);
您想要哪种特定的实现,将取决于您想要的其他属性
如果要保持已定义的顺序并按索引访问对象,则需要一个列表
实现。“默认”列表是ArrayList
。如果您经常在末尾以外的任何位置删除/添加元素,则LinkedList
将提供更好的性能(但大多数情况下您不会注意到差异)
如果要避免重复对象,则需要Set
实现。“default”Set
是HashSet
,但偶尔也会使用a,提供了定义顺序的额外好处(但它要求您提供a或确保所有元素都是)。如响应所述,它是java.util.Set。如果你想使用Set,你必须在Foo类中实现equals和hashCode。@维克托:如果对象的默认行为(即每个对象只等于自身)是可接受的,你可以使用HashSet
&co而不重写hashCode()
和equals()
@约阿希姆:是的,当然,就像回答说的,是java.util.Set。如果你想使用Set,你必须在Foo类中实现equals和hashCode。@维克托:如果对象的默认行为(即每个对象只等于自身)是可接受的,你可以使用HashSet
&co而不重写hashCode()
和equals()
@Joachim:是的,当然,据我所知,我需要知道索引编号才能从ArrayList中删除某些内容,所以只有实现Set接口的集合看起来是可以的。@Noised remove可以接受对象引用,并且在所有列表实现中都可用。不需要索引。@noised:remove()
实际上在列表上重载。有一个将索引作为int
,还有一个(链接在上面)将要删除的对象作为索引(这是由集合
接口继承的。据我所知,我需要知道索引编号才能从ArrayList中删除某些内容,因此只有实现Set接口的集合看起来是可以的。@Noised remove可以接受对象引用,并且在所有列表实现中都可用。不需要索引。@Noised:remove()
实际上是在列表上重载的。有一个将索引作为int
的,还有一个(链接在上面)将对象移除(那一个是由集合
接口继承的。虽然不是严格的false,但这不是整个存储。因此,集合
不必是集合
就可以了!虽然不是严格的false,但这不是整个存储。因此,集合
不必是集合
就可以了可能!