标签:
Map集合:该集合存储键值对,一对一对往里存。而且要保证键的唯一性。
1、添加
put(K key, V value)
putAll(Map<? extends K,? extends V> m)
2、删除
clear()
remove(Object key)
3、判断
containsKey(Object key)
containsValue(Object value)
isEmpty()
4、获取
get(Object key) :获取值
size()
values()
entrySet()
keySet()
Map
!--Hashtable :底层是哈希表数据结构,不可以存入null键null值,该集合是线程同步的。JDK1.0,效率低。
!--HashMap :底层是哈希表数据结构,允许使用null键和null值,该集合是不同步的。JDK1.2效率高。
!--TreeMap :底层是二叉树数据结构,线程不同步,可以用于给Map集合中的键进行排序。
和Set很像
其实,Set底层就是使用了Map集合。
public class MapDemo { public static void main(String[] args) { Map<String,String> map = new HashMap<String,String>(); //添加元素,如果出现添加时,相同的键,那么后添加的值会覆盖原有键对应值, //并put方法会返回被覆盖的值。 System.out.println("put:"+map.put("01", "zhangsan1")); System.out.println("put:"+map.put("01", "wangwu")); map.put("02", "zhangsan2"); map.put("03", "zhangsan3"); System.out.println("containKey:"+map.containsKey("022")); //System.out.println("removeKey:"+map.remove("02")); System.out.println("get:"+map.get("02")); //map.put(null, "haha"); map.put("04", null); System.out.println("get:"+map.get("04")); //可以通过ge方法的返回值来判断一个键是否存在。通过null返回来判断 //获取map集合中所有的值 Collection<String> coll = map.values(); System.out.println(coll); System.out.println(map); } }
map集合的两种取出方式:
1、Set<k> keySet:将map中所有的键存入到Set集合中,因为Set具备迭代器,
所以可以使用迭代方式取出所有的键,再根据get方法,获取每一个键对应的值。
Map集合的取出原理:将Map集合转成Set集合,再通过迭代器取出。
2、Set<Map.Entry<k,v>> entrySet:将map集合中的映射关系存入到set集合中,
而这个关系的数据类型就是:Map.Entry
public class MapDemo2quzhi { public static void main(String[] args) { Map<String,String> map = new HashMap<String,String>(); map.put("02", "zhangsan2"); map.put("03", "zhangsan3"); map.put("01", "zhangsan1"); map.put("04", "zhangsan4"); //将Map集合中的映射关系取出,存入到Set集合中。 Set<Map.Entry<String, String>> entrySet = map.entrySet(); Iterator<Map.Entry<String, String>> it = entrySet.iterator(); while(it.hasNext()) { Map.Entry<String, String> me = it.next(); String key = me.getKey(); String value = me.getValue(); System.out.println(key+":"+value); } /* //先获取map集合的所有键的Set集合,keySet(); Set<String> keySet = map.keySet(); //有了Set集合,就可以获取迭代器 Iterator<String> it = keySet.iterator(); while(it.hasNext()) { String key = it.next(); //有了键可以通过map集合的get方法获取其对应的值。 String value = map.get(key); System.out.println("key:"+key+",value:"+value); } */ } } /* Map.Entry 其实Entry也是一个接口,它是Map接口中的一个内部接口 有Map才有Entry,所以定义内部类 interface Map { public static interface Entry { public abstract Object getKey(); public abstract Object getValue(); } } class HashMap implements Map { class haha implements Map.Entry { public Object getKey(){} public Object getValue(){} } } */
mao扩展知识。 一对多关系!
import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; /* mao扩展知识。 一对多关系! map集合被使用是因为具备映射关系。 "yureban" Student("01" "zhangsan"); "yureban" Student("02" "lisi"); "jiuyeban" Student("01" "wangwu"); "jiuyeban" Student("02" "zhaoliu"); 一个学校有多个教室,每个教室都有一个名称。 */ class Student1 { private String id; private String name; Student1(String id,String name) { this.id = id; this.name = name; } public String toString() { return id+"::"+name; } } public class MapDemo3_kuozhan { public static void demo() { HashMap<String,List<Student1>> czbk = new HashMap<String,List<Student1>>(); List<Student1> yure = new ArrayList<Student1>(); List<Student1> jiuye = new ArrayList<Student1>(); yure.add(new Student1("01","zhagnsan")); yure.add(new Student1("04","wangwu")); yure.add(new Student1("01","zhouqi")); yure.add(new Student1("02","zhaoliu")); czbk.put("yureban", yure); czbk.put("jiuyeban", jiuye); Iterator<String> it = czbk.keySet().iterator(); while(it.hasNext()) { String roomName = it.next(); List<Student1> room = czbk.get(roomName); //System.out.println(roomName); getInFos(room); } } public static void getInFos(List<Student1> list) { Iterator<Student1> it = list.iterator(); while(it.hasNext()) { Student1 s = it.next(); System.out.println(s); } } public static void main(String[] args) { demo(); //教室 /* HashMap<String,HashMap<String,String>> czbk = new HashMap<String,HashMap<String,String>>(); HashMap<String,String> yure = new HashMap<String,String>(); HashMap<String,String> jiuye = new HashMap<String,String>(); czbk.put("yureban", yure); czbk.put("jiuyeban", jiuye); yure.put("01", "zhangsan"); yure.put("02", "lisi"); jiuye.put("01", "wangwu"); jiuye.put("02", "zhaoliu"); //取出学校所有学生,遍历czbk集合,获取所有的教室 Iterator<String> it = czbk.keySet().iterator(); while(it.hasNext()) { String roomName = it.next(); HashMap<String,String> room = czbk.get(roomName); //System.out.println(roomName); getStudentOf(room); } //取出某个班级所有学生 //getStudentOf(jiuye); */ } public static void getStudentOf(HashMap<String,String> roomMap) { Iterator<String> it = roomMap.keySet().iterator(); while(it.hasNext()) { String id = it.next(); String name = roomMap.get(id); System.out.println(id+":"+name); } } }
import java.util.Iterator; import java.util.Map; import java.util.Set; import java.util.TreeMap; /* 练习: "sdfgzxcvsdfxcdf"获取该字符串中的字母出现的次数。 希望打印结果:a[1]c[2]...... 通过结果发现,每一个字母都有对应的次数。 说明字母和次数之间都有映射关系、 注意了,当发现有映射关系时,可以选择Map集合。 因为map集合中存放的就是映射关系。 什么时候使用map集合呢? 当数据之间存在着映射关系时,就要先想到map集合。 思路: 1、将字符串转换成成字符数组,因为要对每一个字母进行操作。 2、定义一个map集合,因为打印结果的字母有顺序,所以使用TreeMap集合。 3、遍历字符数组。 将每一个字母作为键去查map集合, 如果返回是null,将该字母和1存入到map集合中。 如果返回不是null,说明该字母在map集合已经存在并有对应次数。 那么就获取该次数并进行自增,然后将该字母和自增后的次数存入到map集合中, 覆盖调用原来键所对应的值。 4、将map集合中的数据变成指定的字符串形式返回。 */ public class MapTest3zimu { public static void main(String[] args) { String s = charCount("aabfcdabc+d-efa"); System.out.println(s); } public static String charCount(String str) { char[] chs = str.toCharArray(); TreeMap<Character,Integer> tm = new TreeMap<Character,Integer>(); int count = 0; for(int x=0;x<chs.length;x++) { if(!(chs[x]>=‘a‘&&chs[x]<=‘z‘||chs[x]>=‘A‘ && chs[x]<=‘Z‘)) continue; Integer value = tm.get(chs[x]); if(value!=null) count = value; count++; tm.put(chs[x], count); count = 0; /* 方法二 if(value==null) { tm.put(chs[x], 1); } else { value = value +1; tm.put(chs[x], value); } */ } //System.out.println(tm); //缓冲区 希望打印结果:a(4)b(2)c(2)d(2)e(1)f(2)...... StringBuilder sb = new StringBuilder(); Set<Map.Entry<Character, Integer>> entrySet = tm.entrySet(); Iterator<Map.Entry<Character, Integer>> it = entrySet.iterator(); while(it.hasNext()) { Map.Entry<Character, Integer> me = it.next(); Character ch= me.getKey(); Integer value = me.getValue(); sb.append(ch+"("+value+")"); } return sb.toString(); } }
标签:
原文地址:http://www.cnblogs.com/cailingsunny/p/4695179.html