程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> Java 集合:HashSet 與 ArrayList,hashsetarraylist

Java 集合:HashSet 與 ArrayList,hashsetarraylist

編輯:JAVA綜合教程

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);
    }
    
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved