java集合框架整理

1、整體框架html

Java集合是java提供的工具包,包含了經常使用的數據結構:集合、鏈表、隊列、棧、數組、映射等。Java集合工具包位置是java.util.* 。
Java集合主要能夠劃分爲4個部分:List列表、Set集合、Map映射、工具類(Iterator迭代器、Enumeration枚舉類、Arrays和Collections)。
Java集合工具包框架圖(以下):java

大體說明:數組

看上面的框架圖,先抓住它的主幹,即Collection和Map。安全

1 、Collection是一個接口,是高度抽象出來的集合,它包含了集合的基本操做和屬性。Collection包含了List和Set兩大分支。數據結構

  (1) List是一個有序的隊列,每個元素都有它的索引。第一個元素的索引值是0。List的實現類有LinkedList, ArrayList, Vector, Stack。框架

  (2)Set是一個不容許有重複元素的集合。Set的實現類有HastSet和TreeSet。HashSet依賴於HashMap,它其實是經過HashMap實現的;TreeSet依賴於TreeMap,它其實是經過TreeMap實現的。ide

二、 Map是一個映射接口,即key-value鍵值對。Map中的每個元素包含一個key和key對應的value,每個key是惟一的。函數

   (1)AbstractMap是個抽象類,它實現了Map接口中的大部分API。而HashMap,TreeMap,WeakHashMap都是繼承於AbstractMap。
   (2)Hashtable雖然繼承於Dictionary,但它實現了Map接口。工具

三、接下來,再看Iterator。它是遍歷集合的工具,即咱們一般經過Iterator迭代器來遍歷集合。咱們說Collection依賴於Iterator,是由於Collection的實現類都要實現iterator()函數,返回一個Iterator對象。其中,ListIterator是專門爲遍歷List而存在的。編碼

四、再看Enumeration,它是JDK 1.0引入的抽象類。做用和Iterator同樣,也是遍歷集合;可是Enumeration的功能要比Iterator少。在上面的框圖中,Enumeration只能在Hashtable, Vector, Stack中使用。

五、最後,看Arrays和Collections。它們是操做數組、集合的兩個工具類

(來源:http://www.cnblogs.com/skywang12345/p/3308498.html)

 

2、List

List中ArrayList又最爲經常使用。看ArrayList的使用例子:

package chapter11;
import java.util.ArrayList;

public class TestArrayList {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        ArrayList<String> cityList=new ArrayList<String>();
        cityList.add("London");
        cityList.add("Denver");
        cityList.add("Paris");
        cityList.add("Miami");
        cityList.add("Seoul");
        cityList.add("Tokyo");
        
        System.out.println("List size is "+cityList.size()+
                "\nIs Miami in the list? "+cityList.contains("Miami")+
                "\nThe location of Denver in the list? "+cityList.indexOf("Denver")+
                "\nIs the list empty? "+cityList.isEmpty());
        
        cityList.add(2, "Xian");
        cityList.remove("Miami");
        cityList.remove(1);
        
        System.out.println(cityList.toString());
        
        for(int i=cityList.size()-1;i>=0;i--){
            System.out.print(cityList.get(i)+" ");
        }
        System.out.println();

    }

}

 

3、Set

一、Set不能存儲相同的元素,同時由於其是一個抽象的接口,因此不能直接實例化一個set對象。(Set s = new Set() 是錯誤的 )

二、Set的兩個實現是HashSet和TreeSet。他們都是單列集合,元素不可重複。HashSet無序,TreeSet會將裏面的元素默認排序。

三、TreeSet的應用實例

Set<Integer> set = new TreeSet<>();
int a = 1;
int b = 8;
int c = 3;
 
set.add(a);
set.add(b);
set.add(c);
 
 //遍歷集合set ,利用foreach遍歷  
 for (Integer value : set) {
     System.out.print(value+" ");  //輸出結果:1   3   8    
 }    

//利用Iterator實現遍歷
Iterator<Integer> value =set.iterator();
while (value.hasNext()) {
    int c= value.next();
    System.out.print(c+" ");   //輸出結果:1   3   8
}        

  

 

4、Map

一、

如上圖:
(1) Map 是映射接口,Map中存儲的內容是鍵值對(key-value)Map映射中不能包含重複的鍵;每一個鍵最多隻能映射到一個值
(2) AbstractMap 是繼承於Map的抽象類,它實現了Map中的大部分API。其它Map的實現類能夠經過繼承AbstractMap來減小重複編碼。
(3) SortedMap 是繼承於Map的接口。SortedMap中的內容是排序的鍵值對,排序的方法是經過比較器(Comparator)。
(4) NavigableMap 是繼承於SortedMap的接口。相比於SortedMap,NavigableMap有一系列的導航方法;如"獲取大於/等於某對象的鍵值對"、「獲取小於/等於某對象的鍵值對」等等。 
(5) TreeMap 繼承於AbstractMap,且實現了NavigableMap接口;所以,TreeMap中的內容是「有序的鍵值對」!
(6) HashMap 繼承於AbstractMap,但沒實現NavigableMap接口;所以,HashMap的內容是「鍵值對,但不保證次序」!
(7) Hashtable 雖然不是繼承於AbstractMap,但它繼承於Dictionary(Dictionary也是鍵值對的接口),並且也實現Map接口;所以,Hashtable的內容也是「鍵值對,也不保證次序」。但和HashMap相比,Hashtable是線程安全的,並且它支持經過Enumeration去遍歷。
(8) WeakHashMap 繼承於AbstractMap。它和HashMap的鍵類型不一樣,WeakHashMap的鍵是「弱鍵」

