List&Map&Set的操做和遍歷

List&Map&Set的操做和遍歷

Java的三大集合即:Set、List、Map。java

  • Set:表明無序、不可重複的集合,經常使用的有HashSet(哈希表實現)、TreeSet(紅黑樹實現);
  • List:表明有序、能夠重複的集合,比較經常使用的有ArrayList(數組實現)、LinkedList(鏈表實現);
  • Map:表明具備映射關係的集合,經常使用的有HashMap(哈希表實現)、TreeMap(紅黑樹實現);

Java5之後又增長了Queue體系集合,表明一種隊列集合實現,這裏先不介紹。shell

List的實現類原理比較簡單,Map比較複雜,而Set實際上是基於Map的一種實現。數組

下面從各個集合的基本操做介紹一下,分別選取HashSet、ArrayList、HashMap三個典型的實現類:數據結構

1. HashSet

/** 
 * HashSet的增刪遍歷
 * @author wangjun 
 * @email  scuwangjun@hotmail.com
 * @time   2018年4月6日 下午2:40:33 
 */
public class HashSetOperation {

    public static void main(String[] args) {
        //初始化
        HashSet<String> set = new HashSet<>();
        //增
        set.add("key1");
        set.add("key2");
        set.add("key3");
        //刪
        set.remove("key1");
        //遍歷1
        //使用set.descendingIterator()方法能夠反向遍歷
        System.out.println("HashSet遍歷1,使用Iterator:");
        Iterator<String> it = set.iterator();
        while(it.hasNext()) {
            System.out.println(it.next());
        }
        //遍歷2
        System.out.println("HashSet遍歷2,使用for:");
        for(String str: set) {
            System.out.println(str);
        }
    }

運行結果:code

HashSet遍歷1,使用Iterator:
key2
key3
HashSet遍歷2,使用for:
key2
key3

2.ArrayList

/** 
 * ArrayList的增刪查改,遍歷
 * @author wangjun 
 * @email  scuwangjun@hotmail.com
 * @time   2018年4月6日 下午2:25:43 
 */
public class ArrayListOperation {

    public static void main(String[] args) {
        //初始化
        List<String> list = new ArrayList<>();
        //增
        list.add("str1");
        list.add("str2");
        list.add("str3");
        //刪
        list.remove(1);
        //查
        System.out.println("list的第二個元素是:" + list.get(1));
        //改
        list.set(0, "str11");
        System.out.println("最終的list:" + list.toString());
        //遍歷1,使用for
        System.out.println("LinkedList遍歷1,使用for:");
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
        //遍歷2,使用加強for
        System.out.println("LinkedList遍歷1,使用加強for:");
        for(String str: list) {
            System.out.println(str);
        }
        //遍歷3,使用Iterator,集合類的通用遍歷方式
        System.out.println("LinkedList遍歷3,使用Iterator:");
        Iterator<String> it = list.iterator();
        while(it.hasNext()) {
            System.out.println(it.next());
        }
    }

}

運行結果:隊列

list的第二個元素是:str3
最終的list:[str11, str3]
LinkedList遍歷1,使用for:
str11
str3
LinkedList遍歷1,使用加強for:
str11
str3
LinkedList遍歷3,使用Iterator:
str11
str3

3.HashMap

/** 
 * hashMap的增刪查改
 * 無序
 * key至關於set,不可重複
 * value至關於list,可重複
 * @author wangjun 
 * @email  scuwangjun@hotmail.com
 * @time   2018年4月6日 下午2:30:31 
 */
public class HashMapOperation {

    public static void main(String[] args) {
        //初始化
        HashMap<String,String> map = new HashMap<>();
        //增
        map.put("key1", "value1");
        map.put("key2", "value2");
        map.put("key3", "value3");
        //刪
        map.remove("key2");
        //查
        System.out.println("key1對應的valve爲:" + map.get("key1"));
        //改
        map.replace("key3", "value33");
        System.out.println("最終的map是:" + map.toString());
        //遍歷1,取出map中全部的key組成一個set
        System.out.println("HashMap遍歷1,取出map中全部的key組成一個set:");
        for(String key: map.keySet()) {
            System.out.println("key:" + key + ",value:" + map.get(key));
        }
        //遍歷2,取出key組成set後,經過Iterator遍歷key
        System.out.println("HashMap遍歷2,取出key組成set後,經過Iterator遍歷key:");
        Iterator<String> it = map.keySet().iterator();
        while(it.hasNext()) {
            String key = it.next();
            String value = map.get(key);
            System.out.println("key:" + key + ",value:" + value);
        }
        //遍歷3,取出map中實際存儲的數據結構--Map.Entry,在HashMap中使用的是Node靜態內部類
        //推薦這種,尤爲是數據很大時
        System.out.println("HashMap遍歷3,經過Map.Entry:");
        Set<Map.Entry<String, String>> entry = map.entrySet();
        for(Map.Entry<String, String> entryItem: entry) {
            String key = entryItem.getKey();
            String value = entryItem.getValue();
            System.out.println("key:" + key + ",value:" + value);
        }
        //遍歷4,只能遍歷value,不能遍歷key,至關於取出map中左右的value組成一個list
        System.out.println("HashMap遍歷4,只遍歷value:");
        for(String value: map.values()) {
            System.out.println("value:" + value);
        }
    }

}

運行結果:rem

key1對應的valve爲:value1
最終的map是:{key1=value1, key3=value33}
HashMap遍歷1,取出map中全部的key組成一個set:
key:key1,value:value1
key:key3,value:value33
HashMap遍歷2,取出key組成set後,經過Iterator遍歷key:
key:key1,value:value1
key:key3,value:value33
HashMap遍歷3,經過Map.Entry:
key:key1,value:value1
key:key3,value:value33
HashMap遍歷4,只遍歷value:
value:value1
value:value33

能夠看到:get

遍歷Set通常經常使用2種方式;hash

遍歷List通常經常使用3種方式;it

遍歷Map通常經常使用4種方式;

根據使用場景,選擇合適的遍歷方式。

相關文章
相關標籤/搜索