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

Posted

技术标签:

【中文标题】如何按照使用java的确切顺序计算ArrayList<Integer>中的重复项[重复]【英文标题】:How to count duplicates in ArrayList<Integer> in the exact order they are coming using java [duplicate] 【发布时间】:2017-06-06 06:41:50 【问题描述】:

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

我需要以下格式,

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


【问题讨论】:

是什么让您认为HashMap 具有任何顺序,甚至在两个单独的迭代中具有相同的顺序?来自the documentation:“这个类不保证地图的顺序;特别是,它不保证顺序会随着时间的推移保持不变”。 我尝试使用 hashmap 以我想要的顺序获得结果 ....但是如果您可以在不使用 hashmap 的情况下帮助我,那么它会更好... :) 【参考方案1】:

使用维护插入顺序的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);

【讨论】:

以上是关于如何按照使用java的确切顺序计算ArrayList<Integer>中的重复项[重复]的主要内容,如果未能解决你的问题,请参考以下文章

让计算机随机产生出10个两位正整数,然后按照从小到大的顺序显示出来 java语言

如何计算学生在 >25th 百分位 <75th 百分位之间的分数,按照分数的递增顺序。使用下面的函数

如何使用线程计算不同输出的确切数量

顺时针打印矩阵

银行排队问题平均等到时间计算java?

java多线程提交,如何按照时间顺序获取线程结果,看完你就懂了 | Java工具类