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

来源:互联网 发布:淘宝新店能做什么活动 编辑:程序博客网 时间:2024/06/05 20:03
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底层是链表结构的,增和删比较快,查询和修改比较慢
共同点:都是线程不安全的
    
0 0