(來源:http://www.cnblogs.com/skywang12345/p/3308931.html)

 

二、以TreeMap爲例,介紹用法

public class SortDemo {

    public static void main(String[] args) {
        System.out.println("---------------- 默認排序結果-----------------");
        createDefaultSortTreeMap();
        System.out.println("---------------- 自定義排序結果-----------------");
        createDefinitionSortTreeMap();
    }
    
    public static void createDefaultSortTreeMap() {
        TreeMap<String, String> map = new TreeMap<String, String>();
        
        init(map);
        print(map);
    }
    
    public static void createDefinitionSortTreeMap() {
        
        TreeMap<String, String> map = new TreeMap<String, String>(new Comparator<String>() {

            @Override
            public int compare(String o1, String o2) {
                    return o2.compareTo(o1);
            }
            
        });
        
        init(map);
        print(map);
    }
    
    public static void init(Map<String, String> map) {
        map.put("c", "1");
        map.put("a", "1");
        map.put("bb", "1");
        map.put("b", "1");
    }
    
    public static void print(Map<String, String> map) {
        Iterator<Entry<String, String>> it = map.entrySet().iterator();
        while(it.hasNext()) {
            Entry<String, String> entry = it.next();
            System.out.println(entry.getKey() + " : " + entry.getValue());
        }
    }

結果:
---------------- 默認排序結果-----------------
a : 1
b : 1
bb : 1
c : 1
---------------- 自定義排序結果-----------------
c : 1
bb : 1
b : 1
a : 1  

註釋:TreeMap 默認排序規則:按照key的字典順序來排序(升序)。固然,也能夠自定義排序規則:要實現Comparator接口。

(來源:https://www.cnblogs.com/chenmo-xpw/p/4922641.html)

 

5、List、Set、Map集合的遍歷方法

一、List集合遍歷

public class TraversingList {
    /**
     * @author zhuxun describe: 定一個List集合並遍歷
     */
    /** 定義一個List集合 */
    public List<String> getList() {
        List<String> list = new ArrayList<String>();
        list.add("ZhuXun");
        list.add("Jack Ma");
        list.add("Kobe");
        list.add("Andy Lau");
        return list;
    }

    /** 遍歷list集合 */
    public void traversingList(List<String> list) {
        // 方法一:經過下標遍歷
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
        // 方法二:Iterator迭代器遍歷
        Iterator<String> itr = list.iterator();
        while (itr.hasNext()) {
            String str = itr.next();
            System.out.println(str);
        }
    }

    public static void main(String[] args) {
        TraversingList test = new TraversingList();
        List<String> list = test.getList();// 得到List集合
        test.traversingList(list);// 遍歷List集合並輸出
    }
}

  

二、Set集合遍歷

public class TraversingSet {
    /**
     * @author zhuxun describe: 定一個Set集合並遍歷
     */
    /** 定義一個Set集合 */
    public Set<String> getSet() {
        Set<String> set = new HashSet<String>();
        set.add("ZhuXun");
        set.add("Jack Ma");
        set.add("Kobe");
        set.add("Andy Lau");
        return set;
    }

    /** 遍歷Set集合 */
    public void traversingSet(Set<String> set) {
        // 方法一:Iterator迭代器遍歷
        Iterator<String> itr = set.iterator();
        while (itr.hasNext()) {
            String str = itr.next();
            System.out.println(str);
        }
        // 方法二:經過加強型for循環遍歷
        // 注:Set集合中不存在下標,所以沒法經過下標遍歷,對於Java編譯器而言,方法一和方法二是等價的
        for (String str : set) {
            System.out.println(str);
        }
    }

    public static void main(String[] args) {
        TraversingSet test = new TraversingSet();
        Set<String> set = test.getSet();// 得到Set集合
        test.traversingSet(set);// 遍歷Set集合並輸出
    }
}

  

三、Map集合遍歷

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

public class TestMap {
    public static void main(String[] args) {
        Map<Integer, String> map = new HashMap<Integer, String>();
        map.put(1, "a");
        map.put(2, "b");
        map.put(3, "ab");
        map.put(4, "ab");
        map.put(4, "ab");// 和上面相同 , 會本身篩選,不會重複存儲
        System.out.println(map.size());
        // 第一種:經過Map.keySet遍歷key和value
        for (Integer in : map.keySet()) {
            //map.keySet()返回的是全部key的值
            String str = map.get(in);//獲得每一個key多對用value的值
            System.out.println(in + "     " + str);
        }
        // 第二種:經過Map.entrySet使用iterator遍歷key和value
        Iterator<Map.Entry<Integer, String>> it = map.entrySet().iterator();
        while (it.hasNext()) {
             Map.Entry<Integer, String> entry = it.next();
               System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
        }
        // 第三種:經過Map.entrySet遍歷key和value,推薦,尤爲是容量大時
        for (Map.Entry<Integer, String> entry : map.entrySet()) {
            //Map.entry<Integer,String> 映射項(鍵-值對)  有幾個方法:用上面的名字entry
            //entry.getKey() ;entry.getValue(); entry.setValue();
            //map.entrySet()  返回此映射中包含的映射關係的 Set視圖。
            System.out.println("key= " + entry.getKey() + " and value= "
                    + entry.getValue());
        }
        // 第四種:經過Map.values()遍歷全部的value,但不能遍歷key
        for (String v : map.values()) {
            System.out.println("value= " + v);
        }
    }
}

(來源:https://www.cnblogs.com/blest-future/p/4628871.html)

相關文章
相關標籤/搜索