`
xinzhengjie
  • 浏览: 15730 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

HashMap和TreeSet统计字符个数并排序

    博客分类:
  • JAVA
阅读更多
import java.util.Comparator;
import java.util.HashMap;
import java.util.Set;
import java.util.TreeSet;
import java.util.Map.Entry;

public class Test {

/**
* 统计出字符串中出现的所有字符,并按照出现的次数进行排序,输出
* 例: abcbabcddba --->c(2)d(2)a(3)b(4)
* 思路:
* 1.遍历所有的字符,
* 2.准备一个HashMap,将字符作为key,次数作为value存入集合
* 3.遍历Map,将键值对存入TreeSet集合,写比较器,先按照value排,再按照key排
* 4.遍历TreeSet,取出已经排好序的键值对,输出
*/
public static void main(String[] args) {
String s = "abcbabcddba";
//1.将字符串转为char数组
char[] buf = s.toCharArray();
//2.准备一个HashMap
HashMap<Character, Integer> hm = new HashMap<Character, Integer>();
//3.遍历字符数组
for(char c : buf) {
//1.将c作为key,找对应的value
Integer count = hm.get(c);
//2.判断,如果count为null,说明集合中不包含此字符对应的键,是当前字符第一次存,应该让count为1
if(count==null)
count = 1;
else
//如果不为null,说明之前存过,count++
count++;
//将c作为key,将count作为value存入map
hm.put(c, count);
}
//准备一个TreeSet,用于存entry对象,构造比较器进去,先比entry的value,再比key
TreeSet<Entry<Character, Integer>> ts =
new TreeSet<Entry<Character,Integer>>(
new Comparator<Entry<Character,Integer>>(){

public int compare(Entry<Character, Integer> e1,
Entry<Character, Integer> e2) {
int num = e1.getValue() - e2.getValue();
if(num!=0)
return num;
return e1.getKey() - e2.getKey();
}

});
//遍历map中的所有entry(键值对),存入TreeSet
Set<Entry<Character, Integer>> entrys = hm.entrySet();
for(Entry<Character, Integer> entry : entrys)
ts.add(entry);

//遍历TreeSet,取出已经排好序的键值对,输出
for(Entry<Character, Integer> e : ts)
System.out.println(e.getKey() + "(" + e.getValue() + ")");
}
}
分享到:
评论

相关推荐

    Java求字符串中出现次数最多的字符串以及出现次数

    本问题的解决方案使用了多种Java集合框架类,包括`TreeSet`、`ArrayList`、`HashMap`和`StringBuffer`,以及一些基本的字符串操作方法。 首先,我们使用`TreeSet`来收集所有不同的字符。`TreeSet`是一个有序集合,...

    实验05 Java集合.doc

    对于TreeSet实现第一题的问题,可以创建一个TreeSet,然后添加Person对象,由于TreeSet会自动根据equals()和hashCode()方法排序,所以它会自动处理重复的Person对象。 总之,这个实验深入地实践了Java集合框架的...

    Java Map、List、Set Swing 英文词频统计

    HashSet和TreeSet是Set的常见实现,它们分别提供了快速查找和排序功能。在词频统计中,Set可以用来去重,确保每个单词只被计算一次。 Swing是Java的图形用户界面(GUI)库,它提供了丰富的组件来构建桌面应用程序。...

    Java基础知识点.html

    类加载器 ClassLoader 反射 Stream 流 函数式编程 Lambda 表达式 网络编程-协议 网络编程-端口 网络编程-IP 多线程 IO流-字节流 IO流-字符流 IO流-转换流 File Map HashMap 序列化和反序列化 可变参数 类型通配符 ...

    专题之java学习大总结.pdf

    从给定文件信息来看,该文档主要围绕Java编程...整体来说,这份文档为Java学习者提供了一个全面的复习指南,从基本语法到核心集合框架,再到基本的数据类型和排序算法,为Java的学习者提供了一个结构化的知识点整理。

    兰州大学java实验9

    而TreeSet使用红黑树,保持元素的排序,无论是自然排序还是定制排序。在实验中,理解这些不同特性和使用场景是关键。 Queue接口表示先进先出(FIFO)的数据结构,常用的实现有LinkedList(通过实现Queue接口)和...

    JavaPD-Ch06mao 常见类集合类及泛型类应用1

    在JavaPD-Ch06mao中提到了几个常用的泛型类,如LinkedList、HashSet、HashMap、TreeSet和TreeMap。LinkedList是一个双向链表,适合于频繁的插入和删除操作;HashSet不包含重复元素,且不保证元素顺序;HashMap提供...

    30重点面试题-Fu1

    - String:不可变对象,一旦创建就不能修改,适合在不需要修改字符串的情况下使用,因为其内部优化,多次拼接会创建多个中间对象,可能导致内存浪费。 - StringBuffer:线程安全,提供了append等方法用于动态构建...

    JAVA中常用的集合类型[归类].pdf

    在ListExample类的main方法中,创建了一个ArrayList并添加了多个元素,包括字符串和整数,这显示了List接口允许存储不同类型元素的特性,并且可以包含重复元素。 总的来说,理解并熟练运用Java中的集合类型及其接口...

    javar练习200题

    - Set与Map:理解HashSet, TreeSet, HashMap和TreeMap的特性及使用场景。 - 排序与迭代:掌握Collections和Iterator接口,实现对集合元素的排序和遍历。 6. **字符串处理** - String类的常用方法:了解concat(),...

    JAVA基础集合.ppt

    例如,作业一可以通过创建一个Map,键为字符,值为出现次数,使用Scanner读取输入并统计;作业二可以使用ArrayList或LinkedList存储Employee对象,并实现相关操作。通过熟练掌握和运用集合框架,开发者能够更有效地...

    潭州软件学院 - Java VIP系统基础学习课程表.pdf

    第七章关注集合框架,讲解了Collection和Iterator接口,List和Set接口的实现,Map接口及其HashMap和TreeSet,以及泛型的应用。阶段项目旨在演示集合在实际编程中的应用。 第八章讲解Java的I/O流和文件操作,涵盖...

    java面试宝典梳理大纲最终-赵学浦.docx

    - **排序算法**:冒泡排序、选择排序、插入排序、快速排序、归并排序等,各有优缺点,冒泡和选择排序的时间复杂度为O(n^2)。 - **HashMap与Hashtable**:HashMap允许null键值对,非同步;Hashtable不接受null键值...

    28个java常用的工具类

    2. **HashSet 和 TreeSet**:这两个类实现了Set接口,HashSet允许快速添加和删除元素,而TreeSet则维护了元素的排序顺序。 3. **HashMap 和 TreeMap**:HashMap提供了键值对的快速存取,而TreeMap根据键的自然顺序...

    实验05 集合类与泛型 实验报告.pdf

    7. **StringBuilder类**:StringBuilder是字符串操作的一个高效工具,可以动态地添加、删除和修改字符串内容。在实验中,它用于将Product对象拼接成一个字符串输出。 8. **Iterator接口**:Iterator是Java集合框架...

    分布式架构第十六单元-试题及答案 (2).pdf

    本单元主要考察了Java编程语言相关的基础知识,包括变量命名规范、Java程序结构、Java与C++的区别、集合类(如TreeSet和HashMap)、泛型、文件I/O、字符编码、异常处理和多线程等概念。 1. 变量命名规范:在Java中...

    Java数据结构和算法 (第二版)

    二叉树是每个节点最多有两个子节点的数据结构,广泛用于搜索和排序。Java.util.TreeSet和TreeMap利用了红黑树实现有序集合和映射。堆常用于优先队列,Java的PriorityQueue类实现了堆的特性。 5. **图** 图是由顶点...

    Java高级特性-笔记.pdf

    Set接口如HashSet和TreeSet,保证了元素的唯一性,不保证顺序,其中TreeSet按自然排序或自定义比较器进行排序。Map接口如HashMap和TreeMap,用于存储键值对,HashMap提供快速访问,TreeMap则保持键的排序。 其次,...

    java 学习笔记

    - **TreeSet**和**TreeMap**:基于红黑树实现,保证排序性。 - **HashMap**和**LinkedHashMap**:存储键值对,HashMap无序,LinkedHashMap保持插入顺序或访问顺序。 - **ArrayList和LinkedList之间的选择**:取决...

    java语言部分集合宝典

    此外,还有一个Map接口,用于存储键值对,如HashMap、TreeMap和LinkedHashMap等。HashMap是基于哈希表的,查找速度快,但不保证元素顺序;TreeMap按照键的自然顺序或比较器顺序进行排序;LinkedHashMap则保持了插入...

Global site tag (gtag.js) - Google Analytics