A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 李知伦 于 2012-8-22 17:41 编辑

HashMap取出元素时,能否控制顺序
比如取字母出现次数,能否按照,原始字符串的排列顺序,升序,降序等
  • import java.util.HashMap;
  • import java.util.Map;
  • public class getCharTimes {
  •         public static void main(String[] args) {
  •                 // TODO Auto-generated method stub
  •                 String str = "sdfasdewefqmcoad";
  •                 String character = "";
  •                 int frequency = 0;
  •                 Map<String, Integer> map = new HashMap<String, Integer>();
  •                 for (int i=0; i < str.length(); i++) {
  •                         String key = str.substring(i, i+1);
  •                         if (map.containsKey(key)) {
  •                                 map.put(key, map.get(key)+1);
  •                         }
  •                         else {
  •                                         map.put(key, 1);
  •                         }
  •                 }
  •                 for (Map.Entry<String, Integer> m : map.entrySet()) {
  •                         //取得最终的Key,value
  •                         character = m.getKey();
  •                         frequency = m.getValue();
  •                         System.out.println(character + "(" + frequency + ")");
  •                 }
  •         }
  • }



4 个回复

倒序浏览
要重写的HashCode和equals方法的吧
回复 使用道具 举报
写一个比较器实现Compareable接口或者Comparetor接口,然后将此比较器作为参数传入集合的构造函数中。
回复 使用道具 举报
顶下贴,有能代码实现的吗?
回复 使用道具 举报
本帖最后由 严学韦 于 2012-8-22 17:14 编辑

/*
需求:将字符串按照出现的次数进行排序
*/

import java.util.*;
class  MapDemo
{
        public static void main(String[] args)
        {
                String s= charCount("sdfasdewefqmcoad");
                System.out.println(s);
        }

        public static String charCount(String str)
        {
                char[] chs = str.toCharArray();//将字符串转换成字符数组。因为要对每一个字母进行操作。

                //定义一个map集合,因为打印结果的字母有顺序,所以使用treemap集合。
                TreeMap<Character,Integer> tm = new TreeMap<Character,Integer>();

                int count = 0;
                for(int x=0; x<chs.length; x++)//遍历字符数组
                {
                        if(!(chs[x]>='a' && chs[x]<='z' || chs[x]>='A' && chs[x]<='Z'))
                                continue;
                        Integer value = tm.get(chs[x]);

                        if(value!=null)
                                count = value;
                        count++;
                        tm.put(chs[x],count);//往集合中存储字符和数字

                        count = 0;
                }

                StringBuilder sb = new StringBuilder();

                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 ch = me.getKey();
                        Integer value = me.getValue();
                        sb.append(ch+"("+value+")");
                }
                return sb.toString();//将map集合中的数据变成指定的字符串形式返回
        }
}



运行结果.jpg (5.49 KB, 下载次数: 60)

运行结果.jpg
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马