插入重複我是新手,去渣。我有一個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