A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yan5108652 中级黑马   /  2013-7-3 05:14  /  18942 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

数组可以根据下标来访问数据比如  a[1]=?
list接口下的几个子类ArrayList类底层也是用数组实现的,可以通过arraylist.get(1)来访问,
那么Set类呢,如何取值,
看到这样一句话:
List 可以通过下标 (1,2..) 来取得值,值可以重复

而 Set 只能通过游标来取值,并且值是不能重复的,
下半句看不懂了,游标是什么,怎么取值,谁能举个例子,详细讲下么,谢谢了

4 个回复

倒序浏览
Set取值有两种方式
比如一个set集合  
Set<String> set = new HashSet();
第一种取值方式:
for(String s:set){
System.out.println(s);
}
第二种取值方式:
Iterator iterator = set.Iterator();
while(iterator.hashNext()){
System.out.println(iterator.next());

其中第二个是游标取值 如果Iterator中还是值的话就进入while循环,打印值,然后游标再到判断while条件那里
}
回复 使用道具 举报
在Collection集合中,只有list有get()方法,这是它独有的。要想获取Set中的值,只能通过迭代器。至于游标我也不知道
回复 使用道具 举报
游标是迭代器中的称呼;
11,java.util.Iterator接口下方法之hasNext():boolean hasNext(),判断当前游标位置的后面是否还有元素,有则返回true,否则返回false;
12,Iterator接口下方法之next:Object next():返回当前游标右边的元素,然后游标右移一个位置;
13,Iterator接口下方法之remove:删除最近返回的元素,在调用remove之前,必须先调用一次next,而且在调用next后只能调用一次remove;不推荐使用remove;
14,Collection下的方法之iterator:Iterator iterator():该方法返回Iterator接口,我们可以自己定义一个方法showCollection(Collection c),该方法用来接收容器,然后调用c.iterator()来返回一个Iterator接口实现类的引用,用该引用调用Iterator接口中的next、hasNext等方法,对容器中的元素进行处理;

17,用迭代器输出元素的两种写法比较:法一:
   Iterator it = al.iterator();  //此方式返回的是Iterator接口的实现类;
   while(it.hasNext())
   {
        System.out.println(it.next());
   }
   法二:
   for(Iterator it = al.iterator(); it.hasNext();)
   {
        System.out.println(it.next());
   }
   虽然方法一和方法二都返回了Iterator的实现类,但方法二的返回值只是for语句的局部变量,循环结束后,内存就收回了,而方法一的返回语句在while循环外面,循环结束后,Iterator接口还在占用内存,而且是内存垃圾,从内存管理的角度来看,推荐使用方法二;
10,增强的for循环(也叫for-each):for(需遍历的变量:数组或集合){执行语句}:主要用于集合,通过调用iterator实现集合的遍历;这种遍历方式只能获取集合中的元素,不能对集合进行操作,迭代器可以对元素进行remove,ListIterator更是可以对元素进行增删改查;增强for循环的局限性:必须指定遍历的对象,在遍历数组时还是推荐使用传统的for循环,传统方式可以指定下标;

评分

参与人数 1黑马币 +12 收起 理由
yan5108652 + 12 赞一个!

查看全部评分

回复 使用道具 举报
请版主将帖子更改为已解决,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马