`

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

阅读更多

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

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

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

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

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

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

    意识“难问题”研究:一种还原论的视角

    僵尸论证、功能主义等理论都未能很好处理这个问题,找到一种合适的研究进路才是揭开"难问题"首要前提。一种"自然化"的趋势影响之下,还原论主张把意识问题还原到神经科学领域中,通过神经科学研究解读意识问题。还原论...

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

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

    论文研究-一种面向环境可配置嵌入式系统软件模型研究.pdf

    嵌入式系统硬件资源是相对固定且有限,为了适应环境,就需要系统从软/硬件上可重构。基于此,提出了一种基于可配置...该模型在某航空机载设备中得到实际应用,解决了由来已久的问题,提高了系统的灵活性和自适应性。

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

    [ORANGE’S:一个操作系统的实现].于渊.清晰扫描版.part3 用一个月左右的时间读了《自己动手写操作系统》,这是一本让人读着很过瘾,却也特别累的一本书。  对操作系统的兴趣由来已久,只是一直未能找到入门之径...

    天池推荐算法数据集-日期:11.8~12.8

    “信息迷航”和“信息过载”问题由来已久,产业界和学术界都为解决这类问题进行了大量的尝试。推荐系统能够帮助用户在海量的产品空间中进行筛选,同时尽量减少用户的参与,将信息在合适的时间、地点主动推送给用户。...

    NIO-实践-多线程实例

    如果需要实现一个线程或有效个线程负责对SocketChannel数据的读操作,为了保证线程安全,同一时间需要保证只有一个线程在负责读操作。即需要采用SelectionKey.cancel()从注册的Selector中取消对该Selection的监视,...

    SPB 2.0 Plus(急速先锋论坛Plus版) III build 4.3.15

    萌生写论坛的意图由来已久,但编写一个论坛程序工作量实在不小,在几经权衡之后,于4月底开始论坛整体的规划设计,力图制作一个速度一流的论坛,故最初命名:FasterBoard,但后台发现已有一个FastBoard论坛,虽然是...

    人工智能在保险业的应用与挑战.pptx

    具体来讲,就是人只要给出关于某程序要求的非常高级的描述,计算机就会自动生成一个能完成这个要求目标的具体程序。 相当于给机器配置了一个"超级编译系统", 它能够对高级描述进行处理, 通过规划过程, 生成所需的程序...

    Arcgis中的地理坐标系总结与实例

    介绍GIS(地理信息系统)中的坐标系的想法由来已久,因为工作中我发现有不少GIS 专业的学生在博士毕业后仍然在坐标系的概念理解和实际操作等方面不太清楚,而保证数据 坐标系的正确与合理是数据分析的前提。今年有幸...

    SpeedPioneer(速度先锋) Plus 4.2.27

    萌生写论坛的意图由来已久,但编写一个论坛程序工作量实在不小,在几经权衡之后,于4月底开始论坛整体的规划设计,力图制作一个速度一流的论坛,故最初命名:FasterBoard,但后台发现已有一个FastBoard论坛,虽然是...

    解读IE浏览器的“失宠”之谜

    IE的安全问题由来已久,从近年来20多个已知的“严重”等级的安全公告中可以看出IE的安全性设计还亟待解决!毕竟IE是与Windows紧密集成在一起的。也正因为如此,IE的安全设计一直是与操作系统息息相关的--IE攻陷,...

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

    [ORANGE’S:一个操作系统的实现].于渊.清晰扫描版.part2 大小135MB,高清扫描版,分三个包上传的,请下全解压。 用一个月左右的时间读了《自己动手写操作系统》,这是一本让人读着很过瘾,却也特别累的一本书。 ...

    日立1.8英寸硬盘为Dell新的数字音乐播放器提供美妙音乐

    现在,奥斯汀另一个受人尊敬机构-戴尔公司,凭借其数码自动唱片点唱机(Dell DJ),这一数码音乐播放器的导入,在音乐领域崭露头角。这一款小巧但强大的音乐播放器只是戴尔进军消费类电子产品领域广泛举措中的一...

    浅谈物联网产业链及市场分析

    从长期来看,笔者认为物联网确实能形成巨大的市场规模,但近期仍然面临着一系列的挑战,需要产业链上各个合作伙伴协同解决。  2.物联网产业链现状  在物联网概念热炒之前,我国的物联网产业链已经存在,但主要以...

    Java实现搜索在Bait游戏中的应用研究.zip

    这使我对于正确调参方法产生了强烈的兴趣,“优化”这一概念本质上是一个数学问题,对于一个决策程序能否正确高效决策有着至关重要的作用。详细介绍参考:...

    仿真还是不仿真,这是个问题

    其他工程师对于仿真嗤之以鼻,只通过手算和测量来解决问题。我个人认为均衡的方法才是最好的办法。我喜欢用计算、仿真和测量来试着确认电路的有效性。如果你在所有三个方法中的结果都是一致的,那么你就会对你的解决...

    SSD分区无损 4K对齐工具 Paragon Alignment Tool

    由于分区未对齐而不可避免地造成磁盘子系统性能下降问题由来已久。这个问题最初仅仅是让IT管理员头疼,而随着SSD(固态硬盘)和超高容量硬盘的普及,现在已经成为困扰所有用户的问题。 此硬盘分区对齐工具可以在不...

Global site tag (gtag.js) - Google Analytics