1、初识map集合的特点: a、将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。(key=value) b、此接口取代 Dictionary 类,后者完全是一个抽象类,而不是一个接口。 HashMap:基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了非同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。注意:此实现不是同步的 TreeMap:基于红黑树(Red-Black tree)的 NavigableMap 实现。该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法;注意**:**此实现不是同步的。它不 支持 Entry.setValue 方法。(不过要注意的是,使用 put 更改相关映射中的映射关系是有可能的。) Hashtable:底层是哈希表数据结构,不可以存入null键null值,该集合石线程同步的,jdk1.0,效率低 特别要注意: 添加元素时,如果键已经在集合中存在,那么后添加的值会覆盖原来的值,并且put方法会将原有的值返回
也可以登陆网址http://tool.oschina.net/apidocs/apidoc?api=jdk-zh进行查看
package com.wangshoyang.collection.map;
import java.util.HashMap; import java.util.Map.Entry; import java.util.Set;
/**
初实map在集合中允许嵌套map集合key不能重复 put 1、添加集合元素的同时,它可以编辑原有的元素 如果说集合中没有key对应的value,那么往集合中添加元素 如果说集合中对应的key有value值,那么代表替换原有的值 2、返回替换前key对应的value值 entrySet(性能更好) keySet @author wsy*/ public class MapDemo { public static void main(String[] args) { HashMap<String, Object> map=new HashMap<>(); map.put(“java01”, 1); map.put(“java02”, 2); map.put(“java03”, 3); map.put(“java04”, 3);
Object put=map.put("java04", "*"); System.out.println(put); System.out.println(map); Set<Entry<String, Object>> entrySet = map.entrySet(); for(Entry<String,Object >entry:entrySet) { System.out.println(entry.getKey()+"==="+entry.getValue()); } System.out.println("--------------------"); Set<String> keySet = map.keySet(); for(String key:keySet) { System.out.println(key+"===="+map.get(key)); } }}
Demo1: 1、将学生作为键,地址作为值进行存储,名字年龄相同则被认定为一个人,最后输出需: a.建立一个student类,实例化作为key添加到map集合中。 b。对学生进行判重 2、需求改变、按姓名进行排序 package com.wangshoyang.collection.map;
import java.util.Comparator; import java.util.HashMap; import java.util.Map; import java.util.TreeMap; import java.util.Map.Entry; import java.util.Set;
/**
1、将学生作为键,地址作为值进行存储,名字年龄相同则被认定为一个人,最后输出
a.建立一个student类,实例化作为key添加到map集合中
b。对学生进行判重
2、按姓名进行排序
@author wsy */ public class TreeMapDemo { public static void main(String[] args) { // Map<Student, String> map = new HashMap<>(); Map<Student, String> map = new TreeMap(new StuComp()); map.put(new Student(“aaa”, 18), “beijing”); map.put(new Student(“bbb”, 54), “ads”); map.put(new Student(“ccc”, 66), “ghj”); map.put(new Student(“ddd”, 78), “iutyyr”); map.put(new Student(“aaa”, 18), “pdfs”); map.put(new Student(“jhfd”, 18), “pdfs”);
System.out.println(map.size()); Set<Entry<Student, String>> entrySet = map.entrySet(); for (Entry<Student, String> entry : entrySet) { System.out.println(entry.getKey() + "===" + entry.getValue()); }} }
class Student implements Comparable { 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; } public Student(String name, int age) { super(); this.name = name; this.age = age; } public String toString() { return "Student[name=" + name + ",age=" + age + "]"; } public Student() { super(); } public int hashCode() { return this.getName().hashCode() + this.getAge() * 39; } @Override public boolean equals(Object obj) { Student stu = (Student) obj; return this.getAge() == stu.getAge() && this.getName().equals(stu.getName()); } @Override public int compareTo(Student o) { int num=this.getAge() - o.getAge(); if(num==0) { return this.getName().compareTo(o.getName()); } return num; }}
class StuComp implements Comparator{ @Override public int compare(Student o1, Student o2) { int num=o1.getName().compareTo(o2.getName()); if(num==0) { return o1.getAge() - o2.getAge(); } return num; } } 运行可得 Demo2: 统计字符串出现的次数 TreeMap默认按key进行升序排序,如果想改变默认的顺序,可以使用比较器: 例如:asdsfgfdheeyytuiuipfghfgbasd 输出: a(5)b(7 )的代码如下 package com.wangshoyang.collection.map;
import java.util.HashMap; import java.util.Map; import java.util.TreeMap;
/**
map集合中的泛型要使用统计字符串出现的次数asdsfgfdheeyytuiuipfghfgbasda(5)b(7 )思考统计、排序统计功能1、将字符串转为字符数组,将这个字符串的字符当作map集合中的key,将出现的字符作为value值2、当字符第一次出现的时候,那么用它在集合中进行寻找,返回值必然为null,之后该字符对应的值改为13、如果说该字符不是第一次出现,该字符对应的值就部位null,然后+1@author wsy/ public class HashMapDemo { public static void main(String[] args) { String str=“asdsfgfdheeyytuiuipfghfgbasd”; str=cishu(str); System.out.println(str); } /* * 字符串出现的统计功能 * @param str * @return */ private static String cishu(String str) { char[] charArray = str.toCharArray(); Map<Character, Integer> map=new TreeMap<>(); for (char c : charArray) { Integer value = map.get©; if(value ==null) { map.put(c, 1); }else { map.put(c, ++value); } } StringBuffer s=new StringBuffer(); for(Map.Entry<Character, Integer> entry:map.entrySet()) { s.append(entry.getKey()+"("+entry.getValue()+")"); } return s.toString(); }
} 运行代码可得 喜欢的可以点赞关注我哦 每天会更新一些新的知识 希望可以帮助到你