List和Set中Iterator的next()用法的区别?

ameyume
博客专家认证
2010-12-27 09:07:04
1.hasNext()函数的API解释
boolean java.util.Iterator.hasNext()
hasNext
boolean hasNext()Returns true if the iteration has more elements. (In other words, returns true if next() would return an element rather than throwing an exception.)
Returns:
true if the iteration has more elements
--------------------------简单的分割线-------------------------------
2.next()函数的API解释
Object java.util.Iterator.next()
next
E next()Returns the next element in the iteration.
Returns:
the next element in the iteration
Throws:
NoSuchElementException - if the iteration has no more elements
--------------------------简单的分割线-------------------------------
1.List对象中next()的使用
使用Collection类的Iterator,可以方便的遍历Vector, ArrayList, LinkedList等集合元素,避免通过get()方法遍历时,针对每一种对象单独进行编码。
示例:
Collection coll = new Vector(); //LinkedList(); //ArrayList();   
coll.add("Tody");
coll.add("is");
coll.add("Sunday.");

// Output all elements by iterator
Iterator it = coll.iterator();
while(it.hasNext()) {
System.out.print(it.next() + " ");
}

输出:
Tody is Sunday.

2. Set中next()的使用
Collection coll = new HashSet();   
coll.add("Tody");
coll.add("is");
coll.add("Sunday.");

// Output all elements by iterator
Iterator it = coll.iterator();
while(it.hasNext()) {
System.out.print(it.next() + " ");
}

输出:
is Sunday. Tody

由上面两个例子看出,在List和Set对象中,Iterator的next()方法返回的值是不一样的。在List对象中,第一次next()返回的是第一个元素,在Set中,第一次返回的是下一个元素,但Set中,在set的结尾执行hasNext()时,返回true,表示第一个元素,执行next()会把第一个元素返回。

问题:
可以按照上述理解next()?
如果不是,那该怎么理解next()?
多谢!
...全文
1354 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
别人家的老公 2010-12-27
  • 打赏
  • 举报
回复
这样的问题 你去百度好吗
zhuzeitou 2010-12-27
  • 打赏
  • 举报
回复
如果要迭代也有序,可以用LinkedHashSet
soli11722984 2010-12-27
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 ameyume 的回复:]

也就是说因为set里面存储的值是无序的,所以存储的时候也不是按照添加的顺序来存储,取出来的时候也不是按照添加的顺序取的。
[/Quote]

API有说,好比说LINKEDHASHSET是保证插入顺序,而且又有SET的特色
在好比说,TREESET就会根据Comparator接口来排序,具体看看每个不同实现类
mengyalizuopeng 2010-12-27
  • 打赏
  • 举报
回复
对于线性表(List,Vector),next()就是从第一个开始遍历,按顺序到最后一个,因为线性表保存的数据是有序的;
对于Set,next()也是遍历,但Set存储时不保证数据的逻辑顺序,所以看起来next()的返回通常是乱序的,对于HashSet,其实它返回的顺序是按Hashcode的顺序
ameyume 2010-12-27
  • 打赏
  • 举报
回复
也就是说因为set里面存储的值是无序的,所以存储的时候也不是按照添加的顺序来存储,取出来的时候也不是按照添加的顺序取的。
liaojianbiao 2010-12-27
  • 打赏
  • 举报
回复
List Set Map三种结合的存储数据结构是不一样的。
他们的hasnext都是判断时候还有值
next方法都是取出当前值,把指针移到下一个值。
你说的list set输出的值不一样那是应为数据本身在集合存储的结果不一样导致的
并不是这两个方法不同所导致的。
List存储数据时通过数组,你遍历元素的顺序就是你存储进去的顺序。
而HashSet内部用的存储结构就是个HashMap所以他的存储机制其实就是Entry
Entry存储元素是根据值派讯的 所以存储顺序一次是 is sunday today.所以你取出来的顺序就是值排序后的顺序
zn85600301 2010-12-27
  • 打赏
  • 举报
回复
我感觉不是这个原因吧
SET 是有序集合
HASHSET 在API中的解释是
此类实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持。它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用 null 元素。
所以我认为是顺序的问题吧
不知道对不对,希望火龙果大叔 出来讲解下 哈哈···
panrui277 2010-12-27
  • 打赏
  • 举报
回复
List是线性表,按存放顺序返回,HashSet是无序集合,返回当然也是无序的了
numb09 2010-12-27
  • 打赏
  • 举报
回复
对于线性表(List,Vector),next()就是从第一个开始遍历,按顺序到最后一个,因为线性表保存的数据是有序的;
对于Set,next()也是遍历,但Set存储时不保证数据的逻辑顺序,所以看起来next()的返回通常是乱序的,对于HashSet,其实它返回的顺序是按Hashcode的顺序
shaosijun2004 2010-12-27
  • 打赏
  • 举报
回复
是 存储的问题,set 返回的 iterator是无序的

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