使用带有输入顺序</string>的Map <string,integer =“”>在数组列表中查找重复项

时间:2013-01-17 09:50:32

标签: java

大家好我正在尝试打印所有重复的元素,这很好但是输出不是有序的(来自用户输入或来自文本文件)。 我想按顺序打印所有元素(不打印重复项)。我怎么做? 代码来自此Find the duplicate elements in arraylist and display 感谢@Cory Kendall的代码。

**********更新的问题:现在代码与LinkedHashMap完美配合。现在我希望输出以数字项目符号(即1. name1 = 2)逐步打印。感谢

List<String> strings = new ArrayList<String>();
// suppose datas are entered by user incrementally or from a text files.

Map<String, Integer> counts = new HashMap<String, Integer>();

for (String str : strings) {
    if (counts.containsKey(str)) {
        counts.put(str, counts.get(str) + 1);
    } else {
        counts.put(str, 1);
    }
}

for (Map.Entry<String, Integer> entry : counts.entrySet()) {
    System.out.println(entry.getKey() + " = " + entry.getValue());
}

4 个答案:

答案 0 :(得分:6)

如果您想记住地图中的广告订单,则需要使用LinkedHashMap。在您的情况下,您必须替换

Map<String, Integer> counts = new HashMap<String, Integer>();

Map<String, Integer> counts = new LinkedHashMap<String, Integer>();

答案 1 :(得分:3)

HashMap未排序或排序,如果您关心LinkedHashMap则使用insertion order,如果您关心TreeMap则使用natural order

答案 2 :(得分:1)

LinkedHashMap将保留订单。

Map<String, Integer> counts = new LinkedHashMap<String, Integer>();

关于LinkedHashMap

  

使用Hash表和Map接口的链表实现   可预测的迭代顺序。此实现与HashMap不同   因为它维护着一个贯穿所有链接的双向链表   条目。该链表定义了迭代排序,即   通常是键插入地图的顺序   (插入顺序)。

答案 3 :(得分:1)

public class FindDup {
    public static void main(String[] args) {
        String str[] = { "yogi", "ram", "ram", "yogi", "yogi", "yogi", "raju", "raju", "ram", "yogi", };
        Map<String, Integer> map = new HashMap<String, Integer>();
        for (String s : str) {
            if (map.containsKey(s)) {
                map.put(s, map.get(s) + 1);
            } else {
                map.put(s, 1);
            }
        }
        for (Entry<String, Integer> e : map.entrySet()) {
            System.out.println(e.getKey() + "---" + e.getValue());

        }
    }
}