数据结构:

    Map
        Map 不是Collection的子类

        Map 接口定义的集合包含两部分

        key-value 以键值的形式保存元素

        可以把map看作一个两列多行的表格

        根据内部实现不同,我们常使用HashMap 也有通过二叉树实现的TreeMap

    在Map中key是不重复的

    存取数据的方法

       V put(K k,V v): 根据给定的key存放给定的value 如使用已存在的key 存放元素,那么就替换value操作,返回值则是替换的元素否则返回null。

     V get(Object k): 根据给定的key获取对应的value 如key在map中不存在则,返回null。


boolean containsKey(Object k):Map 中是否存在给定的key

boolean containsValue(Object v):查看当前Map中是否有给定的value

package day29;
import java.util.HashMap;
import java.util.Map;
public class Demo01 {
	public static void main(String[] args){
		Map points = new HashMap();//创建一个Map
		points.put("1,2", new Point(1,2));//向map中存放元素
		points.put("3,4", new Point(3,4));
		points.put("5,6", new Point(5,6));
		//获取[5,6]这个点
		Point p = points.get("5,6");
		System.out.println(p.getX()+","+p.getY());
	
	}
}
package day29;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

public class Demo02 {
	public static void main(String[] args){
		String str = "123,456,789,987,741,258,963,321,456,258,456";
		String[] arrStr = str.split(",");
		System.out.println(Arrays.toString(arrStr));
		Map map = new HashMap();
		for(String i:arrStr){
			if(map.containsKey(i)){
				int value = map.get(i);
				value = value+1;
				map.put(i,value);
			}else{
				map.put(i, 1);
			}
		}
		System.out.println(map);
	}
}
package day29;

import java.util.HashMap;
import java.util.Map;

public class Demo03 {//key 的hashCode值尽量不要变
	public static void main(String[] args){
		Map map = new HashMap();
		Point p = new Point(1,2);
		map.put(p,"one");
		System.out.println(map.get(p));
		System.out.println("map 中的元素数量:"+map.size());
		p.setX(3);
		p.setY(4);
		String old = map.put(p,"two");
		System.out.println(old);
		System.out.println(map.get(p));
		System.out.println("map 中的元素数量:"+map.size());
	}
}


HashMap的性能

    Capacity:容量HashMap中散列数组的大小

    在创建的时候会有一个初始的长度

    initial capacity 初始容量 :16


    size:大小 HashMap 中存放元素的数量


(***)loadfactor:加载因子默认值0.75,size/capacity得到的比值,当存储的数据量超过了0.75时,会对散列数组进行扩容,并对HashMap 中原来的所有元素重新计算并存入新的数组。可以修改,通常不修改



遍历key 遍历value(不常用) 遍历 key-value

    

package day29;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * 
 *	遍历key
 */
public class Demo04 {
	public static void main(String[] args){
		Map map = new HashMap();
		map.put("一",1);
		map.put("二",2);
		map.put("三",3);
		map.put("四",4);
		map.put("五",5);
		map.put("六",6);
		Set keys =  map.keySet();//返回一个set 的集合
		for(String k:keys){//遍历key
			System.out.println(k);
		}
		for(String k:keys){//遍历values
			System.out.println(map.get(k));
		}
		for(String k:keys){//遍历key-values
			System.out.println(k + "=" + map.get(k));
		}
	}
}
package day03;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
/**
 * 
 *	遍历Map中所有的key-value
 *Map 中使用Entry的实例来保存 键值对
 *Entry 是Map的内部类,每一个实例用于保存一组存放在Map中的键值对
 *
 */
public class Demo05 {
	public static void main(String[] args){
		Map map = new HashMap();
		map.put("一",1);
		map.put("二",2);
		map.put("三",3);
		map.put("四",4);
		map.put("五",5);
		Set> entries = map.entrySet();
		Iterator> it = entries.iterator();
		while(it.hasNext()){
			Entry entry = it.next();
			System.out.println(entry);//遍历key-value
			String  key = entry.getKey();
			int value = entry.getValue();
			System.out.println(key);//遍历key
			System.out.println(value);//遍历value
		}
	}
}
package day29;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

/**
 * 
 * 遍历Map中所有的value
 * 不常用
 * 
 */
public class Demo06 {
	public static void main(String[] args){
		Map map = new HashMap();
		map.put("一", 1);
		map.put("二", 2);
		map.put("三", 3);
		map.put("四", 4);
		map.put("五", 5);
		//返回的所有value不是Set集合而是Collection   不用Set 是因为Set 不能放重复的元素,但是value 是允许有重复的
		Collection values = map.values();
		for(Integer i:values){
			System.out.println(i);//遍历value
		}
	}
}