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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ~﹏~ 中级黑马   /  2013-11-6 20:32  /  1594 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

ArrayList就像C语言的链表一样
Vector字面意思向量
LinkedList字面意思是队列
它们也都有好多相同的方法,那么它们的存储性能,和特性是什么呢?
什么时候改用什么呢?

4 个回复

倒序浏览
本帖最后由 麦者 于 2013-11-6 20:43 编辑

1.ArrayList:底层是数组结构,查询快,增删慢,线程不安全,效率高.多用于查询性强的情况下,但是一般数据也就是查询应用多,所以一般建议ArrayList
2.LinkedList:底层是链表结构,特点是查询慢,增删快,主要用于增删频繁,而且查询应用相对较少的情况
3.Vector:特点和ArrayList一样,但是其线程安全,效率低,ArrayList替代了Vector。一般的话ArrayList应用较多。

评分

参与人数 1技术分 +1 收起 理由
To + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
ArrayList与LinkedList分别是list接口下最常用的两个实现类。
ArrayList 和Vector是采用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,都允许直接序号索引元素,但是插入数据要设计到数组元素移动等内存操作,所以索引数据快插入数据慢,Vector由于使用了synchronized方法(线程安全)所以性能上比ArrayList要差,LinkedList使用双向链表实现存储,按序号索引数据需要进行向前或向后遍历,但是插入数据时只需要记录本项的前后项即可,所以插入数度较快!
ArrayList与LinkedList的区别
        ArrayList:队列结构:内存空间是连续的
                1.插入和删除数据效率不高
                2.查询很很方便
        LinkedList:链表结构:内存空间不连续
                1.查询不方便
                2.插入和删除数据效率很高
ArrayList的方法:
add(对象);//添加
add(下标,对象);//添加

size(); //得到集合的大小, 返回集合中对象的个数



remove(下标);删除数据
remove(对象 );---自己定义的类要重写equals和hashcode



get(下标);  //根据下标查数据,返回的是一个Object对象


查询数据
                System.out.println("-------查询第一种方式-----------");
                for (int i = 0; i < list.size(); i++) {
                        System.out.println(list.get(i));
                }

System.out.println("-------查询第二种方式-----------");
for(Object o:list){
                        System.out.println(o);
                }
               
                System.out.println("-------查询第三种方式-----------");
                //迭代器:Iterator :专门用来查询collection接口以及实现类
                //hasnext()判断有没有下一个 如果有返回true 否则返回false
                //next()  取出迭代器中的对象
                Iterator it = list.iterator();
                while(it.hasNext()){
                        System.out.println(it.next());
                }



LinkedList的方法:链表结构:内存空间不是连续的  基本方法和ArrayList一样,只是添加了一些针对首尾的方法。
    addFirst(Object o);//添加到第一个
    addLast(Object o) ;//添加到最后一个

    Object removeFirst();   
    Object removeLast();

    Object getFirst();
    Object getLast();



       


QQ图片20131106215000.jpg (56.49 KB, 下载次数: 9)

QQ图片20131106215000.jpg

点评

好评点赞!  发表于 2013-11-6 22:01

评分

参与人数 1技术分 +1 收起 理由
To + 1 好评应该加分

查看全部评分

回复 使用道具 举报
1.Vector线程是同步的,效率偏低;而且档集合空间不足的时候,Vector集合空  间的增长是按照100%增长,而ArrayList按照50%增长;而ArrayList和Vector的  功能基本一样,ArrayList虽然线程不同步,但是可以自己加锁也不是太麻烦。  综上所述,ArrayList取代Vector是情理之中的事情。 2.LinkedList和ArrayList的区别 LinkedList增删快,查询稍慢; ArrayList增删稍慢,查询快。 所以在ArrayList和LinkedList两者中选择的时候要根据要存储的元素的数量和  要经常对元素进行怎样的操作进行考虑了,当元素数量大而且增删操作多余查询  操作时,选择LinkedList;当元素数量大而且增删操作少于查询操作时,选择  ArrayList;当元素数量不是很大时,这两个选哪个都问题不大,不过如果为了  程序更完美,还是可以根据上一条慎重考虑的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马