Map,List的用法與區別


區別:

List:是存儲單列數據的集合,存儲的數據是有序並且是可以重復的 
Map:存儲雙列數據的集合,通過鍵值對存儲數據,存儲 的數據是無序的,Key值不能重復,value值可以重復 key和value是一一對應的

 

關系:

 

 

 

 

Collection是Java中最基本的集合接口。

 

Set接口:

 

Set接口直接繼承自Collection接口,並且方法接口上也一模一樣。Set對添加的元素有一些要求,其不允許出現重復的元素,並且元素之間沒有次序。這相當於一個不允許重復的離散的集合。因此,添加進Set的元素類型需要定義equals方法。若是使用自定義的類,則應該重寫equals方法來確保實現自己需要的功能。

 

Set接口主要實現了兩個類:HashSet,TreeSet。

 

HashSet是按照哈希來存取元素的,因此速度較快。HashSet繼承自抽象類AbstractSet,然后實現了Set、Cloneable、Serializable接口。 
TreeSet也是繼承自AbstractSet,不過不同的是其實現的是NavigableSet接口。而NavigableSet繼承自SortedSet。SortedSet是一個有序的集合。其添加的元素必須實現了Comparable接口,因為其在添加一個元素的時候需要進行排序。NavigableSet則提供了更多的有關元素次序的方法。

 


 
LinkedHashSet也是Set的一個實現。和HashSet類似,只不過內部用鏈表來維護,按照元素插入次序來保存。

 

List接口:
List接口也是繼承自Collection。與Set不同的是,List可以存儲重復的元素。主要有兩種實現:ArrayList和LinkedList。 
ArrayList沒有什么好說的,就像傳統的數組一樣,有着很快的隨機存取速度,但是插入刪除的速度就很慢。 
LinkedList則與ArrayList恰恰相反,因為用鏈表來保存數據,所以插入刪除元素的速度很快,但是訪問數據的速度就不如ArrayList了。

 

Map接口:
Map(映射)是一個存儲鍵值對的容器接口。每一個元素包含一個key對象和value對象,且元素不允許重復。 
Map接口的實現有以下幾個: 
HashMap是最常用的一個實現。HashMap使用hash映射來存取數據,這個速度是相當快,是O(1)的速度。其容量capacity,和負載因子load factor可以在一開始設定。當元素個數達到capacity*load factor的時候,就會進行擴容。 
LinkedHashMap和HashMap類似,只不過內部用鏈表來維護次序。因此遍歷時候的順序是其插入順序。 
TreeMap是基於紅黑樹的Map,插入的數據被有次序保存,並且有很高的效率。因此在遍歷輸出的時候可以得到排序的數據。但是這要求插入的數據實現了comparable接口。

 

總結:
Collection、Set、List和Map都是接口,不能被實例化。
Set和List都繼承自Collection,而Map則和Collection沒什么關系。
Set和List的區別在於Set不能重復,而List可以重復。
Map和Set與List的區別在於,Map是存取鍵值對,而另外兩個則是保存一個元素。

 

用法:

(一):List

1:聲明一個List

// Object:指List里的值是什么類型的,Object代表可以是任何形式的
List<Object> list = new ArrayList<Object>();

 

2:方法

 (1):add()   添加數據      

list.add("北京");

list.add("深圳");

list.add("上海");

 

(2):get(index)

list.get(0) // 結果:北京

 

 (3):size()  list里的數據個數

list.size()

 

 (4):遍歷list

for(int i=0;i<list.size();i++){

System.out.println(list.get(i));

}

 

list取值是通過下標,下標從0開始

(二):  Map

1:聲明一個Map

// 說明:Map是通過key-value(值鍵對) ,String代表key的類型(一般都是String),Object代表value的類型
Map<String,Object> map = new HashMap<String,Object>();

 

2:put(key,value)  賦值

map.put("name", "小明");

map.put("sex", "男");

map.put("age", 18);

 

3:get(key)  取值      

// 結果:小明
map.get("name") 


 (三):List<Map>

1:聲明一個List<Map>

List<Map<String,Object>> listMap = new ArrayList<Map<String,Object>>();

 

2:賦值

(1):先賦值給Map

Map<String,Object> map1 = new HashMap<String,Object>();

map1.put("name", "小明");

map1.put("sex", "男");

map1.put("age", 18);

Map<String,Object> map2 = new HashMap<String,Object>();

map2.put("name", "小紅");

map2.put("sex", "女");

map2.put("age", 16);

 

(2):將map添加到List中

listMap.add(map1);

listMap.add(map2);

// 結果:[{sex=男, name=小明, age=18}, {sex=女, name=小紅, age=16}]

 

(3):遍歷存值

  List<Map<String,Object>> listMap = new ArrayList<Map<String,Object>>();
            List<LandBaseInfo> list = landBaseInfoDao.getAllProList();
            for(int i = 0;i<list.size();i++){
                // 關鍵點,map命名寫在循環里
                Map<String,Object> map = new HashMap<String,Object>();
                String areaName = list.get(i).getAreaName();
                if(areaName == "市本級"){
                    areaName = list.get(i).getDistrict();
                }
                String landPostition = list.get(i).getLandPosition();
                String adddress = "河南省"+areaName+landPostition ;
                String landId = list.get(i).getLandId();
                String landCode = list.get(i).getLandCode();
                String type = "2";
                map.put("address",adddress);
                map.put("landId",landId);
                map.put("landCode",landCode);
                map.put("type",type);
                listMap.add(map);
            }                      

 

(4):遍歷取值

for(int i = 0;i<listMap.size();i++){

System.out.print(listMap.get(i).get("name"));

System.out.print(listMap.get(i).get("sex"));

System.out.print(listMap.get(i).get("age"));

System.out.println();

}

 


免責聲明!

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



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