Java 集合:HashSet 與 ArrayList,hashsetarraylist
Set 集合是無序不可以重復的的、List 集合是有序可以重復的。
Java 集合:HashSet 與 hashCode、equals 博客裡面已經說到這個問題,但是解釋的還是不夠清楚。
看一個小例子:
package mark.zhang;
import java.util.ArrayList;
import java.util.HashSet;
public class Test {
public static void main(String[] args) {
ArrayList<Integer> loadsList = new ArrayList<Integer>();
loadsList.add(1);
loadsList.add(2);
loadsList.add(0);
loadsList.add(3);
loadsList.add(2);
loadsList.add(1);
loadsList.add(3);
loadsList.add(5);
loadsList.add(0);
System.out.println("the arrayList: " + loadsList);
HashSet<Integer> loadsSet = new HashSet<Integer>();
loadsSet.add(1);
loadsSet.add(2);
loadsSet.add(0);
loadsSet.add(3);
loadsSet.add(2);
loadsSet.add(1);
loadsSet.add(3);
loadsSet.add(5);
loadsSet.add(0);
System.out.println("the hashSet: " + loadsSet);
}
}
代碼很簡單,分別使用 ArrayList、HashSet 裝載 Integer 數據,然後打印集合的內容。
List 中的元素是按照 add 順序加載的,並且裡面有重復的元素。這就是有序可重復的意思。
Set 中的元素並沒有按照 add 順序加載的,並且裡面沒有重復的元素。這就是無序不可重復的意思。
換句話說,有序不是指按照字母順序或者數字大小來排列的,重復是指元素之間 equals 為 true。
這裡選擇 Integer,因為其重寫了 equals 方法。
那麽,我們思考一個問題:如何去掉 List 裡面重復的元素?參考代碼:
package mark.zhang;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
public class Test {
public static void main(String[] args) {
ArrayList<Integer> loadsList = new ArrayList<Integer>();
loadsList.add(1);
loadsList.add(2);
loadsList.add(0);
loadsList.add(3);
loadsList.add(2);
loadsList.add(1);
loadsList.add(3);
loadsList.add(5);
loadsList.add(0);
System.out.println("remove before--- the arrayList: " + loadsList);
// remove the repeated element
// rmRepeatedElement(loadsList);
rmRepeadtedElementByOrder(loadsList);
System.out.println("remove after--- the arrayList: " + loadsList);
}
public static void rmRepeatedElement(List<Integer> list) {
HashSet<Integer> loadsSet = new HashSet<Integer>(list);
list.clear();
list.addAll(loadsSet);
}
public static void rmRepeadtedElementByOrder(List<Integer> list) {
HashSet<Integer> loadsSet = new HashSet<Integer>();
ArrayList<Integer> loadsList = new ArrayList<Integer>();
for(Iterator<Integer> iterator = list.iterator(); iterator.hasNext();) {
Integer element = iterator.next();
if(loadsSet.add(element)) {
loadsList.add(element);
}
}
list.clear();
list.addAll(loadsList);
}
}