map集合中存放的都是一组组映射关系 key=value
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键,该集合是不同步的。将Hashtable替代;jdk1.2,效率高 TreeMap:底层是二叉树数据结构,线程不同步,可以用于给Map集合中的键进行排序 注意: 添加元素时,如果键已经在集合中存在,那么后添加的值会覆盖原来的值,并且put方法会将原有的值返回map的底层就是set集合,set会报错,所以map也会报错,所以也要实现Comparable接口 应用一:
1、将学生作为键,地址作为值进行存储,名字年龄相同则被认定为一个人,最后输出
按年龄进行排序:
代码如下:
public class TreeMapDemo { public static void main(String[] args) { Map<Student, String> map = new TreeMap<>(); map.put(new Student("xiaoxiao",18), "beijing"); map.put(new Student("faker",28), "nanjing"); map.put(new Student("catgod",34), "hubei"); map.put(new Student("hurttong",22), "dongjing"); map.put(new Student("xiaoxiao",18), "beijing"); map.put(new Student("xiaoxiaoxiao",18), "beijing"); 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<Student>{ 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 Student() { } @Override 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 String toString() { return "Student [name="+ name +" , age="+ age +"]"; } @Override public int compareTo(Student o) { int num = getAge() - o.getAge(); if(num == 0) return this.getName().compareTo(o.getName()); return num; } }//3、需求改变、按姓名进行排序
把这行代码:Map<Student, String> map = new TreeMap<>(); 替换成:Map<Student, String> map = new TreeMap<>(new StuComp()); 在把下面所有的代码复制到最下面加可以看到效果了。
class StuComp implements Comparator<Student>{ @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; } }应用二:
map集合中的泛型要使用包装类,或者是引用数据类型
统计字符串中字符出现次数
按次数排序 思考:统计、排序。 统计功能:1、将字符串转为字符数组,将这个字符串中的字符当作map集合中的key,将出现的次数作为value值。 2、当字符第一次出现的时候,那么用它在集合中寻找,返回值必然为null。之后将该字符对应的值改为1. 3、如果说该字符不是第一次出现,该字符对应值就应该不为null,然后就+1.
代码看下图: OK,以上代码就是统计出现次数,按照字母顺序排序。。。