Map集合的使用
Map是一种键-值对(key-value)集合,在jdk1.8之后,它的结构由数组+链表,或者是数组+红黑树组成.
在Map接口中,有两个主要集合HashMap和TreeMap.
HashMap
存储数据的特点是:无序,唯一;这里的唯一是指key值唯一,value值可以重复.
Map 集合最典型的用法就是成对地添加、删除 key-value.
TreeMap
存储数据的特点是:唯一且有序的,一般是按升序的方式排列
实现要求:实现comparable接口,并且重写compareTo的方法用来实现它的排序
例子1
使用map,在控制台输入一串字符串,统计字符串中每个字符出现的次数,并按照次数的降序进行排序
public static void main(String[] args) { //创建HashMap,key值为char类型,value用来记录次数,int型 Map<Character,Integer> map = new HashMap<>(); Scanner input = new Scanner(System.in); System.out.println("请输入一段字符串"); String str = input.nextLine(); //不用变为数组,底层就是char[] for (int i = 0; i <str.length() ; i++) { char ch = str.charAt(i); //判断map中是否存在该字符 if(map.containsKey(ch)){
//map.put()添加,如果key相同,覆盖之前的value map.put(ch,map.get(ch) + 1); }else{ map.put(ch,1); }
先遍历字符串,得到每个字符,在判断map中是否存在该字符,如果存在,使用put()方法来添加,得到value值再加1;如果不存在,添加该字符,value初始值为1.
下面进行排序,我们知道,TreeMap只能根据key来排序,不能根据value来排序的.所以用TreeMap来排序显然不符合这题意的要求,下面介绍TreeSet,它可以指定值来自定义排序
TreeSet
与TreeMap相同,要求实现Comparable接口,并且重写compareTo的方法.下面用TreeSet来进行排序,把Map集合转为Set集合
//转换 Set<Map.Entry<Character, Integer>> entries = map.entrySet(); //使用TreeSet排序 1.实现Comparator接口 TreeSet treeSet = new TreeSet(new Comparator<Map.Entry<Character, Integer>>() { //2.重写CompareTo方法 @Override public int compare(Map.Entry<Character, Integer> o1, Map.Entry<Character, Integer> o2) { //得到map集合的value值 ,如果两个字符的value值相同,返回1或-1是都可以 if(o2.getValue() == o1.getValue()){ return 1; } //降序 return o2.getValue() - o1.getValue(); } });
例子2
使用 HashMap来存储学生信息,属性有学号,和姓名,根据学号进行删除操作。
首先分析,key值是唯一的,所以用学号来做key.
public static void main(String[] args) { Map<String,String> users = new HashMap<>(); users.put("11", "张三"); users.put("22", "李四"); users.put("33", "王五");
Scanner input = new Scanner(System.in); System.out.println("请输入要删除的学号:"); int num = input.nextInt(); if (users.containsKey(String.valueOf(num))) { // 判断是否包含指定学号 users.remove(String.valueOf(num)); // 如果包含就删除 } else { System.out.println("该学生不存在!"); }
//转为set集合,再使用迭代器 Iterator it = users.keySet().iterator(); while (it.hasNext()) { // 遍历 Map Object key = it.next(); Object value = users.get(key); System.out.println("学号:" + key + ",姓名:" + value); }
遍历Map集合,这里用到的是迭代器;jdk专门提供的迭代器用于遍历Collection接口的集合,主要用于List,Set集合,将map转换为set集合,
使用map.get()方法,获得对应key的value值,最后输出删除后的学生