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的根基道理
0 篇文章
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!