Java是一門面標的目的對象編程說話,不僅接收了C++說話的各類長處,還摒棄了C++里難以理解的多擔當、指針等概念,是以Java說話具有功能壯大和簡單易用兩個特征。Java說話作為靜態面標的目的對象編程說話的代表,極好地實現了面標的目的對象理論,許可程序員以優雅的思維體例進行復雜的編程 。
Java具有簡單性、面標的目的對象、分布式、健壯性、平安性、平臺自力與可移植性、多線程、動態性等特點 。Java可以編寫桌面應用程序、Web應用程序、分布式系統和嵌入式系統應用程序等 。
Interface Map<K,V>
所有已知實現類:
AbstractMap , Attributes , AuthProvider , ConcurrentHashMap , ConcurrentSkipListMap , EnumMap , HashMap , Hashtable , IdentityHashMap , LinkedHashMap , PrinterStateReasons , Properties , Provider , RenderingHints , SimpleBindings , TabularDataSupport , TreeMap , UIDefaults , WeakHashMap
這些 Map 類可歸為三種類型:
1. 通用Map,用于在應用程序中辦理映射,凡是在 java.util 程序包中實現
HashMap、Hashtable、Properties、LinkedHashMap、IdentityHashMap、TreeMap、WeakHashMap、ConcurrentHashMap
2. 專用Map,凡是我們不必親自建立此類Map,而是經由過程某些其他類對其進行拜候
java.util.jar.Attributes、javax.print.attribute.standard.PrinterStateReasons、java.security.Provider、java.awt.RenderingHints、javax.swing.UIDefaults
3. 一個用于幫忙我們實現本身的Map類的抽象類
AbstractMap
常用方式:
clear() 從該地圖中刪除所有的映射(可選操作)。
map.put("key1", "value1"); 添加一個元素
map.putAll(Map<? extends K,? extends V> m) 添加一個Map調集
map.get("key1") 按照key獲取value
map.remove("key1"); 按照key移除一個元素
boolean containsKey(Object key) 判定一個key在當前調集中是否存在
boolean containsValue(Object value) 判定一個value在當前調集中是否存在
boolean isEmpty() 若是此地圖不包含鍵值映射,則返回 true 。也就是map沒有內容返回true
int size() 返回該地圖中鍵值映射的數目
Set<K> keySet() 返回該地圖中包含的鍵的調集視圖
Set<Map.Entry<K,V>> entrySet() 該地圖中包含的映射的調集視圖 。
default V replace(K key,V value) 在指心猿意馬的鍵已經存在而且有與之相關的映射值時才會將指心猿意馬的鍵映射到指心猿意馬的值(新值),在指心猿意馬的鍵不存在時,方式會return回來一個null。
replace(k,v,v) 第二的新增的Map replace方式在替代現存值方面有更窄的釋義規模。當那個方式(上一個replace方式)只是涵蓋指心猿意馬的鍵在映射中有肆意一個有用的值的替代處置,而這個“replace”方式接管一個額外的(第三個)參數,只有在指心猿意馬的鍵和值都匹配的環境下才會替代。
常用方式的現實利用測試:
1 代碼如下所示
import java.util.*;
public class Test {
public static void main(String[] args) {
// 初始化,10W次賦值
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for (int i = 0; i < 100000; i++)
map.put(i, i);
/** 加強for輪回,keySet迭代 */
long start = System.currentTimeMillis();
for (Integer key : map.keySet()) {
map.get(key);
}
long end = System.currentTimeMillis();
System.out.println("加強for輪回,keySet迭代 -> " + (end - start) + " ms");
/** 加強for輪回,entrySet迭代 */
start = System.currentTimeMillis();
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
entry.getKey();
entry.getValue();
}
end = System.currentTimeMillis();
System.out.println("加強for輪回,entrySet迭代 -> " + (end - start) + " ms");
/** 迭代器,keySet迭代 */
start = System.currentTimeMillis();
Iterator<Integer> iterator = map.keySet().iterator();
Integer key;
while (iterator.hasNext()) {
key = iterator.next();
map.get(key);
}
end = System.currentTimeMillis();
System.out.println("迭代器,keySet迭代 -> " + (end - start) + " ms");
/** 迭代器,entrySet迭代 */
start = System.currentTimeMillis();
Iterator<Map.Entry<Integer, Integer>> iterator1 = map.entrySet()
.iterator();
Map.Entry<Integer, Integer> entry;
while (iterator1.hasNext()) {
entry = iterator1.next();
entry.getKey();
entry.getValue();
}
end = System.currentTimeMillis();
System.out.println("迭代器,entrySet迭代 -> " + (end - start) + " ms");
}
}
1、加強for輪回利用便利,但機能較差,不適合處置超大量級的數據。
2、迭代器的遍歷速度要比加強for輪回快良多,是加強for輪回的2倍擺布。
3、利用entrySet遍歷的速度要比keySet快良多,是keySet的1.5倍擺布。
HashMap的根基道理
2
0 篇文章
如果覺得我的文章對您有用,請隨意打賞。你的支持將鼓勵我繼續創作!