Java:避免在arraylist中插入副本

我是java的新手。 我有一个ArrayList ,我想避免重复插入。 我的ArrayList

 ArrayList karList = new ArrayList(); 

我要检查的字段是:

  kar.getinsertkar(). 

我已经读过我可以使用HashSetHashMap但我不知道。

每当您想要防止重复时,您想要使用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 addHashSet ,则需要override equalshashcode方法。 您可以阅读有关equalshashcode更多信息, 请参阅

您可以实现自己的List,它扩展LinkedList并覆盖其添加方法:

  1. public boolean add(E e)
  2. public void add(int index,E element)
  3. public boolean addAll(Collection collection)
  4. public boolean addAll(int index,Collection collection)