import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Map;
import java.util.Set;
/* 2017-02-18 10:23:27
*
* map保存具有映射关系的数据,因此map集合里保存着两组值
* 一组是key 不允许重复
* 一组是value
* 同一个map 中的任何两个key通过equals方法比较总是返回false
*
* key、value 存在单向 一对一关系
*
* map里所有的key放在一起可以组成一个set集合 (key没有顺序且key不能重复)
* keyset方法 就是用于返回map所有的key组成的set集合
*
* java 是先实现了map 然后包装一个value 都是null 的map实现了set集合
*
*
* map中的所有value放在一起 又类似于一个list 元素可以重复, 元素可以通过索引来查找
* 只是map中的索引是一个对象不是一个索引值
* 要是从map中取出数据就需要提供key索引,
* map有时也被成为字典 或者管理数组
*
*/
/* 2017-02-18 15:24:07
* Map 性能分析
* Hashtable 是一个线程安全的集合
* HashMap 比Hashtable 要快
*
* TreeMap 通常比HashMap Hashtable 要慢 插入 、删除更慢
* 底层实现的是Tree 来管理的
* 总是处于有序状态
* 无序专门排序
* 可以调用keySet 取得key 组成的Set 然后使用toArray 生成key 的数组 ,使用arrays binarySearch 方法对排序的数组快速的查询对象
*
* 一般应用 是用hashMap
* 可以快速查询
* 底层实现起始也是采用数组来存储
* 需要排序的时候则使用TreeMap
*
*
* LinkHashMap 比HashMap慢,因为需要链表来保持 key-value的顺序
*
* identityHashMap 采用HashMap基本相似的实现
*
* EnumMap性能最好,只能是用同一个枚举值作为key
*
*/
/* 2017-02-18 15:55:30
HashSet 和 HashMap 的性能选项
HashSet 及其子类 采用的是hash算法来决定集合元素的存储位置,通过hash算法来控制集合的大小
HashMap值考虑key 的存储
HashSet Hashtable 都是用hash算法来决定其元素的存储
hash表属性
容量 capacity hash表中桶的数量
初始化容量 initial capacity 创建hash表时桶的数量 再构造器中可以指定
尺寸size 当前hah表中的记录的数量
负载因子 load factor 等于size/capacity 负载因子为0 表示空的hash表
轻负载的hash表具有冲突少、适宜插入与查询的特点 但是使用Iterator 迭代元素时比较慢
负载极限 决定hash表的最大填满程度 达到指定的负载极限时 会成倍的增加桶的数量 把原有的对象重新分配,加入新桶, 称为rehashing
*/
public class mapj {
public static void main(String[] args) {
Map map = System.getenv();
// mapkeyset(map);
// mapmethod(map);
// hashmapmethod2();
/*
// HashMap<K, V>改进 存在key冲突的时候 依然就有较好的性能
*
* hashtable 是一个线程安全的map 实现
* hashmap 线程不安全
*
* hashtable 不允许使用null 作为key 和vlue
* hashmap则可以是用null作为key 或value
*
*
*
*
*
*/
/*
* java8新增的方法
*
*/
// map.compute(key, remappingFunction)
//有点难理解,等用的时候好好在分析
// 根据key value 计算出一个新的value
// 新value 不为null 就会覆盖原来的value
// 新value == null 就会删除原key-value对
// 原value == value==null
}
/* 2017-02-18 11:56:45
*
*/
private static void hashmapmethod2() {
HashMap hashMap = new HashMap();
hashMap.putAll(System.getenv());
System.out.println(hashMap.put(0, 0));
System.out.println(hashMap);
System.out.println(hashMap.containsKey(0));
System.out.println(hashMap.containsValue(0));
for (Object string : hashMap.keySet()) {
System.out.println(string + " === " + hashMap.get(string));
}
}
/* 2017-02-18 11:36:29
*
*/
private static void mapmethod(Map map) {
//map 常用的方法
Set enSet = map.entrySet();
System.out.println(enSet); //将key value 组合在一起返回
//删
// map.clear(); 删除对象中所有的key-vlue 对
// map.remove(key)
// map.remove(key, value)
//判断
// map.containsKey(key) 是否包含该值
// map.containsValue(value) 是否包含该value
// map.isEmpty() 是否为空
//查
// map.get(key) 获取key对应的value 值
// map.values() 返回所有的值
// map.entrySet() 返回一个 key-value对所组成的set集合 每个集合元素都是map.entry 对象 entry是map的内部类
// map.keySet() 返回一个key组成的set集合
// map.size()
// 增
// map.put(key, value) 添加,如果相同,则会覆盖原来的key-value
// map.putAll(m);
}
/* 2017-02-18 10:50:46
*
*/
private static void mapkeyset(Map map) {
Set mapkey = map.keySet(); // linkedlist 遍历快 查找慢
System.out.println(mapkey);
Iterator iterator = mapkey.iterator();
for (Object object : mapkey) {
System.out.println(object);
}
}
}
map
最新推荐文章于 2023-07-14 07:15:00 发布