插入重复我是新手,去渣。我有一个ArrayList
,我想避免重复插入。我ArrayList
是的Java:避免在ArrayList中
ArrayList<kar> karList = new ArrayList<kar>();
和我要检查该字段为:
kar.getinsertkar().
我已阅读,我可以使用HashSet
或HashMap
,但我不知道。
插入重复我是新手,去渣。我有一个ArrayList
,我想避免重复插入。我ArrayList
是的Java:避免在ArrayList中
ArrayList<kar> karList = new ArrayList<kar>();
和我要检查该字段为:
kar.getinsertkar().
我已阅读,我可以使用HashSet
或HashMap
,但我不知道。
使用HashSet
而不是ArrayList
。但是,要真正使HashSet
确实工作得很好,你必须重写插入HashSet
类/对象的equals()
和hashCode()
方法。
敌人例如:
Set<MyObject> set = new HashSet<MyObject>();
set.add(foo);
set.add(bar);
public class MyObject {
@Override
public boolean equals(Object obj) {
if (obj instanceof MyObject)
return (this.id = obj.id)
else
return false;
}
// now override hashCode()
}
请参看下面的documentation用于覆盖hashCode()
和equals()
。
我使用的ArrayList遍布在我班上的其他方法,我能怎样改变? – user2766131
+1很好的建议,我们可以指出的是,进入了集中的对象应该有一个适当的equals()和hashCode()方法来实现。 – vikingsteve
在一个HashSet使用的方法应该是同一个ArrayList,因为它们都实现了相同的接口。 – blackpanther
每当你想避免重复,要使用一个Set
。
在这种情况下,一个HashSet会就好了你。
HashSet karSet = new HashSet();
karSet.add(foo);
karSet.add(bar);
karSet.add(foo);
System.out.println(karSet.size());
//Output is 2
为了完整起见,我还建议您使用该类的通用(参数化)版本,假设Java 5或更高版本。
HashSet<String> stringSet = new HashSet<String>();
HashSet<Integer> intSet = new HashSet<Integer>();
...etc...
这会给你一些类型的安全以及获取项目进出你的设置。
并请使用参数化类型... – vikingsteve
也通常我们使用瓦尔接口类型:'设置
您可以使用LinkedHashSet
,以避免重复元素并保留插入顺序。
http://docs.oracle.com/javase/7/docs/api/java/util/LinkedHashSet.html
一套很简单,可以不包含重复的,因此听起来很适合你的集合。
这也是很容易实现。例如:
Set<String> mySet = new HashSet<String>();
这将为您提供一个可以保存String类型对象的集合。
要添加到组也很简单:
mySet.add("My first entry!");
由一组的定义,你可以添加任何你想要的,从来没有碰到一个副本。
玩得开心!
编辑:如果你决定你是死心塌地使用一个ArrayList,这是简单的一个对象是否已经在列表中添加它。例如:
public void addToList(String newEntry){
if(!myList.contains(newEntry))
myList.add(newEntry);
}
注:我所有的例子都假定你正在使用String对象,但他们可以很容易地被交换到任何其他对象类型。
您需要使用任何Set
实施,e.g您可以使用HashSet
。 如果您想将add
自定义对象kar
纳入您的HashSet
,您需要override
equals
和hashcode
方法。 你可以阅读更多关于equals
和hashcode
,see
“但我不知道”你是什么意思?使用'HashSet',就像你读过的一样。 –
[线索](http://docs.oracle.com/javase/tutorial/collections/interfaces/set.html) – ajb
注意,没有规定说你不能有* *两者的'ArrayList'和' HashSet'与相同的元素。你可以使用一个'ArrayList'来保存你想要的顺序的元素,'HashSet'来检查一个元素是否已经存在。 (这个检查比搜索'ArrayList'快,但是维护两个集合会减慢速度。)有时候这是正确的做事方式。 – ajb