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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© HM王琦 中级黑马   /  2013-3-1 18:05  /  2363 人查看  /  14 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 [野狼]~@ 于 2013-3-1 18:07 编辑

/*
集合框架体系总结:
在java.util包中有还能多接口,Collection接口及时其中一个。它是Collection层次结构
中的跟接口。
Collection表示一组对象,这些对象也称之为Collection的元素,可以形象的理解为一组对象的集合。
而一些Collection也有一些子接口,用阶梯形式表示它们的所属关系。

Collection        
        List        有序的Collection集合,元素可以重复,因为该集合体系中有索引
                已实现类ArrayList  底层数据结构是数组。查询很快,增删稍慢
                已实现类LinkedList        底层数据结构是链表,查询较慢,增删很快。
        Set                无序的Collection集合 ,元素不能重复,无索引。
                已实现类HashSet                底层数据结构是哈是表
                已实现类TreeSet                底层数据结构是二叉树

List集合中的特有方法(凡是操作角标的都是该体系特有方法)
        添加元素
        add(E e) 将指定对象,添加到该集合末尾。
        add(int index E e) 添加元素导制定位置。
        addAll(int intdex,Collection<? extends E c) 将制定Collection对象添加到制定位置。
        删
        remove(index);删元素除指定

        改
        set(index,element);用制定元素替换制定位置元素
        查
        get(index):获取指定位置元素
        subList(from,to);返回从form(包括)到to(不包括)的元素组成的集合
        listIterator();List特有迭代器,
        int indexOf(obj):获取指定元素的位置。
Iterator 是迭代器对象,用与获取集合中元素的方法。
ListIterator是Iterator的子接口。

*/
//ArrayList代码示例:在操作集合中的元素,并使用迭代器获取元素。
import java.util.*;
class CollectionDemo
{
        public static void main(String[] args)
        {
                List<String> ar=new ArrayList();
                int x;
                for(x=0;x<10;x++)
                {
                        ar.add("list"+x);//添加元素
                        if(x==8)
                        ar.remove(8);//删除元素。
                }
                System.out.println(ar.get(8));//获取8角标的元素。

                Iterator<String> it=ar.iterator();//获取迭代器迭代元素;
                for(int b=0;b<9;b++)
                {
                        
                        if(it.hasNext())
                                {
                                
                                        System.out.println(ar.indexOf("list"+b)+"..."+it.next());//打印角标和对应的值。
                                       
                                }
                }
                        
               
        }
}
//为什么打印出来最后一个元素的角标是-1
file:///C:/Users/dell/Pictures/我的照片/Demo.JPG

点评

请改名~ 谢谢合作~ 如有重名,可以改成“黑马-xxx”~  发表于 2013-3-1 18:23

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

14 个回复

倒序浏览
class CollectionDemo
{
        public static void main(String[] args)
        {
                List<String> ar=new ArrayList();
                int x;
                for(x=0;x<10;x++)
                {
                        ar.add("list"+x);//添加元素
                                                //此时,ar集合中的元素少了一个成了8个了元素了。
                        if(x==8)
                        ar.remove(8);//删除了“list8”;
                }
                               

                System.out.println(ar.get(8));//获取8角标的元素,它是最后一个元素。

                Iterator<String> it=ar.iterator();//获取迭代器迭代元素;
                for(int b=0;b<9;b++)
                {
                        if(it.hasNext())
                                                {
                                                        //indexOf方法的作用是:返回此列表中第一次出现的指定元素的索引;
                                                        //如果此列表不包含该元素,则返回 -1。
                                                        //此时 list8 元素在集合中已经是不存在的元素了,所以返回-1;
                                                        System.out.println(ar.indexOf("list"+b)+"..."+it.next());//打印角标和对应的值。      
                                                }
                }
        }
}


