Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ArrayList remove()意外结果?_Java - Fatal编程技术网

Java ArrayList remove()意外结果?

Java ArrayList remove()意外结果?,java,Java,这是我的密码 void reduce() { KeyVal reducer1 = new KeyVal(); for (int i=0; i< m1.size(); i++) { reducer1.setKey(m1.get(i).getKey()); reducer1.setValue(m1.get(i).getValue()); for (int j=i+1; j < m1.size(); j++) {

这是我的密码

void reduce() {
    KeyVal reducer1 = new KeyVal();
    for (int i=0; i< m1.size(); i++) {
        reducer1.setKey(m1.get(i).getKey());
        reducer1.setValue(m1.get(i).getValue());

        for (int j=i+1; j < m1.size(); j++) {
              if (m1.get(i).getKey().compareTo(m1.get(j).getKey()) == 0) {
                  m1.remove(j);
                  //System.out.println(i + "-->" + j);
                  reducer1.setValue(reducer1.getValue() + 1);
              }
          }         

        System.out.println(reducer1.getKey());
        System.out.println(reducer1.getValue());
        //r1.add(reducer1);
      }
我越来越

3494702579
2
3494702579
1
但我应该

3494702579
3

我做错了什么?

在迭代m1时,您正在从m1中删除元素。这会导致内部循环跳过某些元素。发生这种情况的原因是,在删除
j
-th元素后,仍在增加
j

在您的示例中,
3494702579
中的一个被跳过,并由外部循环的第二次迭代拾取


方法的整个逻辑可以使用键到计数的
映射和对输入列表的单次传递来重写。

在迭代过程中从
m1
中删除元素。这会导致内部循环跳过某些元素。发生这种情况的原因是,在删除
j
-th元素后,仍在增加
j

在您的示例中,
3494702579
中的一个被跳过,并由外部循环的第二次迭代拾取


方法的整个逻辑可以通过使用键到计数的映射和对输入列表的单次传递来重写。

在内部循环中,当删除一个元素然后递增
j
时,实际上可能会跳过一个元素

但一般来说,一个更好的方法就是使用多集合的HashMap实现。 您当前的解决方案是
O(n^2)
,而HashMap-one非常接近
O(n)

void reduce(){
HashMap reducer1=新的HashMap();
对于(int i=0;i
在您的内部循环中,当您删除一个元素,然后递增
j
时,实际上您可能会跳过一个元素

但一般来说,一个更好的方法就是使用多集合的HashMap实现。 您当前的解决方案是
O(n^2)
,而HashMap-one非常接近
O(n)

void reduce(){
HashMap reducer1=新的HashMap();
对于(int i=0;i
3494702579
3
void reduce() {
    HashMap<xxx, Integer> reducer1 = new HashMap<xxx, Integer>();
    for (int i=0; i< m1.size(); i++) {
        xxx key = m1.get(i).getKey();

        int count = 0;
        if ( reducer1.containsKey(key) ) count = reducer1.get(key);

        reducer1.put(key, count+1);  
     }
     //print the values
}