Java 删除重复的数组项
我正在尝试使用扫描仪读取一个文本文件,其中包含“a/b”形式的分数字符串,将它们存储在一个数组中,然后将每个唯一字符串及其计数打印到控制台。我可以精确地打印文本文件中的每个单独条目,但我不知道如何在没有任何副本的情况下打印数组的内容 我还试图完全在main中完成这一点。以下是到目前为止我得到的信息:Java 删除重复的数组项,java,arrays,duplicates,java.util.scanner,Java,Arrays,Duplicates,Java.util.scanner,我正在尝试使用扫描仪读取一个文本文件,其中包含“a/b”形式的分数字符串,将它们存储在一个数组中,然后将每个唯一字符串及其计数打印到控制台。我可以精确地打印文本文件中的每个单独条目,但我不知道如何在没有任何副本的情况下打印数组的内容 我还试图完全在main中完成这一点。以下是到目前为止我得到的信息: publicstaticvoidmain(字符串[]args)抛出FileNotFoundException { ArrayList fracs=新的ArrayList(); 扫描仪输入=新扫描仪(
publicstaticvoidmain(字符串[]args)抛出FileNotFoundException
{
ArrayList fracs=新的ArrayList();
扫描仪输入=新扫描仪(新文件(“input.txt”);
ArrayList fracsDisplay=新的ArrayList();
while(input.hasNext())
fracs.add(input.next());
对于(int i=0;i
如果你掌握了它,这个任务就是一个类似“字数统计”的任务。要完成这样的任务,HashMap是最好的选择。
我建议您使用HashMap来完成此任务。您的算法的时间复杂度为O(n^2)。您可以使用HashMap将其缩减为O(n)。使用HashMap还可以帮助您消除重复数据。试试看
HashMap<String, Integer> fracs = new HashMap<String, Integer>();
Scanner input = new Scanner(new File("input.txt"));
while(input.hasNext()) {
String frac = input.next();
if (! fracs.containsKey(frac)) {
fracs.put(frac, 1);
} else {
fracs.put(frac, fracs.get(frac) + 1);
}
}
input.close();
for (Map.Entry<String, Integer> fracCount : fracs.entrySet()) {
System.out.println(fracCount.getKey() + " " + fracCount.getValue());
}
HashMap fracs=newhashmap();
扫描仪输入=新扫描仪(新文件(“input.txt”);
while(input.hasNext()){
字符串frac=input.next();
如果(!fracs.containsKey(frac)){
压裂液(压裂液,1);
}否则{
fracs.put(frac,fracs.get(frac)+1);
}
}
input.close();
对于(Map.Entry fracCount:fracs.entrySet()){
System.out.println(fracCount.getKey()+“”+fracCount.getValue());
}
如果分数字符串应保持出现顺序,请使用LinkedHashMap;如果分数字符串应保持字典顺序或某些特定顺序,请使用SortedHashMap。在这里,我建议您阅读“Java泛型和集合”,重点介绍Java集合框架 是否应该将所有内容都存储到ArrayList中?您可以使用a或a,因为不允许使用dub应用程序。消除重复项的最简单方法是使用
集,因为您存储的字符串不会添加重复项
而不是ArrayList fracsDisplay=new ArrayList()代码>您可以使用:
Set<String> fracsDisplay = new HashSet<>();
fracsDisplay.addAll(fracs);
for (String s : fracsDisplay) {
System.out.println(s);
}
Set fracsDisplay=new HashSet();
fracsDisplay.addAll(fracs);
用于(字符串s:fracsDisplay){
系统输出打印项次;
}
如果需要维护某种顺序,我建议使用树集
,但两者都可以处理重复项的删除。。。在本例中,这似乎是您想要的。您可以使用哈希集
,因为集
集合不允许重复值。如果数组的顺序很重要,则可以使用LinkedHashSet
Set<T> set = new HashSet<T>();
Collections.addAll(set, array);
Set Set=newhashset();
Collections.addAll(集合、数组);
hmm,您可以在添加元素之前检查fracs.contains(…)
数组是否已经包含元素,如果已经包含元素,则只需增加计数器或避免再次添加元素。默认情况下,集合
防止重复条目。如果要打印条目名称及其计数,为什么不使用Map
?通过唯一条目(=键)查找计数(=值)缺点如果条目应在有序结构中可用True,在这种情况下可以使用TreeSet
,OP没有说明顺序是否重要。。。更新答案以反映您的建议!