如何从已有LinkedList生成带频率统计的ModifiedSample列表
从LinkedList生成带频率的ModifiedSample列表解决方案
问题需求
需要从给定的LinkedList<Double>(示例:{2, 2, 3, 4, 5, 5, 5, 5, 6})生成LinkedList<ModifiedSample>,每个ModifiedSample对象包含对应数值和它的出现频率,调用printSampleSpace方法后输出指定格式的item与频率信息。
完整实现代码
import java.util.LinkedList; import java.util.LinkedHashMap; import java.util.Map; public class Main { // 修改为静态内部类,让静态main方法可访问 static class ModifiedSample { double item; int frequency; ModifiedSample(Double item, int frequency) { this.item = item; this.frequency = frequency; } } public static void main(String[] args) { LinkedList<Double> sampleList = new LinkedList<>(); // 添加示例数据 sampleList.add(2.0); sampleList.add(2.0); sampleList.add(3.0); sampleList.add(4.0); sampleList.add(5.0); sampleList.add(5.0); sampleList.add(5.0); sampleList.add(5.0); sampleList.add(6.0); LinkedList<ModifiedSample> modifiedSampleList = new LinkedList<>(); // 用LinkedHashMap统计频率,保证顺序和原列表中首次出现的顺序一致 LinkedHashMap<Double, Integer> frequencyMap = new LinkedHashMap<>(); for (Double num : sampleList) { frequencyMap.put(num, frequencyMap.getOrDefault(num, 0) + 1); } // 将统计结果转换为ModifiedSample列表 for (Map.Entry<Double, Integer> entry : frequencyMap.entrySet()) { modifiedSampleList.add(new ModifiedSample(entry.getKey(), entry.getValue())); } // 调用打印方法 printSampleSpace(modifiedSampleList); } // 实现printSampleSpace方法,按指定格式输出 public static void printSampleSpace(LinkedList<ModifiedSample> sampleList) { for (ModifiedSample sample : sampleList) { System.out.printf("item: %.0f%n", sample.item); System.out.printf("frequency: %d%n", sample.frequency); } } }
关键实现说明
- 静态内部类修改:将
ModifiedSample改为static class,因为静态的main方法无法直接实例化非静态内部类,这是Java语法的基础要求。 - 频率统计:使用
LinkedHashMap而非普通HashMap,目的是保留原列表中元素首次出现的顺序,确保输出顺序和示例一致。通过getOrDefault方法简化频率计数逻辑,避免空值判断。 - 列表转换:遍历频率统计的Map,将每个键值对转换为
ModifiedSample对象并加入目标列表。 - 打印方法:使用
printf格式化输出,%.0f确保double类型的整数数值以整数形式展示,符合示例输出格式。
输出结果
运行代码后,控制台将输出:
item: 2 frequency: 2 item: 3 frequency: 1 item: 4 frequency: 1 item: 5 frequency: 4 item: 6 frequency: 1
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

