2 w123456wwqq w123456wwqq 于 2016.04.08 22:38 提问

java se中next()方法,对返回元素的不理解

next(),使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。
  (2) 使用next()获得序列中的下一个元素。
但是我还是不太明白

```SortedSet sortedset = new TreeSet(Arrays.asList(
"one two three four five six seven eight".split(" ")));
System.out.println(sortedset);
Object
low = sortedset.first(),
high = sortedset.last();
P.rintln("" + low);
P.rintln("" + high);
Iterator it = sortedset.iterator();
for(int i = 0; i < 7; i++){
if(i == 1) low = it.next();
if(i == 6) high = it.next();
else it.next();
}
P.rintln("" + low);
P.rintln("" + high);
P.rintln("" + sortedset);

[eight, five, four, one, seven, six, three, two]
eight
two
five
two
[eight, five, four, one, seven, six, three, two]


当 i == 1 ;当前元素是five,it.next(),后应该是four。这里不太理解了。感觉像返回当前元素一样


5个回答

caozhy
caozhy   Ds   Rxr 2016.04.08 23:23

TreeSet的顺序不是插入的顺序,所以不一定。

w123456wwqq
w123456wwqq 好吧,我再严谨一点,我决定每次next()后就打印一次序列,看看next()后有没有改变序列的顺序,然后发现序列的顺序就是这个[eight, five, four, one, seven, six, three, two]。并没有改变。(注意这个顺序不是插入顺序)所我觉得不是TreeSet的排序问题,而是next()这里不理解,你也可以拿出一些next()返回下一个元素的例子去说明,我在这里遇到的矛盾是next()返回了当前元素(这个是我从结果想到的,我知道是出错了,但不知道怎么去解释是返回下一元素)
一年多之前 回复
w123456wwqq
w123456wwqq low = sortedset.firt(),high = sortedset.last().可以验证这个序列排序是TreeSet的排序
一年多之前 回复
w123456wwqq
w123456wwqq low = sortedset.firt(),high = sortedset.last().可以验证这个序列排序是TreeSet的排序
一年多之前 回复
w123456wwqq
w123456wwqq TreeSet顺序确实不是插入顺序,但是我已经打印出它的排列顺序了,所以这不是问题。验证的这个序列是TreeSet
一年多之前 回复
wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.04.09 07:35

你用的是SortedSet为就是有序的集合,所以会有排序的,你看看排序原则的TreeSet是怎么排序的,可能就是按字母顺序排的。

w123456wwqq
w123456wwqq 我不明白的是Iterator里的next(),按定义应该返回下一个元素。第一次调用是序列第一个元素。那第二次也就是i == 1的时候应该返回的是容器内序列 1的下一个元素。可是这里我直接就打印了SortedSet的序列了。[eight, five, four, one, seven, six, three, two],然后我测试 i == 1,它应该返回容器里第 i ==1元素的下一个元素four.(容器是从0开始数的)。这里我不理解,它打印的是five。就是序列里 i ==1 的元素。换句话说就是当前元素,这和概念不合,他应该返回下一个元素。所以我不明白这个,你可以拿出next()的例子来说明一下是返回下一个元素。共同讨论一下
一年多之前 回复
renwotao2009
renwotao2009   2016.04.10 23:04

重写treeset的排序方法

chenhui_
chenhui_   2016.06.28 09:04

for(int i = 0; i < 7; i++){
if(i == 1) low = it.next();
if(i == 6) high = it.next();
else it.next();
}
你代码里的i和你的next是没有关系的,你的i跟你的数据也没有直接关系,不是说i=1就是第二个数据。
if(i == 1) low = it.next();这段代码不是说你i=1的时候low就是第二个的数据的后面(four).
每next一次,数据就会往下一个。你的这段代码中,i=0时第一个使用next,这时数据为eight,i=1时第二次next,这时数据为five。
不知道你能不能理解。

guanjun_12
guanjun_12   2017.12.10 11:07

Treeset数据是按照值排序的,当然和输入顺序不同

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!