我是java的新手。我有一个ArrayList
,我希望避免重复插入。我的ArrayList
是
ArrayList<kar> karList = new ArrayList<kar>();
我要检查的字段是:
kar.getinsertkar().
我读过我可以使用HashSet
或HashMap
,但我不知道。
答案 0 :(得分:23)
每当您想要防止重复时,您都希望使用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...
这样可以为您提供一些类型的安全性,以便将物品放入和取出物品。
答案 1 :(得分:7)
使用HashSet
代替ArrayList
。但是,要真正使HashSet
真正有效,您必须覆盖插入equals()
的类/对象的hashCode()
和HashSet
方法。
敌人的例子:
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()
}
有关覆盖hashCode()
和equals()
的信息,请参阅以下documentation。
答案 2 :(得分:6)
您可以使用LinkedHashSet
,以避免重复的元素并保持插入顺序。
http://docs.oracle.com/javase/7/docs/api/java/util/LinkedHashSet.html
答案 3 :(得分:5)
一个集合只是一个不能包含重复项的集合,因此听起来很完美。
实施起来也很简单。例如:
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对象,但可以轻松地将它们交换到任何其他Object类型。
答案 4 :(得分:0)
您需要使用任何Set
实施,例如,您可以使用HashSet
。
如果您希望将add
自定义对象kar
添加到HashSet
,则需要override
equals
和hashcode
方法。
您可以详细了解equals
和hashcode
,see
答案 5 :(得分:0)
您可以实现自己的List,它扩展LinkedList并覆盖其添加方法: