Map集合例項練習二
本篇主要講解hashMap的遍歷:!!!!!!!!!!!!!這可以是重點之重,一定要掌握運用!!!!
遍歷方式1 : 通過鍵的集合,獲取值 .
package cn.map2; import java.util.Collection; import java.util.HashMap; import java.util.Set; /* * 遍歷方式1 : 通過鍵的集合,獲取值 . * 演示方法 Collection<V> values() //返回所有值的集合 */ public class Demo5 { public static void main(String[] args) { // 建立 HashMap 物件 HashMap<String, String> hashMap = new HashMap<>(); // 新增 元素 put 方法 //值是可以重複的,鍵是唯一的 hashMap.put("馬雲", "企業家教育家"); // {馬雲=企業家教育家} hashMap.put("馬化騰", "企業家"); // {馬化騰=企業家, 劉強東=企業家} hashMap.put("劉強東", "企業家"); Set<String> keySet = hashMap.keySet(); for (String key : keySet) { String value = hashMap.get(key); // 通過 鍵 獲取值 System.out.println(key + " -- " + value); } //列印所有的值 System.out.println("=================================="); System.out.println("列印所有的值"); Collection<String> values = hashMap.values(); // 應用不多 . for (String v : values) { System.out.println(v); } } }
以上輸出結果為:
劉強東 -- 企業家
馬化騰 -- 企業家
馬雲 -- 企業家教育家
==================================
列印所有的值
企業家
企業家
企業家教育家
Java集合框架知識總結
4.1 Collection:
4.1.1 List 介面 :
List:裡面物件全部是有序的(通過三種方法來遍歷)
ArrayList,LinkedList,Vertor
ArrayList:本質上 ArrayList 裡維護的就是動態可變長度的陣列。
常用方法:
增:add(4) 物件 位置+物件 集合 集合+位置。
刪:remove(2)下標刪物件,直接刪物件。
改:set(1) 下標 物件。
查:get() 下標得物件, indexOf()物件得下標。
contains()必須是同一個物件才返回true iterator() size()。
LinkedList:本質上 LinkedList 裡維護的是動態可變長度的雙向連結串列
常用方法:
增:add(4) 物件 位置,物件 集合 位置,集合 +2(物件) 新增:addFirst() addLast()。
刪:remove(2)下標刪物件,直接刪物件 +2(物件) 新增:removeFirst() removeLast()。
改:set(1) 下標 物件
查:get() 下標得物件 indexOf()物件得下標 +2(物件) 新增:getFirst() getLast()。
contains() iterator()size()。
Vertor:執行緒安全,執行效率非常低
常用方法:
增:add(4) 物件 位置,物件 集合 位置,集合 addElement(物件) insertElement(物件)。
刪:remove(2)下標刪物件,直接刪物件 removeElement(物件) removeAllElment()。
改:set(1) 下標,物件 setElementAt(物件,下標)。
查:get() 下標得物件 indexOf()物件得下標。
contains() iterator() size()。
iterator() :hasNext()判斷有沒有下一個元素。
next()獲取下一個元素。
remove()在迭代器中移除元素。
4.1.2 Set介面:
不允許出現重複的方法,允許有一個null值,都沒有順序索引(通過增強for迴圈和迭代來遍歷),所以查不了,改不了。
要想存入Set,必須重寫equals()和hashCode()方法(String已經重寫),兩者返回值都為真表明相等,比的是內容。
其實一個equals()就可以,但是當存入資料量大的時候,一一比較效率非常低,加入hashCode,就是來判斷不是同一個物件的。
用hashCode()無法判斷是同一個物件。
因為所有的已經存入的物件儲存在一個table裡面,比較的效率非常高。
如果已存在,是不能再往裡面新增(而Map是後面覆蓋前面)。
HashSet:
內部維護的是HashMap的一個例項,存的是key的集合。
元素的表現是無序的,但一旦新增完元素,元素位置是固定的(也就是說你無論再執行多少遍,這個顯示的順序都一樣),再新增新元素,不會影響前面元素的位置,給新增的元素分配位置,只要不打亂前面的元素位置,前面的元素位置就不會再發生變化。
常用方法:
增:add(物件)。
刪:clear()移除所有物件 ,remove(物件)。
改:沒有,沒下標。
查:除了遍歷出所有,沒有,因為沒有下標。
contains()內容相同就返回true iterator() size()
LinkedHashSet:
HashSet的子類,只有四個新增的構造器,沒有其他新增方法,內部維護的是LinkedHashMap的一個例項,是雙向連結串列結構。
元素存放順序和迭代順序一樣(按順序)。
常用方法同HashSet。
TreeSet:
確保元素處於排序狀態,底層為樹結構。使用它可以從Set中提取有序的序列。
兩種排序方法:自然排序和定製排序,預設採用自然排序。
自然排序:會呼叫集合元素的comparaTo(物件)方法來比較元素之間的大小關係,然後把集合按升序排列(實現 Comparable介面)。
定製排序:通過Comparator(比較器)介面,需要重寫compara(物件,物件),要實現定製排序,需要把comparator例項作為形 參傳給TreeSet的構造器。
要想把元素放到TreeSet中,必須實現Comparable介面,同時必須實現comparaTo方法。
或者繼承Comparator介面,然後重寫compara方法。
first() last()lower(物件) heigher(物件) 其他檢視方法。
4.2 Map集合:
維護"鍵值對"的關聯性
key,value 必須都為引用型別資料
key不可以重複(後覆蓋先),儲存在Set集合中(因為Set集合裡面的元素不能重複,所以,,還必須重寫equals和hashCode()方法),經常用String,因為都已經實現
put(key,value) remove(key) putAll(Map map) clear()清除所有 。(基本全是通過Set,也就是key,唯一性)。
獲取key的集合:
Set<> set= map.keySet();Iterator<> it=set.iterator();get(key) 迭代器。
獲取value的集合:
Collection values() 迭代器,增強for都可以。
Entry集合:
Set<Entry<,>> entrys = map.entrySet();
for(Entry<String,String> entry : entrys)迭代器,增強for都可以
get(key) containsKey(key) containsValue(value) size isEmpty() equals()比較的當然是內容啦
4.2.1 HashMap:
允許key和value的值為null。
表現是無序的 比較key相等和Set一樣。
LinkedHashMap:子類,有序的(等同上面的HashSet和LinkedHashSet)只比HashMap慢一點。而在迭代訪問時發而更快,因為它使用連結串列維護內部次序。
4.2.2 TreeMap:
有序。 基於紅黑樹資料結構的實現。檢視"鍵"或"鍵值對"時,它們會被排序(次序由Comparabel或Comparator決定)。TreeMap是唯一的帶有subMap()方法的Map,它可以返回一個子樹。
4.2.3 HashTable:
最古老,不允許key和value值為null
Properties:
是HashTable的子類,用來處理檔案的屬性。
檔案屬性必須是key_value,必須都是字串,存取資料用put(key,value),get(key)。
4.3 Collections:
集合操作類
排序:
Collections.reverse(list) 反序
Collections.shuffle()隨機
Collections.sort()自然順序升序
Collections.swap(物件,位置,位置)交換
查詢:
max()
min()frequency(Collections,物件);
copy(目標list,srclist)
Collections.repalceAll(list,old物件,new物件)
synchronizedXXX();
synchronizedList(list)
4.4 總結:
1.執行緒安全的是vertor和HashTable。
2. List:允許重複的,全部有序(允許null)。
3.Set: HashSet無序的表現(一個null),其中HashSet的子類LinkedHashSet有序,TreeSet有序。
4.Map:HashMap無序的表現(一次null),其中HashMap的子類LinkedHashMap有序,TreeMap有序,HashTable無序(不能為null)。
5.ArrayList:查詢效率高,增刪效率低。
6.LinkedList:查詢效率低,增刪效率高。
7.Vertor:執行效率非常低。
8.HashSet:良好的增刪查詢效能。
9.LinkedHashSet:查詢效率低,插入效率比HashSet低。
10.Map物件高於List。因為Map除了Value外還需要一個Object的Key,從而增大了Map的容量。
11. HashSet,HashMap的元素都是無序的,而他們的子類都是有序的,雙向連結串列,非常類似,因為HashMap中的唯一的約束就是key,而 key恰恰是被HashMap維護的
12.TreeSet和TreeMap都是有序的,兩個很類似。
13. 如果Map知道了Key,List知道了index,其效能在一百萬條資料中無多大差別。
14.List按物件進入的順序儲存物件,不做排序或編輯操作。Set對每個物件只接受一次,並使用自己內部的排序方法(通常,你只關心某個元素是否屬於 Set,而不關心它的序否則應該使用List)。Map同樣對每個元素儲存一份,但這是基於"鍵"的,Map也有內建的排序,因而不關心元素新增的 順序。如果新增元素的順序對你很重要,應該使LinkedHashSet或者LinkedHashMap。
15.HashMap就是使用物件的hashCode()進行快速查詢的。此方法能夠顯著提高效能。