java容器---Map扩展

来源:互联网 发布:bt种子编辑器 for mac 编辑:程序博客网 时间:2024/06/04 18:14

Map集合的扩展:

例子:一个公司类,包括人力资源部门和技术部门。每个部门包括姓名和年龄
     要求存入到map集合中。
     步骤:
     利用嵌套的Map集合
     第一个map集合存储公司部门和HashMap<String,String>
     HashMap<String,String> 中存储对应的部门人姓名和年龄
    Map<String,HashMap<String,Integer>> company = Map<String,HashMap<String,String>>
    HashMap<String>

import java.util.*;public class MapDemo2{public static void main(String []args){Map<String,HashMap<String,Integer>> company = new HashMap<String,HashMap<String,Integer>>();HashMap<String,Integer> renli = new HashMap<String,Integer>();HashMap<String,Integer> jishu = new HashMap<String,Integer>();company.put("renli",renli);company.put("jishu",jishu);renli.put("liu",18);renli.put("li",19);jishu.put("xu",18);jishu.put("wang",19);Set<String> keySet = company.keySet();Iterator<String> it = keySet.iterator();while(it.hasNext()){String bumen = it.next();System.out.println("公司部门:"+bumen);HashMap<String,Integer> hs = company.get(bumen);getInfo(hs);}}public static void getInfo(HashMap<String,Integer> hashMap){Set<Map.Entry<String,Integer>> entrySet = hashMap.entrySet();Iterator<Map.Entry<String,Integer>> it = entrySet.iterator();while(it.hasNext()){Map.Entry<String,Integer> me = it.next();String name = me.getKey();Integer age = me.getValue();System.out.println("name:"+name+" age:"+age);}}}

算法描述

   给出一段字符串,要求输出字符串中每个字符以及字符出现的次数。并且按照字符出现的次数又打到进行排序

   例如 输入:"jjjaaabccd"
        输出: a(3)j(3)c(2)b(1)d(1)
    算法实现:
    1、将字符串转换成字符数组
    2、定义一个map集合,因为要实现某种顺序,所以要用TreeMap()集合
    3、将字符数组与map集合中进行匹对,
       如果map中不存在该字符,将字符存入到map的key值中,并将value值+1,
       如果存在该字符,将value值取出+1
    4、将结果存入到map集合中,并且创建一个比较器实现Comparator方法,
      按照Value值的大小来进行比较

    5、按照格式遍历输出字符串

import java.util.*;import java.util.Map.Entry;public class TreeMapDemo{public static void main(String []args){System.out.println("请输入字符串");Scanner input = new Scanner(System.in);String str =  input.next();//String str = "aabbbbbccda";char[] ch = str.toCharArray();Map<Character,Integer> map = getChar(ch);if(map.isEmpty())System.out.println("空字符");valueSort(map);}/** * 按照value值进行排序 * 思路,将Map集合转换成List集合,利用Collections.sort(list,Comparator<>)方法进行排序 * @param map */public static void valueSort(Map<Character,Integer> map){System.out.println("--------");List<Entry<Character, Integer>> list = new ArrayList<Map.Entry<Character,Integer>>(map.entrySet());Collections.sort(list,new Comparator<Map.Entry<Character, Integer>>() {@Overridepublic int compare(Entry<Character, Integer> o1,Entry<Character, Integer> o2) {return o2.getValue() - o1.getValue();}});Iterator<Entry<Character, Integer>> it = list.iterator();while(it.hasNext()){Map.Entry<Character,Integer> me = it.next();char c = me.getKey();int v = me.getValue();System.out.println(c+"("+v+")");}}public static Map<Character,Integer> getChar(char[] ch){Map<Character,Integer> map = new TreeMap<Character,Integer>();for(int i=0;i<ch.length;i++){if(ch[i]<'a'&&ch[i]>'z'||ch[i]<'A'&&ch[i]>'Z')continue;Integer value = map.get(ch[i]);  //通过key值获取map中存入的value值if(value == null){  //如果value为空,表示map中不存在该字符,我们将它存入到map中map.put(ch[i],1);}else{ //如果不为空,表示map中已经存在该字符,我们将value值+1在存入到map中value++;map.put(ch[i],value);}}return map;}}
0 0
原创粉丝点击