【Java之容器】2.Map常用子类

一、Map常用子类

  • Hashtable:内部结构是哈希表,同步的,不允许null作为键和值
    • Properties:用来存储键值对型的配置文件的信息,可以和IO技术相结合。
  • HashMap:内部结构是哈希表,不同步,允许null作为键和值。HashSet是一个HashMap实例。
    • LinkedHashMap
  • TreeMap:内部结构时二叉树,不同步,可以对Map集合中的键进行排序。
  • 方法使用与Set子类方法类似

二、练习

/*
 * 要求:
 * 获取一个字符串中每一个字母出现的次数
 * 要求打印结果是a(2),b(1)...
 * 
 * 思路:
 * 打印结果中要求字母和次数有映射关系
 * 若映射关系有有序编号,则考虑数组;没有!考虑Map集合
 * Map集合中可以保证唯一性并具备顺序的是TreeMap集合
 *
 * 步骤:
 * 集合存储的是字母和次数的映射关系Map
 * 因为操作的是字符串中的字母,所以先将字符串变为字符数组
 * 遍历字符数组,用每一个字母作为键去查找Map集合这个表
 * 如果字母键不存在,返回null,就将该字母作为键存入集合
 * 如果字母键存在,就将该字母键对应值取出加1,再将键和值存入集合
 */
public class Demo {
    public static void main(String[] args) {
        String s = "Afd s+ansnco-aef";
        //将字符串变为字符数组
        char[] c = s.toCharArray();
        //创建TreeMap集合
        Map map = new TreeMap();
        //遍历字符数组
        for(int i = 0; i < c.length; i++) {
            if(! ((c[i] >= 'a' && c[i] <= 'z') || (c[i] >= 'A' && c[i] <= 'Z')))
                continue;
            int count = 1;
            Integer valve = map.get(c[i]);
            if(valve != null)
                count = valve+1;
            map.put(c[i], count);
        }

        //取值
        Set> entrySet = map.entrySet(); 
        Iterator> it = entrySet.iterator();
        while (it.hasNext()) {
            Map.Entry entry = it.next();
            Sop.sop(entry.getKey() + "(" + entry.getValue() + ")");
        }
    }
}

你可能感兴趣的:(【Java之容器】2.Map常用子类)