迭代器Iterator 取出set中的元素,有没有什么顺序的?

xmyaoxuejava 2009-07-09 03:04:06
RT
...全文
965 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xmyaoxuejava 2009-07-09
  • 打赏
  • 举报
回复
谢了。。。。
Yedy2000 2009-07-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zhouziyan8244158 的回复:]
因为 set 是没有顺序的
用Iterator按无序的迭代 所以也无序
[/Quote]

不要这么武断

jdk中Set的一个实现,LindedHashSet具有可预知迭代顺序的 Set 接口的哈希表和链接列表实现。此实现与 HashSet 的不同之外在于,后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,即按照将元素插入到 set 中的顺序(插入顺序)进行迭代。
361719298 2009-07-09
  • 打赏
  • 举报
回复
因为 set 是没有顺序的
用Iterator按无序的迭代 所以也无序
xuhaitao5217 2009-07-09
  • 打赏
  • 举报
回复
set是没有的,但是它有的子类是可以根据你制定的顺序可以有
一般都是ArrayList可以有顺序
JackRui2008 2009-07-09
  • 打赏
  • 举报
回复
set主要有2种集合实现,一个是HashSet,一个是TreeSet,既然都属于Set接口,所以,这两种集合内容纳的对象也是不可以重复的。
HashSet 的特征在于其内对象的散列存取,即采用哈希技术,每个对象利用Hashcode()方法算出一个唯一的hash值,然后在根据该hash值把各个对象尽可能均匀分布到集合中。当读取对象的时候,同样先计算出对象的hash值,然后根据hash值快速到集合中相应的位置(可以理解为hash值默认的实现是与存储位置相关的数据)取出对象元素。自然,hashSet的优点在于快速定位元素。
HashSet内存放的对象有2个要求,除了equals方法判断元素时候重复外,还要使用hashCode()方法来快速定位元素,在需要的时候,这2中方法都要覆盖。
TreeSet虽然是存入的顺序和存储的顺序是不一样的,但是存储是按照排序存储的,也就是说在存储的时候是用到了Arrays中提到的比较接口Comparable和Comparator。
下面是一个HashSet和TreeSet的例子:



import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;

/**
* @功能:实现一个HashSet和TreeSet的例子
*/
public class SetDemo {

private static void printCol(Collection coll){
Iterator iter = coll.iterator();
while(iter.hasNext()){
System.out.println(iter.next());
}
}

public static void main(String[] args) {
Collection coll = new ArrayList();
coll.add("c");
coll.add("a");
coll.add("b");
coll.add("a");

Set set1 = new HashSet();
Set set2 = new TreeSet();

set1.addAll(coll);
set2.addAll(coll);

System.out.println("现在开始打印HashSet的内容: ");
printCol(set1);
System.out.println("现在开始打印TreeSet的内容: ");
printCol(set2);


}

}


执行结果如下:
现在开始打印HashSet的内容:
a
c
b
现在开始打印TreeSet的内容:
a
b
c


代码解释:从结果看到,无论是HashSet还是TreeSet,都没有重复的值(像Set中重复存储对象是可以执行的,但只能存储一次罢了,这也是Set的基本特性。) HashSet区别的地方是对象是散列开的,具体体现在输出上。我们输入的顺序是cab,经过HashSet存储后输出的顺序变成acb了,而TreeSet是有序的。

wangjiancy 2009-07-09
  • 打赏
  • 举报
回复
没有

62,614

社区成员

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

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