删除重复的数组条目

时间:2014-01-12 02:17:12

标签: java arrays duplicates java.util.scanner

我正在尝试使用扫描仪读取文本文件,其中包含“a / b”形式的分数字符串,将它们存储在一个数组中,然后将每个唯一的字符串及其计数打印到控制台。我可以使用准确的计数打印文本文件中的每个单独条目,但我无法弄清楚如何打印数组的内容而没有任何重复。

我也试图在主要内部完成这一点。这是我到目前为止所得到的:

public static void main(String [] args)抛出FileNotFoundException {

    ArrayList<String> fracs = new ArrayList<String>();
    Scanner input = new Scanner(new File("input.txt"));
    ArrayList<String> fracsDisplay = new ArrayList<String>();

    while(input.hasNext())
        fracs.add(input.next());

    for(int i = 0; i < fracs.size(); i++)
    {
        int count = 0;
        for(int j = 0; j < fracs.size(); j++)
        {
            if(fracs.get(i).equals(fracs.get(j)))
                count++;
        }
        System.out.println(fracs.get(i) + ": " + count);
    }

    input.close();

}

4 个答案:

答案 0 :(得分:1)

摆脱重复的最简单方法是使用Set,因为存储字符串不会添加重复项。

而不是ArrayList<String> fracsDisplay = new ArrayList<String>();你可以使用:

Set<String> fracsDisplay = new HashSet<>();
fracsDisplay.addAll(fracs);
for (String s : fracsDisplay) {
    System.out.println(s);
}

如果需要维护某种订单,那么我建议使用TreeSet,但要么会处理重复的删除...在这种情况下,这似乎就是你想要的。

答案 1 :(得分:0)

如果掌握它,此任务是“字数统计”类似的任务。要做这样的任务,HashMap是最好的选择。 我建议你使用 HashMap 来完成这项任务。您的算法具有O(n ^ 2)时间复杂度。您可以使用HashMap将其减少到O(n)。使用HashMap还可以帮助您进行重复数据删除。 Hava一试。

        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());
        }

如果分数字符串应保持出现的顺序,请使用 LinkedHashMap ;如果分数字符串应保持字典顺序或某些特定顺序,请使用 SortedHashMap 。在这里,我建议您阅读“ Java Generics and Collections ”,重点关注 Java Collection framework

答案 2 :(得分:0)

您应该将所有内容存储到ArrayList中吗?您可以使用HashSetTreeSet,因为不允许出版。

答案 3 :(得分:0)

您可以使用HashSet,因为Set集合不允许重复值。如果您的数组顺序很重要,那么您可以使用LinkedHashSet

Set<T> set = new HashSet<T>();
Collections.addAll(set, array);