【java】【Map】HashMap、Hashtable、Collections
一、基本概述
鍵值對:一個對映不能包含重複的鍵,每個鍵最多隻能對映到一個值
Map介面和Collection介面的不同
- Map是雙列的,Collection是單列的
- Map的鍵唯一,Collection的子體系Set是唯一的
- Map集合的資料結構值針對鍵有效,跟值無關。Collection集合的資料結構是針對元素有效。
二、Map集合的功能
1、新增功能
- V put(Kkey,V value):新增元素。
* 如果鍵是第一次儲存,就直接儲存元素,返回null
* 如果鍵不是第一次存在,就用值把以前的值替換掉,返回以前的值
2、刪除功能
* void clear():移除所有的鍵值對元素
* V remove(Object key):根據鍵刪除鍵值對元素,並把值返回
3、判斷功能
* boolean containsKey(Object key):判斷集合是否包含指定的鍵
* boolean containsValue(Object value):判斷集合是否包含指定的值
* boolean isEmpty():判斷集合是否為空
4、獲取功能
*Set<Map.Entry<K,V>> entrySet():
說明:Map.Entry表示Entry是Map的內部介面,將鍵和值封裝成了Entry物件,並儲存在Set集合中
* V get(Object key):根據鍵獲取值
*Set<K> keySet():獲取集合中所有鍵的集合
*Collection<V> values():獲取集合中所有值的集合
5、長度功能
* intsize():返回集合中的鍵值對的個數
三、Map集合的遍歷
1、鍵找值 思路:
* 獲取所有鍵的集合
* 遍歷鍵的集合,獲取到每一個鍵
* 根據鍵找值
HashMap<String, Integer> hm = new HashMap<>();
hm.put("張三", 23);
hm.put("李四", 24);
hm.put("王五", 25);
hm.put("趙六", 26);
Set<String> keySet = hm.keySet(); //獲取集合中所有的鍵
Iterator<String> it = keySet.iterator(); //獲取迭代器
while(it.hasNext()) { //判斷單列集合中是否有元素
String key = it.next(); //獲取集合中的每一個元素,其實就是雙列集合中的鍵
Integer value = hm.get(key); //根據鍵獲取值
System.out.println(key + "=" + value); //列印鍵值對
}
for(String key : hm.keySet()) { //增強for迴圈迭代雙列集合第一種方式
System.out.println(key + "=" + hm.get(key));
}
2、鍵值對物件找鍵和值 思路
* 獲取所有鍵值對物件的集合
* 遍歷鍵值對物件的集合,獲取到每一個鍵值對物件
* 根據鍵值對物件找鍵和值
HashMap<String, Integer> hm = new HashMap<>();
hm.put("張三", 23);
hm.put("李四", 24);
hm.put("王五", 25);
hm.put("趙六", 26);
/*Set<Map.Entry<String, Integer>> entrySet = hm.entrySet(); //獲取所有的鍵值物件的集合
Iterator<Entry<String, Integer>> it = entrySet.iterator(); //獲取迭代器
while(it.hasNext()) {
Entry<String, Integer> en = it.next(); //獲取鍵值對物件
String key = en.getKey(); //根據鍵值對物件獲取鍵
Integer value = en.getValue(); //根據鍵值對物件獲取值
System.out.println(key + "=" + value);
}*/
for(Entry<String,Integer> en : hm.entrySet()) {
System.out.println(en.getKey() + "=" + en.getValue());
}
四、LinkedHashMap,TreeMap
LinkedHashMap:底層是連結串列實現的可以保證怎麼存就怎麼取
TreeMap:底層是二叉樹,會對鍵值對進行排序五、案例:統計字串中每個字元出現的次數
分析:
1、定義一個需要被統計字元的字串
2、將字串轉換為字元陣列
3、定義雙列集合,儲存字串中字元以及字元出現的次數
4、遍歷字元陣列獲取每一個字元,並將字元儲存在雙列集合中
5、儲存過程中要做判斷,如果集合中不包含這個鍵,就將該字元當作鍵,值為1儲存,如果集合中包含這個鍵,就將值加1儲存
6、列印雙列集合獲取字元出現的次數
import java.util.HashMap;
public class Test1 {
public static void main(String[] args) {
//1,定義一個需要被統計字元的字串
String s = "aaaabbbbbccccccccccccc";
//2,將字串轉換為字元陣列
char[] arr = s.toCharArray();
//3,定義雙列集合,儲存字串中字元以及字元出現的次數
HashMap<Character, Integer> hm = new HashMap<>();
//4,遍歷字元陣列獲取每一個字元,並將字元儲存在雙列集合中
for(char c: arr) {
//5,儲存過程中要做判斷,如果集合中不包含這個鍵,就將該字元當作鍵,值為1儲存,如果集合中包含這個鍵,就將值加1儲存
/*if(!hm.containsKey(c)) { //如果不包含這個鍵
hm.put(c, 1);
}else {
hm.put(c, hm.get(c) + 1);
}*/
hm.put(c, !hm.containsKey(c) ? 1 : hm.get(c) + 1);
}
//6,列印雙列集合獲取字元出現的次數
for (Character key : hm.keySet()) { //hm.keySet()代表所有鍵的集合
System.out.println(key + "=" + hm.get(key));//hm.get(key)根據鍵獲取值
}
}
}
六、HashMap和Hashtable的區別
- Hashtable是JDK1.0版本出現的,是執行緒安全的,效率低,HashMap是JDK1.2版本出現的,是執行緒不安全的,效率高
- Hashtable不可以儲存null鍵和null值,HashMap可以儲存null鍵和null值
七、Collections
針對集合操作 的工具類
public static <T> void sort(List<T> list)
publicstatic <T> int binarySearch(List<?> list,T key):二分查詢法
publicstatic <T> T max(Collection<?> coll):獲取最大值
publicstatic void shuffle(List<?> list):隨機置換,可以用來洗牌
publicstatic void reverse(List<?> list):反轉
相關文章
- HashTable HashMap HashSet區別(java)HashMapJava
- 深入淺出 Map 的實現(HashMap、HashTable、LinkedHashMap、TreeMap)HashMap
- Java中的HashMap和HashTable到底哪不同?JavaHashMap
- java複習之HashMap和Hashtable的區別JavaHashMap
- Java的JDK下Hashtable與HashMap的區別JavaJDKHashMap
- Java入門:Hashtable和HashMap的區別(轉)JavaHashMap
- HashMap、HashTable、HashSet詳解HashMap
- ConcurrentHashMap HashMap HashTable區別HashMap
- HashMap 與HashTable的區別HashMap
- Hashmap 和Hashtable的區別HashMap
- HashMap和Hashtable的區別HashMap
- Hashtable和HashMap的區別HashMap
- Java集合面試題(03) Java中HashMap和HashTable之間區別Java面試題HashMap
- Java8改進的HashMap和Hashtable實現類JavaHashMap
- Java HashMap和Go map原始碼對比JavaHashMapGo原始碼
- HashMap、LinkedHashMap、HashTable、HashSet筆記HashMap筆記
- HashMap、HashTable、ConcurrentHashMap的區別HashMap
- Java常用資料結構之Map-HashMapJava資料結構HashMap
- hashmap與Hashtable實現原理淺析HashMap
- 集合類HashMap,HashTable,ConcurrentHashMap區別?HashMap
- 集合框架-HashMap和Hashtable的區別框架HashMap
- 關於HashMap和Hashtable的區別HashMap
- HashMap和Hashtable的詳細區別HashMap
- HashTable和HashMap的六點區別HashMap
- HashMap底層實現原理/HashMap與HashTable區別/HashMap與HashSet區別HashMap
- C#中Hashtable和HashMap的區別C#HashMap
- HashMap、Hashtable、ConcurrentHashMap的原理與區別HashMap
- HashMap、TreeMap、Hashtable、HashSet和ConcurrentHashMap區別HashMap
- hashmap與hashtable的區別,以及實現hashmap的同步操作HashMap
- java collectionsJava
- HashMap為何執行緒不安全?HashMap,HashTable,ConcurrentHashMap對比HashMap執行緒
- Java集合系列(四):HashMap、Hashtable、LinkedHashMap、TreeMap的使用方法及區別JavaHashMap
- Java入門學習- 理解List和HashMap和HashTable的用法和區別JavaHashMap
- Hashtable/HashMap與key/value為null的關係HashMapNull
- Java 從 Map 到 HashMap 的一步步實現JavaHashMap
- HashTable、ConcurrentHashMap、TreeMap、HashMap關於鍵值的區別HashMap
- 五分鐘看懂Hashtable原始碼以及與HashMap的區別原始碼HashMap
- 為什麼hashtable不允許設定Null但是hashmap允許?NullHashMap