为了账号安全,请及时绑定邮箱和手机立即绑定

Arraylist找到连续重复元素的数量

Arraylist找到连续重复元素的数量

墨色风雨 2019-04-17 18:15:55
我试图在数组列表中找到重复元素的COUNT。例如,如果名为“answerSheerPacketList”列表的数组包含值{20,20,30,40,40,20,20,20},我需要显示输出{20=2,30=1,40=2,20=3}。Map<String, Integer> hm = new HashMap<String, Integer>();for (String a : answerSheerPacketList) {     Integer j = hm.getinsAnswerSheetId(a);     hm.put(a, (j == null) ? 1 : j + 1);}     // displaying the occurrence of elements in the arraylistfor(Map.Entry<String, Integer> val : hm.entrySet()){      System.out.println("Element " + val.getKey() + " "      "occurs" + ": " + val.getValue()+ " times");}当我执行上面的代码我得到输出,{20=5,30=1,40=2}但我想得到一个输出{20=2,30=1,40=2,20=3}。
查看完整描述

5 回答

?
守候你守候我

TA贡献1802条经验 获得超10个赞

这里一个简单的方法就是迭代arraylist一次,然后随着我们继续记录:


List<Integer> list = new ArrayList<>();

list.add(20);

list.add(20);

list.add(30);

list.add(40);

list.add(40);

list.add(20);

list.add(20);

list.add(20);


Integer curr = null;

int count = 0;

System.out.print("{");

for (int val : list) {

    if (curr == null) {

        curr = val;

        count = 1;

    }

    else if (curr != val) {

        System.out.print("(" + curr + ", " + count + ")");

        curr = val;

        count = 1;

    }

    else {

        ++count;

    }

}

System.out.print("(" + curr + ", " + count + ")");

System.out.print("}");


{(20, 2)(30, 1)(40, 2)(20, 3)}


查看完整回答
反对 回复 2019-05-15
?
函数式编程

TA贡献1807条经验 获得超9个赞

Set<Integer> distinctSet = new HashSet<>(answerSheerPacketList);

    HashSet<Integer,Integer> elementCountSet=new HashSet<>();

    for (Integer element: distinctSet) {

    elementCountSet.put(element,Collections.frequency(answerSheerPacketList, element));


    }


查看完整回答
反对 回复 2019-05-15
?
qq_笑_17

TA贡献1818条经验 获得超7个赞

这是计算数组中连续元素运行的经典问题。arr为简洁起见,我已将数组重命名为代码。

    int run = 1;
    for (int i = 0; i < n; ++i) {   // n is the size of array
        if (i + 1 < n && arr[i] == arr[i + 1]) {
            run++;        // increment run if consecutive elements are equal
        } else {
            System.out.println(arr[i] + "=" + run + ", ");
            run = 1;      // reset run if they are not equal
        }
    }

在性能方面,这种方法是渐近最优的并且在On)中运行,其中n是数组中元素的数量。


查看完整回答
反对 回复 2019-05-15
  • 5 回答
  • 0 关注
  • 1502 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信