黑马程序员———集合框架之Map接口

来源:互联网 发布:cchar数组初始化 编辑:程序博客网 时间:2024/04/29 18:45

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流------

一.Map集合的共性方法

1.1向Map集合中添加键值对的原理

a.我们知道List集合中可以添加重复的元素,调用add()方法添加成功返回true,而Set集合中不可以添加重复的元素,调用add()方法添加成功返回true,添加重复元素时添加失败返回false。实例代码如下:

public class Demo01 {public static void main(String[] args) {ArrayList<Student> al=new ArrayList<Student>();System.out.println(al.add(new Student("zhangsan",20)));//添加成功,输出trueSystem.out.println(al.add(new Student("zhangsan",20)));//添加成功,输出trueHashSet<Student> hs=new HashSet<Student>();System.out.println(hs.add(new Student("zhangsan",20)));//添加成功,输出trueSystem.out.println(hs.add(new Student("zhangsan",20)));//添加失败,输出false}}

b.Map集合通过put()方法向集合中添加键值对,返回的是与当前添加的键值对的key相同的之前添加的键值对的value值,并且当前添加的键值对会覆盖之前添加的键值对;若之前并没有添加具有相同key的键值对,则返回null。示例代码如下:

public class Demo01 {public static void main(String[] args) {Map<String,Student> m=new HashMap<String,Student>();System.out.println(m.put("01",new Student("zhangsan",20)));//添加成功,输出nullSystem.out.println(m.put("01",new Student("lisi",21)));//添加成功并覆盖之前添加的key为"01"的键值对,输出Student [name=zhangsan, age=20]}}

1.2List集合对元素的排序是按照添加的位置进行排序,add(element)表示将元素添加到集合末尾,add(int index,element)表示把元素添加到指定的位置;而Set集合对元素的排序则不是按照添加的顺序,HashSet集合是按照元素的哈希值对元素进行排序,TreeSet集合是按照集合的比较器(或元素的比较性)对元素进行排序的,相似地,Map集合中的HashMap集合对键值对的排序是按照键值对的key的哈希值,Map集合中的TreeMap集合对键值对的排序是按照键值对的key的比较性进行排序的。示例代码如下:

public class Demo01 {public static void main(String[] args) {HashMap<String,Student> m=new HashMap<String,Student>();System.out.println(m.put("abc",new Student("zhangsan",20)));//添加成功,输出nullSystem.out.println(m.put("bbd",new Student("lisi",21)));//添加成功并覆盖之前添加的key为"01"的键值对,输出Student [name=zhangsan, age=20]System.out.println(m.put("cba",new Student("zhangsan",20)));//输出{abc=Student [name=zhangsan, age=20], cba=Student [name=zhangsan, age=20], bbd=Student [name=lisi, age=21]}System.out.println(m);}}

public class Demo01 {public static void main(String[] args) {TreeMap<String,Student> m=new TreeMap<String,Student>();System.out.println(m.put("abc",new Student("zhangsan",20)));//添加成功,输出nullSystem.out.println(m.put("bbd",new Student("lisi",21)));//添加成功并覆盖之前添加的key为"01"的键值对,输出Student [name=zhangsan, age=20]System.out.println(m.put("cba",new Student("zhangsan",20)));//输出{abc=Student [name=zhangsan, age=20], bbd=Student [name=lisi, age=21], cba=Student [name=zhangsan, age=20]}System.out.println(m);}}
1.3使用迭代器取出集合中所有键值对的key,value,由于Map集合中没有迭代器,所以可以把集合中的所有键值对或key取出放到另一个Set集合中,调用该Set集合的迭代器即可,示例代码如下:

public class MapDemo {public static void main(String[] args) {Map<String, String> m=new HashMap<String, String>();System.out.println(m.put("01", "zhangsan"));//输出null,因为之前没有添加key为01的键值对System.out.println(m.put("01", "zhaoliu"));//输出zhangsan,put()方法返回的是与当前添加的键值对的key相同的之前添加的键值对的value值m.put("02", "lisi");m.put("03", "wangwu");m.put("04", "wangwu");System.out.println(m.get("01"));//根据key获取对应的value,输出zhaoliuSystem.out.println(m.remove("01"));//根据key删除对应的value,返回删除的value,输出zhaoliuSystem.out.println(m.get("01"));//输出null,因为已经删除其valueSystem.out.println(m.containsKey("01"));//输出false,因为已经删除其valueSystem.out.println(m.containsValue("wangwu"));//输出trueSystem.out.println(m);//输出{04=wangwu, 02=lisi, 03=wangwu}//也可以使用迭代器依次取出集合中每个键值对的key,value,由于Map集合中没有迭代器,//所以可以把集合中的所有键值对或key取出放到另一个Set集合中,调用该Set集合的迭代器即可Set<String> s=m.keySet();Iterator<String> it=s.iterator();while(it.hasNext()){String key=it.next();String value=m.get(key);System.out.println(key+"="+value);}Set<Map.Entry<String, String>> s1=m.entrySet();Iterator<Map.Entry<String, String>> it1=s1.iterator();while(it1.hasNext()){Map.Entry<String, String> me=it1.next();String key1=me.getKey();String value1=me.getValue();System.out.println(key1+"="+value1);}}}

1.3当Map集合中key与value是一对多的对应关系,例如一个班级名称对应多个学生对象,此时可以把value设置为一个List集合容器,示例代码如下:

public class MapDemo {public static void main(String[] args) {Map<String, List<Student>> m=new TreeMap<String, List<Student>>();List<Student> list=new ArrayList<Student>();list.add(new Student("zhangsan",20));list.add(new Student("lisi",21));list.add(new Student("wangwu",22));list.add(new Student("zhaoliu",23));m.put("java1505", list);Set<String> s=m.keySet();Iterator<String> it=s.iterator();while(it.hasNext()){String key=it.next();System.out.println(key);List<Student> list1=m.get(key);Iterator<Student> it1=list1.iterator();while(it1.hasNext()){System.out.println(it1.next());}}}}








0 0
原创粉丝点击