`

今天非常高兴,解决了一个由来已久的单词出现频率统计问题。以及容器浅总结

阅读更多

总述:人与动物的最大区别在于对工具的使用。也许你单独的能力不怎么样,但是当你使用了恰当的工具并对周边的相关资源进行了优化配置,那么你不一定是战无不胜的,但至少你会攻无不克。O(∩_∩)O~

由于一直用到容器,每次都用起来很陌生不上手,最近有遇到了,我觉得很有必要把这个家伙干掉了。所以专门拿了一段时间来搞定容器这部分。
参考资料:《ThinkingInJava》
精彩文摘:
1.   即使在Java没有直接的关键字支持,容器类仍旧是可以显著增强你的编程能力的基本工具。   2.  Set:能够产生每个元素都唯一的列表时相当有用的功能。  3.  Map:将对象映射到其它对象的能力是一种解决编程问题的杀手锏。  4.  Map:  Map与数组和其他的容器一样,可以很容易地扩展到多维,而我们只需将其值设置为Map(这些Map的值可以是其它容器,甚至是其它Map),因此我们能够很容易的将容器组合起来从而快速的生成强大的数据结构。  5.  使用接口描述的一个理由是它可以使我们能够创建更通用的大妈,通过针对接口而非具体实现来编写代码,我们的代码可以应用于更多的对象类型。 6.  Java SE5的重大变化之一:泛型的概念:适用于广泛的类型。  7.  根据我的经验,理解了边界所在你才能成为编程高手,因为只有你知道了某个技术不能做到什么,你才能更好的做到所能做到的。
8.  更多精彩精在ThinkingInJava



下面来看看这个单词频率统计的问题吧。虽然这个问题不关乎生死,但是都没有很好的解决过,当然我确定今天这里的解决办法依然不是一个好的办法,但是就像我的总述所说:至少对工具的使用让我找到了一种解决问题的方法吧。

具体代码:

package mapApp;

import java.util.*;

public class SortValue {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		String str[] = "java java platform is is is is perfect".split(" ");
		statistics(str);
	}

	public static void statistics(String str[]) {
		Map<String, Integer> m = new HashMap<String, Integer>();// TreeMap输出是有序的
		for (int i = 0; i < str.length; i++) {
			Integer freq = m.get(str[i]);
			m.put(str[i], freq == null ? 1 : freq + 1);
		}
		// 把Map以键值对的形式存入一个可以排序的TreeSet中去
		Set<WorkForMap> set = new TreeSet<WorkForMap>();
		for (String s : m.keySet()) {
			set.add(new WorkForMap(s, m.get(s)));
		}
		System.out.println("输出形式一:");
		System.out.println(set);

		// 上面的输出显然不是我们需要的噻,那么让我们来改变一种输出方式吧!
		System.out.println("输出形式二:");
		for (Iterator<WorkForMap> it = set.iterator(); it.hasNext();) {
			WorkForMap w = it.next();
			System.out.println("单词:" + w.str + " 出现的次数为: " + w.freq);
		}
		// 当然我们可以控制只输出前三名来
		System.out.println("输出形式三:");
		int count = 1;
		for (Iterator<WorkForMap> it = set.iterator(); it.hasNext();) {
			WorkForMap w = it.next();
			System.out.println("第" + count + "名为单词:" + w.str + " 出现的次数为: "
					+ w.freq);
			if (count == 3)// 当输出3个后跳出循环
				break;
			count++;
		}
	}
}
public class WorkForMap implements Comparable<WorkForMap> {
	String str;
	Integer freq;

	public WorkForMap(String str, Integer freq) {
		this.str = str;
		this.freq = freq;
	}

	public int compareTo(WorkForMap o) {
		int cmp = freq.intValue() - o.freq.intValue();
		return (cmp == 0 ? str.compareTo(o.str) : -cmp);
		//只需在这儿加一个负号就可以决定是升序还是降序排列
		//因为TreeSet会调用WorkForMap的compareTo方法来决定自己的排序
	}

	@Override
	//因为当我们print的时候,print会调用WorkForMap的toString方法来决定自己的输出
	//我们当然可以按照自己的方式来显示输出啦
	public String toString() {
		return str + "出现的次数为:" + freq;
	}
}
输出结果:
输出形式一:
[is出现的次数为:4, java出现的次数为:2, perfect出现的次数为:1, platform出现的次数为:1]
输出形式二:
单词:is 出现的次数为: 4
单词:java 出现的次数为: 2
单词:perfect 出现的次数为: 1
单词:platform 出现的次数为: 1
输出形式三:
第1名为单词:is 出现的次数为: 4
第2名为单词:java 出现的次数为: 2
第3名为单词:perfect 出现的次数为: 1





.
分享到:
评论
2 楼 朗月缠云 2013-06-10  
受教了,在工作中享受生活!!
1 楼 ocaicai 2010-11-27  
因为WorkForMap已经有了自己的toString方法,所以可以直接打印显示:
		Set<WorkForMap> set = new TreeSet<WorkForMap>();
		for (String s : m.keySet()) {
			set.add(new WorkForMap(s, m.get(s)));
		}
		System.out.println("输出形式一:");
		System.out.println(set);

		// 上面的输出显然不是我们需要的噻,那么让我们来改变一种输出方式吧!
		System.out.println("输出形式二:");
		for (Iterator<WorkForMap> it = set.iterator(); it.hasNext();) {
			WorkForMap w = it.next();
			System.out.println(w);//System.out.println("单词:" + w.str + " 出现的次数为: " + w.freq);   

		}
		// 当然我们可以控制只输出前三名来
		System.out.println("输出形式三:");
		int count = 1;
		for (Iterator<WorkForMap> it = set.iterator(); it.hasNext();) {
			WorkForMap w = it.next();
			System.out.println("第" + count + "名为单词:" + w);// System.out.println("第" + count + "名为单词:" + w.str + " 出现的次数为: "+ w.freq); 
			if (count == 3)// 当输出3个后跳出循环
				break;
			count++;
		}

相关推荐

    数字图书馆解决方案

    数字图书馆的概念其实由来已久,随着信息技术的迅猛发展,它已经演变成一个综合性的信息服务体系。数字图书馆不仅仅是一个虚拟的图书馆,它是对传统图书馆服务功能的拓展和延伸。在这个体系中,通过数字技术将传统...

    浅谈第五代移动通信技术.pdf

    1994年,中国移动通信史上第一个GSM电话由前中国邮电部长吴基传使用诺基亚2110拨通了,中国由此开始进入2G时代。 三、2G时代的特点 2G采用的是数字调制技术,容量增加,系统容量的增加使得2G时代的手机可以上网了...

    试论基于问题的教学.pptx

    在PBL中,学生在遇到一个复杂、真实世界的问题时开始学习,而不是先接受传统的授课。这种方法由来已久,被认为能够更有效地提升学生批判性思维、团队合作和自我学习能力。 PBL与案例教学法的区别在于,PBL通常涉及...

    网易云音乐产品分析:竞争由来已久,鹿死谁手还未可知.pdf

    "网易云音乐产品分析:竞争由来已久,鹿死谁手还未可知" 本文对网易云音乐产品进行了分析,讨论了当前手机音乐客户端市场的激烈竞争状况。根据 iiMedia Research 数据显示,中国手机音乐客户端行业继续稳步发展,...

    感官分析技术由来已久.pdf

    感官分析技术是食品行业中一种重要的质量评估方法,它利用人的感觉器官——视觉、嗅觉、味觉、触觉和听觉来评价食品的感官特性,如颜色、香气、味道、质地和声音。这种方法历史悠久,随着消费者对食品质量要求的提高...

    浅谈大数据技术及应用.docx

    Target的例子印证了维克托·迈尔-舍恩伯格提过的一个很有指导意义的观点:通过找出一个关联物并监控它,就可以预测未来。Target通过监测购买者购买商品的时间和品种来准确预测顾客的孕期,这就是对数据的二次利用的...

    最短路径的开题报告

    4. 选取一个或几个实际问题场景,运用所学知识和技能开发出能够解决问题的算法程序。 5. 运用算法程序解决实际问题,进行实验验证,分析结果并撰写论文。 三、论文大纲 论文的主要内容包括以下几个方面: 1. 最短...

    Mastering Python Design Patterns 2nd Edition

    设计模式作为软件工程领域的一个核心概念,指的是解决特定问题时的一种通用解决方案。虽然设计模式的概念由来已久,但它们仍然是软件开发中最热门的话题之一,为开发者提供了解决日常遇到的问题的有效途径。本书...

    同步数据流语言可信编译器的设计.pdf

    可信编译器是编译器研究领域的一个重要分支,它的核心目标是确保编译器自身的正确性,以减少由于编译器错误导致的目标代码出现错误的可能性。可信编译器的设计关注点在于提高编译器的稳定性和可靠性,避免出现编译...

    大学生工地实习日记.docx

    江与城占地 1800 亩拥有1000 亩绿地并规划了 100 多亩教育系统以及 3 万平米的商业街,虽然地处郊区但是业主也丝毫不会感到生活的不便,而且设计有一个艺术中心以及橄榄球场,让业主有足够的休闲空间并且还有依山伴...

    大学生中学支教实习总结实习学习总结.doc

    总的来说,这次支教实习是一次深刻的人生历练,实习生从中收获了教学技能的提升、对教育事业的热爱以及对农村教育现状的深刻认识。这种实践经验不仅丰富了实习生的个人成长,也为未来的教育工作奠定了坚实的基础。

    IMO_2013_at_Santa Marta

    它的目标不仅是激发对数学的兴趣,更是通过团队合作和解决问题的能力,提升参赛者的综合素养。每年的竞赛包括两天,每天两道题目,总计六道题目,涵盖代数、几何、组合数学和数论等主要数学领域。 对于参与的选手来...

    西数硬盘C1门解决方法归纳.pdf

    简单来说, Load/Unload 技术有点像老式的点唱机,当盘片转速降低无法再产生空气薄膜的时候,就将磁臂以及磁头旋转一下,停靠到磁盘旁边的一个小斜坡上。这样就完全避免了磁头与盘片的直接接触。 总体来说, Load/...

    浅谈人工智能与图像艺术.pdf

    这一概念由来已久,但在深度学习技术的助力下,风格迁移得以实现突破性的进步,并且成为了深度学习应用中的一个亮点。例如,利用卷积神经网络(CNN)技术,研究者能够将不同艺术风格的特征应用到内容图像上,从而...

    说话人识别技术 张军英

    总的来说,说话人识别技术结合了信号处理、概率统计和机器学习等多学科知识,而张军英的书无疑为读者提供了一个深入了解这一领域的机会。通过阅读《说话人识别的现代方法与技术》,读者不仅可以掌握VQ、GMM和HMM等...

    On-line Algorithms

    在线算法(On-line Algorithms)是计算机科学领域内一个重要的研究方向,主要关注在信息逐步到达的情况下,算法如何做出即时决策的问题。与传统的离线算法不同,后者通常假设所有输入数据在算法开始执行前就已经全部...

    人教新课标数学五年级上册《方程的意义_1》PPT课件.ppt

    - 实际问题的应用,例如列出方程解决问题:杨老师买铅笔的花费 `0.6x = 3`,电动车行驶的距离 `1.2x = 30`,以及杨昊坤和刘帮学写字总数 `x + y = 48`。 5. **历史背景**: - 方程的历史由来已久,古埃及和中国的...

    [ORANGE’S:一个操作系统的实现].于渊.清晰扫描版.pdf.part1

    用一个月左右的时间读了《自己动手写操作系统》,这是一本让人读着很过瘾,却也特别累的一本书。  对操作系统的兴趣由来已久,只是一直未能找到入门之径。操作系统教材是个令人生畏的东西,它可以告诉人有什么,却...

    超光速问题与电磁波异常传播.pdf

    【超光速问题与电磁波异常传播】是一个深入探讨物理学领域中的特殊现象的主题,涉及到光速不变性原理、量子隧道效应以及通信技术的发展。本文主要分析了超光速现象的可能性和电磁波传播的异常情况。 首先,光速的...

Global site tag (gtag.js) - Google Analytics