Map接口特点:
(1)Map接口中的数据存储是以键值对方式存在
(2)collection是单列集合,Map是双列集合
(3)Map中不允许存在相同的键值,但value值是可以重复的
(4)Map接口中常用的集合有HashMap集合和LinkedHashMap集合
Map中常用的方法
put(k key,v value);将k键的key,v的value值存入集合中
get(k key);得到key键的value值
remove(k key );将k键为key的数据条删除
代码展示:
public class Demo01 { public static void main(String[] args) { //创建map集合 HashMap<String,Integer> map=new HashMap<String,Integer>(); //存值 map.put("喜洋洋",18); map.put("美羊羊",19); map.put("美羊羊",20); //删除 map.remove("喜洋洋"); //取值 System.out.println(map.get("喜洋洋")); System.out.println(map.get("美羊羊")); } }
运行结果为:
null
20
Map中遍历方法
1、getkey()方法,该方法返回一个所有key所在的set集合,得到set集合后,可以用增强for或用迭代器去遍历这个set集合就可以了
例:用增强for遍历
public class Demo02 { public static void main(String[] args) { HashMap<String, String> map=new HashMap<String, String>(); map.put("小白", "java1127"); map.put("小黑", "java1128"); map.put("小兰", "java1129"); //1.keyset方法 //现获取key所在的set集合 Set<String> set=map.keySet(); //增强for遍历 for(String s:set){ System.out.println(s+"...."+map.get(s)); } } }
例:用迭代器遍例
public class Demo02 { public static void main(String[] args) { // TODO Auto-generated method stub HashMap<String, String> map=new HashMap<String, String>(); map.put("小白", "java1127"); map.put("小黑", "java1128"); map.put("小兰", "java1129"); //1.keyset加迭代器 Set<String> set=map.keySet(); Iterator<String> it=set.iterator(); while(it.hasNext()){ String key=it.next(); System.out.println(key+"..."+map.get(key)); } } }
2、entrySet()方法,该方法返回一个存着键值对的set集合,(键值对集合:Map.entry<K,V>,entry<K,V>是map接口中用static修饰的内部类,该类中有独有的获取键和值的方法:getKey(),getValue(),这两个方法可以获取键值对的键和值)
例:用增强for方法,遍例键值对
public class Demo02 { public static void main(String[] args) { HashMap<String, String> map=new HashMap<String, String>(); map.put("小白", "java1127"); map.put("小黑", "java1128"); map.put("小兰", "java1129"); //2Entryaet对象 //获取所有结婚证所在的set集合 Set<Map.Entry<String, String>> set=map.entrySet(); //遍历set集合 for(Map.Entry<String, String> entry:set){ System.out.println(entry.getKey()+"..."+entry.getValue()); } } }
例:用迭代器,遍例键值对
public class Demo02 { public static void main(String[] args) { HashMap<String, String> map=new HashMap<String, String>(); map.put("小白", "java1127"); map.put("小黑", "java1128"); map.put("小兰", "java1129"); //3.迭代器 //获取所有结婚证所在的set集合 Set<Map.Entry<String, String>> set=map.entrySet(); //获取迭代器对象 Iterator<Map.Entry<String, String>> it=set.iterator(); //遍历 while(it.hasNext()){ Map.Entry<String, String> entry=it.next(); System.out.println(entry.getKey()+"..."+entry.getValue()); } } }
Map集合中我们要存储自定义类对象时,要在自定义类中重写equls方法和hashcode方法。
例:自定义Person类
public class Person { private String name; private int age; 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; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + "]"; } public Person(String name, int age) { super(); this.name = name; this.age = age; } public Person() { super(); } @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; Person other = (Person) 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 class Demo03 { public static void main(String[] args) { HashMap<Person, String> map=new HashMap<Person, String>(); //存值 map.put(new Person("小红",18), "java1127"); map.put(new Person("小黑",19), "java1128"); map.put(new Person("小黑",19), "java1128"); //entryset加增强for Set<Map.Entry<Person, String>> set=map.entrySet(); for(Map.Entry<Person, String> entry:set){ System.out.println(entry.getKey()+".."+entry.getValue()); } } }