Map集合重要练习

重要练习:将字符串中的字母按如下格式显示:

a(1)b(2)......

代码及思路如下:

/*
获取字符串中字母的次数,并打印出如下格式a(1)b(2)c(3)......

思路:
先定义一个方法,将该功能进行封装.
1.首先将字符串转换成字符数组 方法是toCharArray();
2.定义一个map容器用来接收每个字符, 因为结果是有序的可以使用TreeMap
3.遍历字符数组 for循环.
    将字母作为 键 去map集合中去查询该字母,如果返回null,说明map集合中没有该字母,那么将该字母和1存入到map集合中去,
    如果返回的不是null,说明此时的map集合中已经有了该字母,那么在map集合中该字母对应的次数自增1,然后将该字母和自增后的次数存入到map集合中去.
    存入后会覆盖原先的次数.
3将map集合中的数据按指定形式打印出来
    指定形式:
    1.定义一个容器.StringBuilder缓冲区可以存放任何数据的形式,通过Map集合的KeySet方法或者entrySet方法获取map集合中的键值或者其映射关系
    通过keySet的get(key)方法获取map集合中的value 或者entrySet的方法getKey()方法和getValue()方法获取对应的键和值.

    2.最后将键和值通过 StringBuilder的append方法添加进缓冲区,并打印. 由于StringBuilder和String不是同一个类,因此return sb的时候需要
    写上toString--->return sb.toString();

*/

import java.util.*;

class MapCharTest
{
    public static void main(String [] args)
    {
        String s = myCharCount("aabbccddedsf");
        sop(s);
    }

    public static String myCharCount(String str)
    {
        //将字符串转换成字符数组
        char [] chs = str.toCharArray();

        //定义一个map集合
        TreeMap<Character,Integer> tm = new TreeMap<Character,Integer>();

        //遍历字符数组
        for(int x = 0; x<chs.length; x++)
        {
            //将字母作为 键 去查找对应的 值
            Integer value = tm.get(chs[x]);

            //去除不是字母的其他字符.
            if(!(chs[x]>=‘a‘&&chs[x]<=‘z‘ || chs[x]>=‘A‘&& chs[x]<=‘Z‘))
                continue;

            //判断 值 是否存在
            if(value==null)
                tm.put(chs[x],1);
            else
            {
                value = value+1;
                tm.put(chs[x],value);
            }
        }
    //    sop(tm);    

        //创建一个缓冲区
        StringBuilder sb = new StringBuilder();

        /*
        //第一种Map取出方式 keySet方法
        Set<Character> keySet = tm.keySet();

        迭代set集合中的键集
        Iterator<Character> it = keySet.iterator();

        while(it.hasNext())
        {
            Character key = it.next(); //获取键
            Integer value = tm.get(key); //通过键获取对应的 值

            sb.append(key+"("+value+")"); //将键和值添加进缓冲区中

        }
        */

        //Map集合第二种取出方式:entrySet
        Set<Map.Entry<Character,Integer>> entrySet = tm.entrySet();

        Iterator<Map.Entry<Character,Integer>> it = entrySet.iterator();

        while(it.hasNext())
        {
            Map.Entry<Character,Integer> me = it.next();

            Character key = me.getKey();
            Integer value = me.getValue();

            sb.append(key+"("+value+")");
        }

        return sb.toString(); //将StringBuilder按String形式打印出来.

    }

    public static void sop(Object obj)
    {
        System.out.println(obj);

    }
}
    
时间: 2024-08-26 11:43:11

Map集合重要练习的相关文章

Map集合框架的使用

Map用于保存具有映射关系的数据(key-vlaue).Map的key不允许重复,即同一个Map对象的任何两个key通过equals方法比较总是返回false Map中包含了一个keySet()方法,用于返回Map所以key组成的Set集合. Map集合与Set集合元素的存储形式很像,如Set接口下有HashSet.LinkedHashSet.SortedSet(接口).TreeSet.EnumSet等实现类和子接口,而Map接口下则有HashMap.LinkedHashMap.SortedMa

