天道酬勤,学无止境

在 Java 中的 arrayList 中增加整数的最佳方法(Best way to increment Integer in arrayList in Java)

问题

在 ArrayList 中增加 Integer 的最简洁方法是什么?

ArrayList<Integer> ints = new ArrayList<>();
ints.add(5);
ints.add(9);

增加最后一个元素的最干净的方法是什么?

ints.set(ints.size() - 1, ints.get(ints.size() - 1) + 1); 对我来说似乎很丑。

回答1

也许您需要使用另一种数据结构?

LinkedList<AtomicInteger> ints = new LinkedList<AtomicInteger>();
ints.add(new AtomicInteger(5));
ints.add(new AtomicInteger(9));

ints.getLast().incrementAndGet();
回答2

由于Integer对象是不可变的,因此您不能就地增加该值。 您必须在ArrayList的特定位置获取先前的值,增加该值,并使用它来替换同一位置的旧值。

int index = 42; // whatever index
Integer value = ints.get(index); // get value
value = value + 1; // increment value
ints.set(index, value); // replace value

或者,使用可变整数类型,如 AtomicInteger(或编写自己的)。

回答3

我做了这样的事情:

arraylistofint.set(index, arraylistofint.get(index) + 1);

这是我的代码中的一个示例(修改后的名称):

ArrayList<Integer> numBsPerA = new ArrayList<> ();
...
int cntAs = 0;
int cntBs = 0;
for ( TypeA a : AnArrayListOfAs )
   {
      numBsPerA.add(0);
      for ( TypeB b : a.getAnArrayListOfBs() )
      {
         numBsPerA.set(cntAs, numBsPerA.get(cntAs) + 1);
         cntBs++;
      }
      System.out.println(a.toString()+ " has "
                        +numBsPerA.get(cntAs)+" TypeBs");
      cntAs++;
   }
   System.out.println("Total number of As: "+cntAs); 
   System.out.println("Total number of Bs: "+cntBs);
   // can now loop over numBsPerA to check how many Bs per A or whatever.
回答4

我可以通过使用 java 的代码来完成......因为我们可以增加列表的每个元素

List<Integer> list= new ArrayList<Integer>();
  //int[] primitive = List1.toArray(list1);
  int count=0;
  int count1=0;
  int k=0;
  list.add(3);list.add(2);list.add(3);list.add(5);
  System.out.println("The given input is");
  for(int i:list){
      System.out.println(i);
  }
  Integer[] a = list.toArray(new Integer[list.size()]);
  for(int i = 0; i <a.length; i++)
    {
        if(i==a.length-1){
            a[i]++;
            count++;
        }else if(i==a.length-2){
            a[i]++;
            count++;
        }else if(i==a.length-3){
            a[i]++;
            count++;
        }else if(i==a.length-4){
            a[i]++;
            count++;
        }

    }
  System.out.println("After first operation");
  for(int i:a){
      System.out.println(i);
  }

  System.out.println("the first count is"+count);
  for(int i = 0; i <a.length; i++)
    {
        if(i==a.length-1){
            a[i]--;
            count1++;
        }else if(i==a.length-2){
            a[i]--;
            count1++;
        }else if(i==a.length-3){
            a[i]--;
            count1++;
        }else if(i==a.length-4){
            a[i]--;
            count1++;
        }

    }

   for(int i:a){
      System.out.println(i);
  }
   System.out.println("the second count is"+count1);
  //int Count2=count+count1;
   System.out.println("After second operation");



  System.out.println("--------------------------------------------");
  for(int j:a){
      System.out.println(j);
  }
 List<Integer> list1=Arrays.asList(a);

  System.out.println("After conversion of list");
  for(int i:list1){
      System.out.println(i);
  }

我也算了……

在其中一次采访中也问到了这个问题。

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