数据结构:
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){ Mappoints = 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)); Mapmap = 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){ Mapmap = 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){ Mapmap = 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){ Mapmap = 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){ Mapmap = 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 } } }