map



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);
		}
	}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值