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()返回了当前元素(这个是我从结果想到的,我知道是出错了,但不知道怎么去解释是返回下一元素)
2 年多之前 回复
w123456wwqq
w123456wwqq low = sortedset.firt(),high = sortedset.last().可以验证这个序列排序是TreeSet的排序
2 年多之前 回复
w123456wwqq
w123456wwqq low = sortedset.firt(),high = sortedset.last().可以验证这个序列排序是TreeSet的排序
2 年多之前 回复
w123456wwqq
w123456wwqq TreeSet顺序确实不是插入顺序,但是我已经打印出它的排列顺序了,所以这不是问题。验证的这个序列是TreeSet
2 年多之前 回复
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()的例子来说明一下是返回下一个元素。共同讨论一下
2 年多之前 回复
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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Iterator主要有三个方法:hasNext()、next()、remove()详解
转载自:http://blog.csdn.net/scyatcs/article/details/9003295 一、Iterator的API 关于Iterator主要有三个方法:hasNext()、next()、remove() hasNext:没有指针下移操作,只是判断是否存在下一个元素 next:指针下移,返回该指针所指向的元素 remove:删除当前指针所指向的元素,一般和next方
iterator的方法 :hashNext()与next()
iterator的方法: hashNext():判断集合中元素是否遍历完毕,如果没有,就返回true。 next()则是返回下一个元素,这样对于需要遍历的地方,就不需要知道元素的个数了。 Map map = new HashMap(); map.put("1", "10"); map.put("2", "20"); map.put("3", "30"); Iterator ite
Java迭代器Iterator浅析——next/remove操作
java中集合ArrayList提供了Iterator来操作其中的元素。但是此类的 iterator 和 listIterator 方法返回的迭代器是快速失败的:在创建迭代器之后,除非通过迭代器自身的remove 或add 方法从结构上对列表进行修改,否则在任何时间以任何方式对列表进行修改,迭代器都会抛出ConcurrentModificationException。 一、迭代器是失效问题
JQuery的next()函数(取下一个元素)
用法: 对象.next('元素') 例子: "http://www.w3.org/TR/html4/loose.dtd">                     New Web Project                         $(function(){           //和$('.d1 + div').html('我是class为
浅析Java中Scanner的next()和nextLine()方法
scanner.next():指针指向下一个有效元素的末尾; scanner.nextLine:指针指向下一个有效行的末尾。
Java 迭代器Iterator的详解
为了方便的处理集合中的元素,Java中出现了一个对象,该对象提供了一些方法专门处理集合中的元素.例如删除和获取集合中的元素.该对象就叫做迭代器(Iterator). 对 Collection 进行迭代的类,称其为迭代器。还是面向对象的思想,专业对象做专业的事情,迭代器就是专门取出集合元素的对象。但是该对象比较特殊,不能直接创建对象(通过new),该对象是以内部类的形式存在于每个集合类的内部。
ResultSet.next()方法
以下是javadoc中的注释:“boolean java.sql.ResultSet.next() throws SQLExceptionMoves the cursor forward one row from its current position. A ResultSet cursor is initially positioned before the first row; the fi...
JAVA学习【5】String数组输入,及nextLine()、nextInt()、next()区别
Scanner方法下String数组输入,及nextLine()、nextInt()、next()区别
java中.next()方法的作用及应用?
1、.next()方法的作用:指针指向下一条记录,有记录(有值)返回true并把记录内容存入到对应的对象中,也就是obj.next()的obj中。如果没有返回false。2、.next()方法的应用:一般和ResultSet对象和while循环一起使用,去迭代结果集,并在循环中调用getXXX(intfieldIndex)/getXXX(String columnName)方法获取字段值。过程:R...
关于集合中迭代器中next()方法重复使用造成的错误
今天测试ArrayList消除重复字符串功能时候发现的一些小问题,以前被提醒过,一直没重视.遂记下供大家参考.最后输出newArray没有采用迭代,直接输出了,只看结果. 下面代码是单纯使用it.next()方法的代码: package day16_04_ArrayList; import java.util.ArrayList; import java.util.Iterator