Map集合按照value和key进行排序

最近由于特殊的业务需求,需要做相关数据排序,下面就贴出其中的将map集合中按照value或者key进行排序的代码,后面再具体详说. 1 /** 2 * map 集合排序 3 * @param map 4 * @return 5 */ 6 public static <K, V extends Comparable<? super V>> Map<K, V> sortMap(Map<K, V> map) 7 { 8 List<Map.Entry<K

Map集合

在Map里面每一次可以存放两个对象,所有的对象按照“key = value”的形式保存.也就是说通过key可以找到对应的value. Collection存放数据的目的是为了输出,而Map存放数据的目的是为了查找. 在java.util中Map接口里面定义的方法如下: public V put(K key, V value) 普通 向Map集合之中保存数据 public V get(Object key) 普通 根据key取得对应的value数据 public boolean containsK

Java遍历Map集合方法

package testMap; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; /**  * 循环遍历Map集合  *   * @author Administrator  *   */ pub

Java基础知识强化之集合框架笔记57:Map集合之HashMap集合(HashMap&lt;Student,String&gt;)的案例

1. HashMap集合(HashMap<Student,String>)的案例 HashMap<Student,String>键:Student      要求:如果两个对象的成员变量值都相同,则为同一个对象.值:String HashMap是最常用的Map集合,它的键值对在存储时要根据键的哈希码来确定值放在哪里. HashMap 中作为键的对象必须重写Object的hashCode()方法和equals()方法 2. 代码示例: (1)Student.java,如下: 1 pa

查询字符串中字母的个数(两种实现方式1,list与set集合 2,map集合)

题目: 取出一个字符串中字母出现的次数.如:字符串:"abcde%^kka27qoq" ,输出格式为:a(2)b(1)k(2)... 第一种方式(set和list结合使用): package itheima; import java.util.ArrayList; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; /** * .取出一个字符串中字母出现的次数.如:字符串:"

Map集合总结

Map是双列集合的顶层接口. Map集合的数据结构仅仅针对键有效,与值无关. Map集合存储的是键值对形式的元素,键唯一,值可以重复 Map集合有HashMap.Hashtable.TreeMap三个常用子类. 1.HashMap底层数据结构是哈希表.线程不安全,效率高.允许使用null键和null值 哈希表依赖两个方法:hashCode()和equals() 执行顺序: 首先判断hashCode()值是否相同 是:继续执行equals(),看其返回值 是true:说明元素重复,不添加 是fal

JAVA学习第三十九课(常用对象API)- 集合框架(七)— Map集合及其子类对象

一.Map集合常见子类 HashTable:内部结构是哈希表,同步,此实现提供所有可选的映射操作,不允许使用 null 值和 null 键 (HashTable下有子类Properties,使用频率非常高,用来存储键值对型的配置文件信息和IO技术相结合) HashMap:内部结构是哈希表,不同步,此实现提供所有可选的映射操作,并允许使用 null 值和 null 键. TreeMap:内部结构是二叉树,不同步,可以对Map集合中的键进行排序. 二.HashMap演示 import java.ut

遍历Map集合的几种方式

1 import java.util.HashMap; 2 import java.util.Iterator; 3 import java.util.Map; 4 import java.util.Map.Entry; 5 6 /** 7 * <p>遍历Map集合</p> 8 * @author:[email protected] 9 * @date:2017-5-30 10 */ 11 public class Test { 12 public static void main

Map集合概述和特点

A:Map集合概述和特点(Set底层依赖的是Map) 将键映射到值的对象 一个映射不能包含重复的键 每个键最多只能映射到一个值 B:Map接口和Collection接口的不同 Map是双列的(是双列集合的根接口),Collection是单列的(是单列集合的根接口) Map的键唯一,Collection的子体系Set是唯一的 Map集合的数据结构值针对键有效,跟值无关;如:TreeMap:键是用二叉树算法,HashMap:键是hash算法, Collection集合的数据结构是针对元素有效 图解: