大家好我正在尝试打印所有重复的元素,这很好但是输出不是有序的(来自用户输入或来自文本文件)。 我想按顺序打印所有元素(不打印重复项)。我怎么做? 代码来自此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());
}
答案 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());
}
}
}