Java中HashMap的使用练习

问题:

给定任意一个字符串“today is a special day”,长度为任意,要求找出其出现次数最多的字符及计算次数。(可以用HashMap,HashSet,Collections实现)

解决:利用HashMap和HashSet解决。

代码:

import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;



public class HashMapDemo {

	/**
	 * @param args
	 * @author Wentasy
	 * @since 2012年4月23日17:36:53
	 * 给定任意一个字符串“today is a special day”,
	 * 长度为任意,要求找出其出现次数最多的字符及计算次数。
	 * (可以用HashMap,HashSet,Collections实现)
	 */
	public static void main(String[] args) {
		countChar();
	}
	
	public static void countChar(){
		Scanner scan = new Scanner(System.in);//构造输入流
		String str = "";//接受从键盘输入的字符串
		System.out.println("请输入一行字符串:");
//		str = scan.next();//注意:使用next方法如果你输入的字符串包括空格,则你将得到错误的结果
		str = scan.nextLine();
		
		HashMap<Character, Integer> map = new HashMap<Character, Integer>();//创建HashMap对象
		
		for (int i = 0; i < str.length(); i++) {
			Character ch = new Character(str.charAt(i));//截取第i个位置的字符
			Integer val = new Integer(1);//记录出现次数的变量
			Integer oldVal = map.put(ch, val);//把出现次数放到Map中
			//put方法返回与 key 关联的旧值;如果 key 没有任何映射关系,则返回 null。(返回 null 还可能表示该映射之前将 null 与 key 关联。)
			if (oldVal != null){
				map.put(ch, oldVal + 1);//如果不为空,将加1的旧指放到Map中
			}
		}
		
		System.out.println(map);//打印存放字符和出现次数的映射关系
		int max = 0;//出现次数的最大值
		Character ch1 = null;//记录出现次数最多的字符
		Set<Character> set = new HashSet<Character>();//创建Set对象
		set = map.keySet();//将Map转为Set对象
		Iterator<Character> it = set.iterator();//获得Set对象的迭代器
		while (it.hasNext()){
			Character ch = (Character)it.next();//获取元素
			Integer pos = map.get(ch).intValue();//通过Key查找Value
			//逐一比较,找出现次数最多的字符和出现次数
			if (pos > max){
				max = pos;
				ch1 = ch;
			}
		}
		
		//打印结果
		System.out.println("字符串" + str + "中出现最多的字符是:" + ch1 + "\n" + "出现次数为:" + max);
	}

}

 

运行效果截图:

遇到的问题说明:

在利用Scanner接收输入的字符串时,有两种方式

str = scan.next();               

str = scan.nextLine();

 

如果采用next方法的话,如果你输入的字符串包括空格,则你将得到错误的结果。

原因如下:

 

next()一定要读取到有效字符后才可以结束输入,对输入有效字符之前遇到的空格键、Tab键或Enter键等结束符,next()方法会自动将其去掉,只有在输入有效字符之后,next()方法才将其后输入的空格键、Tab键或Enter键视为分隔符或结束符;

nextLine()方法的结束符只是Enter键,即nextLine()方法返回的是Enter键之前的所有字符。

转载于:https://www.cnblogs.com/repent/archive/2013/04/11/3015058.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java是一种面向对象的编程语言,具有广泛的应用和较高的开发效率。下面列举一些Java的知识点以及相关的练习题。 1. 基本语法:掌握Java的关键字、变量、数据类型、运算符等基本语法,并通过编写程序练习。 2. 控制语句:了解if-else语句、for循环、while循环、switch语句等控制语句的用法,并编写相关程序进行练习。 3. 数组:掌握Java的数组使用方法,包括声明数组、初始化数组、访问数组元素等,并编写相应程序加深理解。 4. 方法:了解如何定义方法、调用方法以及传递参数,并编写包含方法的程序进行实操。 5. 类和对象:掌握面向对象的概念,了解如何定义类、创建对象、使用成员变量和成员方法等,并通过编写类和对象相关的程序进行练习。 6. 继承和多态:了解继承和多态的概念,明确子类和父类的关系,掌握方法的重写和重载,并通过编写相关的继承和多态的程序进行练习。 7. 异常处理:了解异常处理的机制,掌握try-catch-finally语句的使用,并通过编写包含异常处理的程序进行练习。 8. 输入输出:了解如何从键盘输入数据,并将结果输出到屏幕或文件,并通过编写相关的输入输出程序进行练习。 9. 集合框架:了解Java提供的各种集合类,如ArrayList、LinkedList、HashSet、HashMap等,掌握它们的用法,并通过编写相关程序进行练习。 10. 线程:了解线程的概念,掌握如何创建和启动线程,并了解线程同步和线程通信的方法,并通过编写相关的线程程序进行练习。 以上是一些Java的知识点以及相应的练习题,通过不断的学习和实践,可以更好地掌握和应用Java编程技术。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值