`

HashMap的操作-统计词频、遍历、排序、删除

    博客分类:
  • Java
阅读更多
package com.DocExpansion.TFIDF;

import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

public class TFfreq {
	public static HashMap<String,String> TFfreq(ArrayList<String> terms){
		//计算词频
		HashMap<String,String> resTF=new HashMap<String,String>();
		HashMap<String,Integer> TFtimes=TFfreq.TFtimes(terms);
		int length=terms.size();
		System.out.println(length);
		//遍历Map的value
		Iterator iter=TFtimes.entrySet().iterator();
		while(iter.hasNext()){
			 Map.Entry entry=(Map.Entry)iter.next();
			 //当两个整数相除时,由于小数点以后的数字会被截断,使运算结果为整数,
			 //故此时若希望得到运算结果为所预期的浮点数,则此时必须将两整数其一或是全部强制转换类型为浮点数。
			 DecimalFormat decimalFormat = new DecimalFormat("#,##0.0000000000");//格式化设置
			 float freq=Float.parseFloat(entry.getValue().toString())/length;
			 resTF.put(entry.getKey().toString(),decimalFormat.format(freq));
		}
		return resTF;
	}
	public static HashMap<String,Integer> TFtimes(ArrayList<String> terms){
		//统计词出现的次数
		HashMap<String,Integer> TFtimes=new HashMap<String,Integer>();
		for(String term:terms){
			if(!TFtimes.containsKey(term)){
				TFtimes.put(term, 1);
			}
			else {
				TFtimes.put(term, TFtimes.get(term)+1);
			}
		}
		//因为Iterator在循环的时候是不可以删除元素的。
		/*Iterator it=TFtimes.keySet().iterator();
		while(it.hasNext()){
			Object key=it.next();
			if(TFtimes.get(key)>2&&TFtimes.get(key)<1000){
				TFtimes.remove(key);
			}
		}*/
	//遍历HashMap	
		//1、使用迭代器遍历Map的值,根据键取值 
		Iterator it=TFtimes.keySet().iterator();
		while(it.hasNext()){
			Object key=it.next();
			Object value=TFtimes.get(key);
			System.out.println("-------"+key+"  "+value);
		}
		//2、使用迭代器遍历Map的记录Map.Entry
		Iterator iter=TFtimes.entrySet().iterator();
		while(iter.hasNext()){
			//一个Map.Entry代表一条记录
			Map.Entry entry=(Map.Entry)iter.next();
			//通过entry可以获得记录的键和值
			Object key=entry.getKey();
			Object value=entry.getValue();
			System.out.println("++++++++"+key+"  "+value);
		}
		return TFfreq.Sort(TFtimes);
	}
	//排序HashMap并删除元素
	public static HashMap<String,Integer> Sort(HashMap<String,Integer> map){
		HashMap<String,Integer> resMap=new HashMap<String,Integer>();
		List<Map.Entry<String, Integer>> infoIds=new ArrayList<Map.Entry<String,Integer>>(map.entrySet());
		Collections.sort(infoIds,new Comparator<Map.Entry<String, Integer>>(){
			public int compare(Map.Entry<String, Integer> o1,Map.Entry<String, Integer> o2){
				//根据value排序,整型
				return(o1.getValue()-o2.getValue());
				//根据key排序,字符型
			//	return(o1.getKey().toString().compareTo(o2.toString()));
			}
		});
		//根据值的大小删除元素
		for(int i=0;i<infoIds.size();i++){
			Entry<String,Integer> id=infoIds.get(i);
			if(id.getValue()>2&&id.getValue()<1000){
				resMap.put(id.getKey(), id.getValue());
			}
		}
		return resMap;
	}
}



删除集合中的某些元素。有些可能会这么写。
Iterator it=TFtimes.keySet().iterator();
		while(it.hasNext()){
			Object key=it.next();
			if(TFtimes.get(key)>2&&TFtimes.get(key)<1000){
				TFtimes.remove(key);
			}
		}

Exception in thread "main" java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:793)
at java.util.HashMap$KeyIterator.next(HashMap.java:828)


因为Iterator在循环的时候是不可以删除元素的。
分享到:
评论

相关推荐

    JAVA快速统计文章词频.zip

    5. **统计词频**: - 遍历每个单词,如果在HashMap中存在,更新其值;如果不存在,则添加新键值对。 - 可以使用`AtomicInteger`或`synchronized`关键字保证并发安全,如果需要在多线程环境中进行统计。 6. **结果...

    Java词频统计算法(使用单词树)

    - **额外操作**:为了获取高频词,通常还需要对统计结果进行排序,这会进一步增加时间和空间开销。 #### 单词树(Trie)优化方案 为了解决上述问题,可以考虑使用单词树(Trie)数据结构来替代`HashMap`。单词树是...

    统计字符出现次数。统计字符出现次数

    - `HashMap`提供了O(1)级别的平均时间复杂度来进行添加、删除和查找操作。 - 在大多数情况下,使用`HashMap`能够满足高效统计字符的需求。 #### 三、扩展知识 1. **其他数据结构的选择** - 如果需要按字符出现...

    C# 词频分析软件的设计与实现

    源代码部分可能会包含处理文本、统计词频、实现排序和显示结果的类或函数。通过阅读和理解这些代码,可以深入学习到如何将上述理论知识应用到实际的C#项目中。 总的来说,这个软件的实现涵盖了数据处理、算法应用和...

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

    在这个项目中,我们可以使用JFrame创建主窗口,JButton作为按钮接收用户的操作,JTextArea展示文件内容或统计结果,JTable则可以用来显示词频统计的详细信息,如单词、频率和排名。 在英文词频检测统计的过程中,...

    JAVA大数据处理题.pdf

    - 方案1:使用哈希取模将文件切分为小文件,对每个小文件统计词频,使用最小堆选出前100高频词,再进行归并排序。 4. 最频繁IP查找: - 方案1:筛选特定日的百度访问IP,按哈希取模生成小文件,统计每个文件的...

    java词频统计

    统计词频则需要用到哈希数据结构,例如`HashMap`,它能提供O(1)的时间复杂度来插入和查找元素。我们可以为每个词创建一个键值对,键是词,值是词频。 ```java Map, Integer&gt; wordCount = new HashMap(); // 分词后...

    统计一篇文档中每个单词出现的次数,频率

    // 统计词频 Map, Integer&gt; frequencyMap = countWords(words); // 按频率降序排列 Map, Integer&gt; sortedMap = sortMapByValue(frequencyMap, false); // 打印结果 printWordFrequency(sortedMap); } ...

    WordFrequency213

    5. **排序与展示**:统计完成后,可能需要按照词频对结果进行排序。Java的`Collections.sort()`方法结合自定义的比较器可以实现这个功能。最后,可以将结果输出到控制台或者写入新的文件,以便查看和分析。 6. **...

    jsoup网络爬虫

    5. **统计词频** 词频统计是网络爬虫常见的应用之一,可以用于分析网站内容的主题。首先,我们需要提取所有文本,然后对文本进行分词,最后统计每个词出现的次数。这里可以使用Java的`StringTokenizer`和`HashMap`...

    阿里巴巴校园招聘历年经典面试题汇总:C++研发 1

    8. **字典树在统计词频上的应用**:字典树可以高效地统计词频,每个节点表示一个字符串,节点的子节点代表该字符串的后缀,统计词频时只需遍历对应路径。 9. **红黑树的特性与应用**:红黑树是一种自平衡二叉查找树...

    查找英文文章中有多少不同的单词以及单词出现的频数

    3. **统计词频**:使用`HashMap`来存储单词及其出现的次数。遍历处理后的单词数组,每次遇到一个单词,如果不在字典中,添加到字典并设置计数为1;如果已经在字典中,将其计数加1。 ```java Map, Integer&gt; ...

    Tag-Cloud:接收一个文本文件并生成一个 HTML 标签云

    源代码可能分为多个类,如`TextParser`用于读取和解析文本,`WordCounter`用于统计词频,`TagCloudGenerator`负责生成HTML,以及可能的`Main`类用于整合整个流程。测试用例可以帮助验证代码的正确性,而README文件...

    WordCounter-PrimeNumber

    最后,我们可以遍历这个数据结构,输出出现频率最高的单词或者按照频率排序。 接下来,是素数检测的部分。素数是指大于1且除了1和它自身以外没有其他正因数的自然数。Java中实现素数检测的方法有很多种,例如最基础...

    text-statistics

    3. **词频分析**:通过统计单词出现的频率,可以了解文本的主要主题。可以使用`TreeMap`或`LinkedHashMap`按照频率排序,输出最常出现的单词。 4. **句子和段落计数**:使用正则表达式分割文本为句子或段落,然后...

    dic

    在 `dicey-master` 项目中,可能包含了利用以上 Kotlin 功能实现的字典操作、文本处理逻辑,甚至可能包括了一些特定的算法,如词频统计、文本分析等。通过阅读源码,我们可以更深入地了解如何在 Kotlin 中高效地处理...

    字数

    文件名"WordCount-main"暗示了这可能是一个关于词频统计的项目,常见于大数据处理或文本挖掘中。在Hadoop等分布式计算框架中,WordCount是一个经典的入门示例,它展示了如何用MapReduce模型统计文本文件中单词的出现...

Global site tag (gtag.js) - Google Analytics