【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和HashMapHashMap
- java複習之HashMap和Hashtable的區別JavaHashMap
- HashMap、LinkedHashMap、HashTable、HashSet筆記HashMap筆記
- HashMap、HashTable、ConcurrentHashMap的區別HashMap
- 集合類HashMap,HashTable,ConcurrentHashMap區別?HashMap
- Java HashMap和Go map原始碼對比JavaHashMapGo原始碼
- HashMap、Hashtable、ConcurrentHashMap的原理與區別HashMap
- 5、Map集合——HashMapHashMap
- Java常用資料結構之Map-HashMapJava資料結構HashMap
- HashMap底層實現原理/HashMap與HashTable區別/HashMap與HashSet區別HashMap
- Java集合系列(四):HashMap、Hashtable、LinkedHashMap、TreeMap的使用方法及區別JavaHashMap
- C#中Hashtable和HashMap的區別C#HashMap
- HashMap為何執行緒不安全?HashMap,HashTable,ConcurrentHashMap對比HashMap執行緒
- Hashtable/HashMap與key/value為null的關係HashMapNull
- HashTable、ConcurrentHashMap、TreeMap、HashMap關於鍵值的區別HashMap
- HashMap,難的不在Map,而在HashHashMap
- Java 從 Map 到 HashMap 的一步步實現JavaHashMap
- 五分鐘看懂Hashtable原始碼以及與HashMap的區別原始碼HashMap
- 為什麼hashtable不允許設定Null但是hashmap允許?NullHashMap
- Java 集合類——Collections(1)Java
- Java 集合類——Collections(3)Java
- Java之Collections工具類Java
- Java 集合類——Collections(2)Java
- 原始碼閱讀(19):Java中主要的Map結構——HashMap容器(下1)原始碼JavaHashMap
- 一文讀懂JDK7,8,9的hashmap,hashtable,concJDKHashMap
- Java集合詳解4:一文讀懂HashMap和HashTable的區別以及常見面試題JavaHashMap面試題
- Java集合之Hashtable原始碼解析Java原始碼
- Java 集合Hashtable原始碼深入解析Java原始碼
- 分析 java.util.Hashtable 原始碼Java原始碼
- Java —— 集合工具類(Collections 類)Java
- 橫掃Java Collections系列 —— TreeSetJava
- 橫掃Java Collections系列 —— ListJava
- Java集合:HashMapJavaHashMap
- 10分鐘掌握ConcurrentHashMap 3分鐘清楚和HashMap、Hashtable的區別HashMap
- 【Java學習筆記】Collections集合Java筆記
- Java集合之HashMapJavaHashMap
- Java HashMap merge() 方法JavaHashMap
- [java]HashMap原理剖析JavaHashMap