如何使用java精确按顺序计算ArrayList<Integer>中的重复项

3

你好,我已经创建了一个计算数组列表中重复项的逻辑,但它没有按照我想要的确切顺序打印出来。下面是我的代码和要求。

我需要以下格式:

list: [1, 1, 5, 3, 7, 3, 11, 2, 3, 1]
number: 1, count: 3
number: 5, count: 1
number: 3, count: 3
number: 7, count: 1
number: 11, count: 1
number: 2, count: 1

但是,我得到的格式如下:

list: [1, 1, 5, 3, 7, 3, 11, 2, 3, 1]
number: 1, count: 3
number: 2, count: 1
number: 3, count: 3
number: 5, count: 1
number: 7, count: 1
number: 11, count: 1

这是我的代码

package com.abc;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MyArrayListSort
{
public static void main(String []args){
    new MyArrayListSort().start();
}
public void start()
{
    List<Integer> list = getList(1, 1, 5, 3, 7, 3, 11, 2, 3, 1);

    Map<Integer, Integer> map = new HashMap<Integer, Integer>();
    for (Integer i : list)
    {
        Integer retrievedValue = map.get(i);
        if (null == retrievedValue)
        {
            map.put(i, 1);
        }
        else
        {
            map.put(i, retrievedValue + 1);
        }
    }

    System.out.println("list: " + list);
    printCount(map);
}

private List<Integer> getList(int... numbers)
{
    List<Integer> list = new ArrayList<Integer>();
    for (int i : numbers)
    {
        list.add(i);
    }
    return list;
}

private void printCount(Map<Integer, Integer> map)
{
    for (Integer key : map.keySet())
    {
        System.out.println("number: " + key + ", count: " + map.get(key));
    }
}
}

1
你觉得 HashMap 有什么顺序,或者两个独立迭代的顺序甚至相同吗?根据文档:"此类不保证地图的顺序;特别是,它不保证顺序会随时间保持恒定"。 - Boris the Spider
我尝试使用哈希映射来按照我的期望顺序获取结果...但是如果您可以在不使用哈希映射的情况下帮助我,那就更好了... :) - Sritam Jagadev
1个回答

3
使用保持插入顺序的LinkedHashMap,而非HashMap:
public void start() {
    List<Integer> list = getList(1, 1, 5, 3, 7, 3, 11, 2, 3, 1);

    Map<Integer, Integer> map = new LinkedHashMap<Integer, Integer>();
    for (Integer i : list) {
        Integer retrievedValue = map.get(i);
        if (null == retrievedValue) {
            map.put(i, 1);
        }
        else {
            map.put(i, retrievedValue + 1);
        }
    }

    System.out.println("list: " + list);
    printCount(map);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接