评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
付玉光 发表于 2013-3-1 18:34
class CollectionDemo
{
        public static void main(String[] args)

希望对你有帮助 。:)
回复 使用道具 举报
我这样的解答,你明白吧!不知道版主能不能再给我个鼓励分{:soso_e100:}

点评

答得很好啊,我只给10分以下的鼓励分。  发表于 2013-3-1 20:51
回复 使用道具 举报
我觉得你应该就是最后那句System.out.println(ar.indexOf("list"+b)+"..."+it.next());
不太明白吧 。
indexOf方法返回对象在集合中第一次出现的位置索引,如不存在则返回-1
所以当b循环的时候到ar.indexOf("list"+8)时,就是list8在集合出现时  返回的应该是8
但你前面已经把list8这个对象删除了,所以只能返回-1

其实我觉得要想打印角标b本身就是角标吧  直接循环打印它就行了啊
System.out.println(ar.indexOf(b+"..."+it.next());

如果怕不知道集合元素就在迭代前加个size方法
回复 使用道具 举报
因为你前面已经删除了list8了. 所以下面迭代的时候,没有list8了,就肯定返回-1啊..
回复 使用道具 举报
本帖最后由 陈丽莉 于 2013-3-1 20:55 编辑

楼上的几位答案很完整了,看了代码之后个人觉得可能有点绕弯子的地方,就是it.next()其实是从第一个元素开始取的,而不是像next这个单词,给人的感觉跳过了第一个。又由于list的特性,删除一个元素后,会由后面的向前补齐,所以就出现这样的打印结果了。
回复 使用道具 举报
如果还有问题,请继续追问,弄懂了记得改成【已解决】,谢谢合作~

点评

谢谢  发表于 2013-3-2 00:09
回复 使用道具 举报
陈丽莉 发表于 2013-3-1 20:54
楼上的几位答案很完整了,看了代码之后个人觉得可能有点绕弯子的地方,就是it.next()其实是从第一个元素开 ...

版主大人 我这回答也该给加个分吧  :'(:'(:'(
回复 使用道具 举报
张文彬 发表于 2013-3-1 21:09
版主大人 我这回答也该给加个分吧

一楼的答案清楚,细致,时间也早了一个小时,所以。。。
回复 使用道具 举报
陈丽莉 发表于 2013-3-1 21:15
一楼的答案清楚,细致,时间也早了一个小时,所以。。。

好吧。。。。。  下次早点吧
回复 使用道具 举报
我写着个程序的用意是,想打印集合中的角标和对应的元素,程序不一定是优化的,只想在综合以上提到的知识点,存入了十个元素,删除了第八角标的元素,在打印结果就出错了。看了你们的解答,我又研究了半天终于明白了,删除了8角标的元素"list8",集合中就有9个元素。8角标的元素就是"list9"了,
而在一下for循环中,当循环到b=8时,System.out.println(intdexOf("list"+b)+"...."+it.next())//此时indexOf("list8")不存在,返回值是-1。搞定哈哈
改进:
for(int b=0;b<=ar.size();b++)
                {
                        if(b==8)
                                continue;
                        if(it.hasNext())
                                {
                               
                                        System.out.println(ar.indexOf("list"+b)+"..."+it.next());//打印角标和对应的值。
                                       
                                }
                }
回复 使用道具 举报
[野狼]~@ 发表于 2013-3-2 00:01
我写着个程序的用意是,想打印集合中的角标和对应的元素,程序不一定是优化的,只想在综合以上提到的知识点 ...

狼哥,《只想在综合以上提到的知识点,存入了9个元素》。:)
回复 使用道具 举报
付玉光 发表于 2013-3-2 00:15
狼哥,《只想在综合以上提到的知识点,存入了9个元素》。

嗯,没错,开始时存入了10个,可是删了一个,还有九个。呵呵:)
回复 使用道具 举报
[野狼]~@ 发表于 2013-3-2 00:28
嗯,没错,开始时存入了10个,可是删了一个,还有九个。呵呵

:),,改一下主题吧。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马