Java:避免在arraylist中插入副本
我是java的新手。 我有一个ArrayList
,我想避免重复插入。 我的ArrayList
是
ArrayList karList = new ArrayList();
我要检查的字段是:
kar.getinsertkar().
我已经读过我可以使用HashSet
或HashMap
但我不知道。
每当您想要防止重复时,您想要使用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 stringSet = new HashSet (); HashSet intSet = new HashSet (); ...etc...
这将为您提供一些类型安全性,以便将物品放入和取出您的装置。
使用HashSet
而不是ArrayList
。 但是,要真正使HashSet
良好,必须覆盖插入HashSet
的类/对象的equals()
和hashCode()
方法。
敌人的例子:
Set set = new HashSet (); 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()
信息 ,请参阅以下文档 。
您可以使用LinkedHashSet
,以避免重复的元素并保持插入顺序。
http://docs.oracle.com/javase/7/docs/api/java/util/LinkedHashSet.html
一个集合只是一个集合,不能包含重复项,所以它听起来很完美。
它的实现也非常简单。 例如:
Set mySet = new HashSet ();
这将为您提供一个可以容纳String类型的对象的集合。
添加到集合就是这么简单:
mySet.add("My first entry!");
根据集合的定义,您可以添加任何您想要的内容,而不会遇到重复内容。
玩的开心!
编辑:如果你决定使用ArrayList,那么在添加它之前很容易看到一个对象是否已经在列表中。 例如:
public void addToList(String newEntry){ if(!myList.contains(newEntry)) myList.add(newEntry); }
注意:我的所有示例都假设您正在使用String对象,但可以轻松地将它们交换到任何其他Object类型。
您需要使用任何Set
实现,例如,您可以使用HashSet
。 如果要将自定义对象kar
add
到HashSet
,则需要override
equals
和hashcode
方法。 您可以阅读有关equals
和hashcode
更多信息, 请参阅
您可以实现自己的List,它扩展LinkedList并覆盖其添加方法:
- public boolean add(E e)
- public void add(int index,E element)
- public boolean addAll(Collection collection)
- public boolean addAll(int index,Collection collection)