黑马程序员-java之HashMap,TreeMap

来源:互联网 发布:网络安全检查总结报告 编辑:程序博客网 时间:2024/05/17 07:57

--------------android培训、java培训、期待与您交流--------------------


1 HashMap底层是按照哈希表对元素进行存储的,所以其进行查找,插入,删除比TreeMap效率高,一般常用HashMap


2 TreeMap则可以对元素进行排序

3 共性:二者存储元素都唯一,不允许有相同的key出现

实例:获取grflkaxsgnjsduasjwmlsnvxcuiqwhriuzsnvkzifu字符串中字母出现的次数,形如a(1)c(5)...括号中数字表示字母出现的次数,且按字母自然顺序排序
分析:从结果可以看出该形式字母与次数形成了一一对应的映射关系,而且最终结果要求字母有序,所以考虑用TreeMap

代码
package com.itheima;

import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeMap;

public class TreeMapDemo {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String str = "grflkaxsgnjsduasjwmlsnvxcuiqwhriuzsnvkzifu";//定义一个字符串
        System.out.println(getCount(str));//调用自定义的方法计算出各个字母出现的次数并打印
    }
    
    public static String getCount(String str){
        char[] chs = str.toCharArray();//将字符串变成字符数组
        TreeMap<Character,Integer> tm = new TreeMap<Character,Integer>();//创建TreeMap对象用于存储字母和对应次数组成的键值对
        for(int i=0;i<chs.length;i++){//遍历字符数组,拿数组中的元素和集合做比较
            if(!tm.containsKey(chs[i])){//集合中不存在该元素,则把该元素和对应的次数1存入集合
                tm.put(chs[i], 1);
            }else{
                int value = tm.get(chs[i]);
                value++;
                tm.put(chs[i], value);//集合中已存在该元素,则把该元素对应的原来次数自增1后再存入集合,覆盖原来的值
            }
        }
        StringBuilder sb = new StringBuilder();//定义一个StringBuilder容器,将集合中的键值对分别存进去形成与要求一样的结果格式
        Set<Map.Entry<Character,Integer>> entrySet = tm.entrySet();//将集合中的键值对取出组成Set集合
        Iterator<Map.Entry<Character, Integer>> it = entrySet.iterator();//取出set中的迭代器
        while(it.hasNext()){//遍历set集合
            Map.Entry<Character,Integer> entry = it.next();
            char ch = entry.getKey();//取得key即字母
            int count = entry.getValue();//取得value即对应的次数
            sb.append(ch+"("+count+")");//将字母与对应的次数以最后的格式存入集合StringBuilder容器中
        }
        return sb.toString();//返回最后的结果字符串
    }

}

运行结果

a(2)c(1)d(1)f(2)g(2)h(1)i(3)j(2)k(2)l(2)m(1)n(3)q(1)r(2)s(5)u(4)v(2)w(2)x(2)z(2)


0 0
原创粉丝点击