相关疑难解决方法(0)

如何正确比较Java中的两个整数?

我知道,如果你将盒装原始Integer与常量进行比较,例如:

Integer a = 4;
if (a < 5)
Run Code Online (Sandbox Code Playgroud)

a 将自动取消装箱,比较将起作用.

但是,当您比较两个盒装Integers并希望比较相等或小于/大于?时会发生什么?

Integer a = 4;
Integer b = 5;

if (a == b)
Run Code Online (Sandbox Code Playgroud)

以上代码是否会导致检查它们是否是同一个对象,还是会在这种情况下自动取消装箱?

关于什么:

Integer a = 4;
Integer b = 5;

if (a < b)
Run Code Online (Sandbox Code Playgroud)

java autoboxing integer

196
推荐指数
7
解决办法
35万
查看次数

Java,如何删除ArrayList中的Integer项

假设我有这样一个ArrayList:

ArrayList<Integer> list = new ArrayList<Integer>();
Run Code Online (Sandbox Code Playgroud)

添加操作后:

list.add(2);
list.add(3);
list.add(5);
list.add(7);
Run Code Online (Sandbox Code Playgroud)

number 2如果我这样做,我想删除

list.remove(2);
Run Code Online (Sandbox Code Playgroud)

然后number 5将被删除,我怎么能删除number 2?并且假设我不知道索引number 2.

java

47
推荐指数
5
解决办法
4万
查看次数

removeIf 实现细节

我有一个小的实现细节问题,我在ArrayList::removeIf. 我不认为我可以简单地把它放在没有一些先决条件的情况下。

如此:实现基本是散装 remove,不像ArrayList::remove。一个例子应该让事情更容易理解。假设我有这个列表:

List<Integer> list = new ArrayList<>(); // 2, 4, 6, 5, 5
list.add(2);
list.add(4);
list.add(6);
list.add(5);
list.add(5); 
Run Code Online (Sandbox Code Playgroud)

我想删除每个偶数元素。我可以:

Iterator<Integer> iter = list.iterator();
while (iter.hasNext()) {
    int elem = iter.next();
    if (elem % 2 == 0) {
         iter.remove();
    }
}
Run Code Online (Sandbox Code Playgroud)

或者

list.removeIf(x -> x % 2 == 0);
Run Code Online (Sandbox Code Playgroud)

结果将是相同的,但实现却大不相同。由于iterator是 的视图,因此ArrayList每次调用时remove,底层ArrayList都必须处于“良好”状态,这意味着内部数组实际上会发生变化。同样,在每次调用 时remove,都会在System::arrayCopy内部进行调用。

在对比度removeIf上更聪明。由于它在内部进行迭代,因此可以使事情更加优化。它这样做的方式很有趣。

它首先计算应该从中删除元素的索引。这是通过首先计算一个 tiny 来完成的,这是BitSet一个 …

java iterator java-8

9
推荐指数
1
解决办法
217
查看次数

标签 统计

java ×3

autoboxing ×1

integer ×1

iterator ×1

java-8 ×1