集合Map的简单方法:该集合存储键值对,一对一对往里面存,而且要保证健的唯一性
1.添加
put(K key,V value)
putAll(Map<? Extends k, ? extends v> m)
2.删除
clear()
3.判断
containsValue(Object value)
containsKey(Object key)
isEmpty()
4.获取
get(Object key)
size()
values()
entrySet()
keySet()
方法代码示例:
package CollectionTest; import java.util.Collection; import java.util.HashMap; import java.util.Map; public class HashMapDemo1 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Map<String,String> map = new HashMap<String,String>(); //在添加元素时,如果添加的相同的键,则后添加的键对应的值会覆盖前面的值 map.put("001", "zhangsan"); map.put("002", "lisi"); map.put("003", "wangwu"); System.out.println("containsKsy:"+map.containsKey("002")); //remove移除键的同时,返回的是此键对应的值 //System.out.println("remove:"+map.remove("002")); //在HashMap中null可以当做键存起来 map.put(null, "haha"); System.out.println(map.get(null)); //通过values方法得到HashMap的所有值,此时返回的是集合 Collection<String> coll = map.values(); System.out.println("values:"+coll); } }
Map(三种类型以及他们的区别):
- ----HashTable:底层是哈表表数据结构,键和值不可以出现null,该集合石线程同步的
- ----HashMap:底层是哈希白表数据结构,允许使用null值和null键,该集合石不同步的
- ----TreeMap:底层是二叉树数据结构,线程不同步,可以用于给map集合中的键进行排序
Map集合的两种取出方式:
- Set<k> keySet:将map中所有的键存入到set集合,因为set具备迭代器,所有可以迭代方式出去所有的键,在根据get方法,获取每一个键对应的值
2.Set<Map.Entry<k,v>> entrySet:将map集合中的映射关系存入到了set集合中,而这个关系的数据类型就是Map.Entry
Map.Entry 其实Entry也是一个接口,它是Map接口中的一个内部接口
Map.Entry内部代码示例:
interface Map{ public static interface Entry{ public abstract Object getKey(); public abstract Object getValue(); } }
Map集合的取出原理:
将map集合转化成set集合,之后调用迭代器取出
Map集合第一种出去方式代码示例:
package CollectionTest; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; public class HashMapDemo2 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Map<String,String> map = new HashMap<String,String>(); map.put("001", "zhangsan"); map.put("002", "lisi"); map.put("003", "wangwu"); //先获取map集合的所有键的Set集合,keySet Set<String> keyset = map.keySet(); //有了set集合就可以获得其迭代器 Iterator<String> it = keyset.iterator(); while(it.hasNext()){ String key = it.next(); String value = map.get(key); System.out.println("Key_"+key+":"+value); } } }
Map集合第二种出去方式代码示例:
package CollectionTest; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; public class HashMapDemo2 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Map<String,String> map = new HashMap<String,String>(); map.put("001", "zhangsan"); map.put("002", "lisi"); map.put("003", "wangwu"); Set<Map.Entry<String, String>> entry = map.entrySet(); Iterator<Map.Entry<String, String>> it = entry.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中除去重复的键需要重写HashCode和equals方法
每一个学生都有对应的归属地
学生Student, 地址String
学生属性:姓名,年龄
注意:姓名和年龄相同的是为同一个学生
保证学生的唯一性
描述学生
定义map容器,将学生作为键,地址最为值,存入,获取map集合中的元素
重写equals和HashCode可以:右击鼠标->source->重写HashCode和equals:代码示例:
package CollectionTest; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; class Student{ private String name; @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + age; result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Student other = (Student) obj; if (age != other.age) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } private int age; Student(String name,int age){ this.name=name; this.age=age; } //重写了toString方法 可以直接返回name和age public String toString(){ return name+":"+age; } } public class HashMapDemo3 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Map<Student,String> map = new HashMap<Student,String>(); map.put(new Student("zhangsan",10), "nanjing"); map.put(new Student("zhangsan",10), "shanghai"); map.put(new Student("lisi",20), "shanghai"); map.put(new Student("wangwu",30), "guangzhou"); Set<Student> keyset = map.keySet(); Iterator<Student> it = keyset.iterator(); while(it.hasNext()){ Student stu = it.next(); String add = map.get(stu); System.out.println(stu+","+add); } System.out.println(".........................."); Set<Map.Entry<Student, String>> set = map.entrySet(); Iterator<Map.Entry<Student, String>> it2 = set.iterator(); while(it2.hasNext()){ Map.Entry<Student, String> me = it2.next(); Student stu2 = me.getKey(); String add2 = me.getValue(); System.out.println(stu2+","+add2); } } }