集合類Set\Map


Set接口的常用方法

Set集合由Set接口和Set接口的實現類組成的。Set接口繼承了Collection接口,因此包含Collection接口的所有方法。Set接口中的常用方法如下圖:

由於Set集合中不允許存在重復值,因此可以使用Set集合中的addAll()方法,將Collection集合添加到Set集合中並除掉重復值。

Set接口的實現類

要使用Set集合,通常情況下需要聲明為Set類型,然后通過Set接口的實現類來實例化。Set接口的實現類常用的有HashSet和TreeSet類。語法格式如下:

Set<String>collSet=new HashSet<String>();

Set<String>collSet2=new TreeSet<String>();

由於Set集合中的對象是無序的,遍歷Set集合的結果與插入Set集合的順序並不相同。

package org.hanqi.array;

import java.util.*;

public class Test2 {

    public static void main(String[] args) {
        
//        int i;
//        int[]m=new int[5];
//        set<int>d=
        
        
        
        //哈希
        
        System.out.println("TreeSet");
        
        Set<String>s=new HashSet<String>();
        
        HashSet<String>s1=new HashSet<String>();
        
        if(s.add("a"))
        {
            System.out.println("保存a成功");
        }
        
        s.add("a");
        s.add("b");
        s.add("c");
        s.add("d");
        s.add("e");
        s.add("f");
        s.add("g");
        
        s.addAll(null);
        
        if(!s.add("a"))
        {
            System.out.println("保存a失敗");
        }
        
        for(String t:s)
        {
            System.out.println(t+" ");
        }
        
        if(s.remove("k"))
        {
            System.out.println("移除成功");
        }
        else
        {
            System.out.println("移除失敗");
        }
        
        System.out.println("s的size"+s.size());
        
        Iterator<String>it=s.iterator();
        
        while(it.hasNext())
        {
            String t=it.next();
            
            if(t.equals("c"))
            {
                it.remove();
            }
            else
            {
                System.out.println(t);
            }
        }
        System.out.println("s的size"+s.size());
        
        
        
        System.out.println("TreeSet");
        
        Set<String>s2=new TreeSet<String>();
        s2.add("b");
        s2.add("a");
        s2.add("c");
        s2.add("g");
        s2.add("e");
        s2.add("f");
        s2.add("d");
        
        for(String t:s2)
        {
            System.out.println(t+" ");
        }
        

    }

}
TreeSet、HashSet

HashSet可以保存null,TreeSet不可以保存null,並且內部調用了TreeMap。

Map接口的常用方法

Map接口提供了將鍵映射到值的對象。一個映射不能包含重復的鍵;每個鍵最多只能映射一個值。Map接口中同樣提供了集合的常用方法,如clear()、isEmpty()、size()等除此之外還包括下圖所示的常用方法

由於Map集合中的元素是通過key、value進行存儲的,要獲取集合中指定的key值或value值,需要先通過相應的方法獲取key集合或value集合,再遍歷key集合或value集合獲取指定值。

Map接口的實現類

Map接口常用的實現類有HashMap和TreeMap。通常建議使用HashMap實現類實現Map集合,因為由HashMap類實現的Map集合對於添加和刪除映射關系效率更高。HashMap是基於哈希表的Map接口實現的,HashMap通過哈希碼對其內部的映射關系進行快速查找;由HashMap類實現的Map集合對於添加或刪除映射關系效率較高;而TreeMap中的映射關系存在一定的順序,如果希望Map集合中的對象存在一定的順序,應該使用TreeMap類實現Map集合。

 1.HashMap類

該類基於哈希表的 Map接口的實現,此實現提供所有可選映射操作,並允許使用null值和null鍵,但必須保證鍵的唯一性。 HashMap通過哈希碼對其內部的映射關系進行快速查找。此類不保證映射的順序,特別是不保證該順序恆久不變。

2.TreeMap類

該類不僅實現了Map接口,還實現了java.util.SortedMap接口,因此集合中的映射關系具有一定的順序。但在添加、刪除和定位映射關系上,TreeMap類比HashMap類的性能差一些。由於TreeMap類實現的Map集合中的映射關系是根據鍵對象按照一定的順序排列的,因此不允許鍵對象是null。

可以通過HashMap類實例化Map集合,當需要順序輸出時,再創建一個完成相同映射關系的TreeMap類實例。

package org.hanqi.array;

import java.util.*;

public class Test3 {

    public static void main(String[] args) {
        
        Map<String, String>m=new HashMap<String, String>();
        
        m.put("0533", "淄博");
        m.put("0531", "濟南");
        m.put("0532", "青島");
        
        System.out.println("長度="+m.size());
        
        m.put("0534", "青島");//值可以重復,鍵不能重復
        
        m.put(null, null);
        
        //長度
        System.out.println("長度="+m.size());
        //取出
        System.out.println("0533="+m.get("0533"));
        
        //key是否存在
        if(m.containsKey("0533"))
        {
            System.out.println("key 0533 已存在");
        }
        //value是否存在
        if(m.containsValue("淄博"))
        {
            System.out.println("value 淄博 存在");
        }
        
        //遍歷
        for(String k:m.keySet())
        {
            System.out.println(k+"="+m.get(k));
        }
        

    }

}
HashMap、TreeMap

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM