Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 删除重复的数组项_Java_Arrays_Duplicates_Java.util.scanner - Fatal编程技术网

Java 删除重复的数组项

Java 删除重复的数组项,java,arrays,duplicates,java.util.scanner,Java,Arrays,Duplicates,Java.util.scanner,我正在尝试使用扫描仪读取一个文本文件,其中包含“a/b”形式的分数字符串,将它们存储在一个数组中,然后将每个唯一字符串及其计数打印到控制台。我可以精确地打印文本文件中的每个单独条目,但我不知道如何在没有任何副本的情况下打印数组的内容 我还试图完全在main中完成这一点。以下是到目前为止我得到的信息: publicstaticvoidmain(字符串[]args)抛出FileNotFoundException { ArrayList fracs=新的ArrayList(); 扫描仪输入=新扫描仪(

我正在尝试使用扫描仪读取一个文本文件,其中包含“a/b”形式的分数字符串,将它们存储在一个数组中,然后将每个唯一字符串及其计数打印到控制台。我可以精确地打印文本文件中的每个单独条目,但我不知道如何在没有任何副本的情况下打印数组的内容

我还试图完全在main中完成这一点。以下是到目前为止我得到的信息:

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没有说明顺序是否重要。。。更新答案以反映您的建议!