"it.next()" + "it.nextIndex()" 的两个版本,但顺序不同,为什么结果不同
Two version of "it.next()" + "it.nextIndex()" but in difference order, why result is different
我正在尝试学习 ListIterator 接口。我想出了两个版本的代码,
List<Integer> list1 = new LinkedList<>(Arrays.asList(11,22,33,44));
ListIterator<Integer> it = list1.listIterator();
while (it.hasNext()){
//version 1
System.out.println("value: " + it.next() + " index: " + it.nextIndex());
//version 2
System.out.println("index: " + it.nextIndex() + " value: " + it.next());
}
版本 1 的结果:
value: 11 index: 1
value: 22 index: 2
value: 33 index: 3
value: 44 index: 4
版本 2 的结果:
index: 0 value: 11
index: 1 value: 22
index: 2 value: 33
index: 3 value: 44
我原以为结果是一样的,但显然不是。有人可以告诉我为什么吗?
字符串连接表达式从左到右求值。这意味着
"value: " + it.next() + " index: " + it.nextIndex()
nextIndex()
在next()
调用之后调用,在
"index: " + it.nextIndex() + " value: " + it.next()
正好相反。
由于next()
移动了迭代器的位置,所以nextIndex()
返回的值在两种情况下都是不同的。
当首先调用it.next()
时,it.nextIndex()
将return元素在it.next()
结果之后的索引,因为it.next()将return 当前索引处的值,然后递增索引。
视觉示例:
it.next()
第一:
v
index 0 1 2 3
value 11 22 33 44
call it.next() -> returns 11, increments index by 1
v
index 0 1 2 3
value 11 22 33 44
call it.nextIndex() -> returns 1
it.nextIndex()
第一:
v
index 0 1 2 3
value 11 22 33 44
call it.nextIndex() -> returns 0
v
index 0 1 2 3
value 11 22 33 44
call it.nextIndex() -> returns 11, increments index by 1
v
index 0 1 2 3
value 11 22 33 44
我正在尝试学习 ListIterator 接口。我想出了两个版本的代码,
List<Integer> list1 = new LinkedList<>(Arrays.asList(11,22,33,44));
ListIterator<Integer> it = list1.listIterator();
while (it.hasNext()){
//version 1
System.out.println("value: " + it.next() + " index: " + it.nextIndex());
//version 2
System.out.println("index: " + it.nextIndex() + " value: " + it.next());
}
版本 1 的结果:
value: 11 index: 1
value: 22 index: 2
value: 33 index: 3
value: 44 index: 4
版本 2 的结果:
index: 0 value: 11
index: 1 value: 22
index: 2 value: 33
index: 3 value: 44
我原以为结果是一样的,但显然不是。有人可以告诉我为什么吗?
字符串连接表达式从左到右求值。这意味着
"value: " + it.next() + " index: " + it.nextIndex()
nextIndex()
在next()
调用之后调用,在
"index: " + it.nextIndex() + " value: " + it.next()
正好相反。
由于next()
移动了迭代器的位置,所以nextIndex()
返回的值在两种情况下都是不同的。
当首先调用it.next()
时,it.nextIndex()
将return元素在it.next()
结果之后的索引,因为it.next()将return 当前索引处的值,然后递增索引。
视觉示例:
it.next()
第一:
v
index 0 1 2 3
value 11 22 33 44
call it.next() -> returns 11, increments index by 1
v
index 0 1 2 3
value 11 22 33 44
call it.nextIndex() -> returns 1
it.nextIndex()
第一:
v
index 0 1 2 3
value 11 22 33 44
call it.nextIndex() -> returns 0
v
index 0 1 2 3
value 11 22 33 44
call it.nextIndex() -> returns 11, increments index by 1
v
index 0 1 2 3
value 11 22 33 44