您的位置:首页 > 编程语言 > Java开发

java 集合学习笔记1-Collection 集合遍历 List子类特点

2016-12-25 17:32 537 查看
1、集合-集合的由来:

    数组长度是固定,当添加的元素超过了数组的长度时需要对数组重新定义,太麻烦,java内部给我们提供了集合类,能存储任意对象,长度是可以改变的,随着元素的增加而增加,随着元素的减少而减少

    

    数组和集合的区别
区别1 : 
数组既可以存储基本数据类型(int float char long double),又可以存储引用数据类型,基本数据类型存储的是值,引用数据类型存储的是地址值
集合只能存储引用数据类型(对象)集合中也可以存储基本数据类型,但是在存储的时候会自动装箱变成对象(例如int就存为Interger)
区别2:
数组长度是固定的,不能自动增长
集合的长度的是可变的,可以根据元素的增加而增长

    

    

2、集合的体系:

                                                Collection(单列集合的根接口)

                                                            |

            List(接口:存取顺序一致,有索引,可以重复)         Set(接口:存取顺序不一致,无索引,不可以重复)

                |               |                   |                           |                   |

    ArrayList(数组实现)  LinkedList(链表实现) Vector(数组实现)          HashSet(Hash算法) TreeSet(二叉树)

    

    

3、集合-集合转数组遍历:toArray() 暂时没有加泛型

    Collection coll = new ArrayList();

    coll.add(new Student("张三",23)); //Object obj = new Student("张三",23);

    coll.add(new Student("李四",24));

    coll.add(new Student("王五",25));

    coll.add(new Student("赵六",26));

    

    Object[] arr = coll.toArray(); //将集合转换成数组,使用Object的数组接收

    for (int i = 0; i < arr.length; i++) {

        Student s = (Student)arr[i]; //向下强转成Student,因为arr[i]本身就是个Student的对象,所以可以强转

        System.out.println(s.getName() + "-" + s.getAge());

    }

    

    

4、集合-集合带All功能测试:

    boolean addAll(Collection c)

    boolean removeAll(Collection c)//删除的是两个集合的交集

    boolean containsAll(Collection c)//判断调用的集合是否包含传入的集合

    boolean retainAll(Collection c)//取交集,如果调用的集合改变就返回true,如果调用的集合不变就返回false

    例如:

    Collection c1 = new ArrayList();
c1.add("a");
c1.add("b");
c1.add("c");
c1.add("d");

Collection c2 = new ArrayList();
c2.add("a");
c2.add("b");
c2.add("c");
c2.add("d");

c1.addAll(c2);
//将c2中的每一个元素添加到c1中,结果[a, b, c, d, a, b, c, d]

        //c1.add(c2); //将c2看成一个对象添加到c1中,结果[a, b, c, d, [a, b, c, d]]

5、集合-使用迭代器遍历:

        Collection c = new ArrayList();

        c.add("a");

        c.add("b");

        c.add("c");

        c.add("d");

        

        Iterator it = c.iterator(); //获取迭代器的引用,是一个接口

        while(it.hasNext()) { //集合中的迭代方法(遍历)

            System.out.println(it.next());

        }

    

    自定义对象并遍历:

        Collection c = new ArrayList();

        c.add(new Student("张三",23));

        c.add(new Student("李四",24));

        c.add(new Student("王五",25));

        c.add(new Student("赵六",26));

        c.add(new Student("赵六",26));

        

        Iterator it = c.iterator(); //获取迭代器

        while(it.hasNext()) { //判断集合中是否有元素

            //System.out.println(((Student)(it.next())).getName() + "," + ((Student)(it.next())).getAge());

            Student s = (Student)it.next();
//向下转型

            System.out.println(s.getName() + "," + s.getAge());
//获取对象中的姓名和年龄

        }

    

    

6、集合-数据结构之数组和链表

    A:数组

        查询快修改也快         //可以根据索引查找

        增删慢                 //增删需要移动其他所有的数据

    B:链表                    每个数据对象记录了前一个和后一个对象的地址值,查询需要一个个问,增删的话只需要改变数据对象的前后地址值就行,不需要移动其他数据。

        查询慢,修改也慢

        增删快

    

7、集合-数据结构之数组和链表

    A:List的三个子类的特点
ArrayList:
底层数据结构是数组,查询快,增删慢。
线程不安全,效率高。
Vector:
底层数据结构是数组,查询快,增删慢。
线程安全,效率低。
Vector相对ArrayList查询慢(线程安全的)
Vector相对LinkedList增删慢(数组结构)
LinkedList:
底层数据结构是链表,查询慢,增删快。
线程不安全,效率高。

Vector和ArrayList的区别
Vector是线程安全的,效率低
ArrayList是线程不安全的,效率高
共同点:都是数组实现的
ArrayList和LinkedList的区别
ArrayList底层是数组结果,查询和修改快
LinkedList底层是链表结构的,增和删比较快,查询和修改比较慢
共同点:都是线程不安全的

    
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