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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 499827204 初级黑马   /  2016-4-19 10:59  /  331 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

数组存储引用数据类型:
        存储的是地址值。
        Student[] stu = new Student[3];
        stu[0] = new Student("张三",23);

数组和集合的区别:
        数组:长度不可变,既可以存储基本数据类型也可以存储引用数据类型。
        集合:长度可变,只能存储引用数据类型(存储基本数据类型的数据时,会自动装箱),可以存储任意类型。

单列集合:
        Collection :单列集合顶层接口
                -List :接口,存储有序,元素可重复
                        -ArrayList 类,底层数组实现
                        -LinkedList 类,底层链表实现
                        -Vector        类,底层数组实现
                -Set :接口,存储无序,元素不可重复
                        -HashSet 类,底层hash算法实现
                        -TreeSet 类,底层二叉树实现

Collection :
        方法:        boolean add(E e)                        //添加元素
                        boolean remove(Object o)        //移除某一个元素
                        void clear()                                //清空集合
                        boolean contains(Object o)        //判断集合中是否包含某一个元素
                        boolean isEmpty()                        //判断集合是否为空
                        int size()                                        //获取集合的长度

注意:集合重写了toString()方法,所以打印输出集合时,输出的是集合中的内容的字符串形式。

                boolean addAll(Collection c)        //向此集合中添加另外一个集合中的所有元素
                boolean removeAll(Collection c)        //从此集合中将指定集合中的元素移除
                boolean containsAll(Collection c)//如果此集合中包含指定集合中的所有元素则返回true
                boolean retainAll(Collection c)                //将两个集合的交集返回给此集合,如果此集合发生改变则返回true
迭代器:
                Collection c = new ArrayList();
                c.add(new Student("赵四",20));
                c.add(new Student("张三",23));
                c.add(new Student("赵五",25));
                c.add(new Student("赵六",26));
               
                Iterator i = c.iterator();        //获取迭代器
                while(i.hasNext()) {                //判断是否有下一个元素
                        Student s  = (Student) i.next();        //获取下一个元素,向下转型
                        System.out.println(s.getName() +"---"+ s.getAge());
                }

迭代器原理
        迭代器原理:迭代器是对集合进行遍历,而每一个集合内部的存储结构都是不同的,所以每一个集合存和取都是不一样,那么就需要在每一个类中定义hasNext()和next()方法,这样做是可以的,但是会让整个集合体系过于臃肿,迭代器是将这样的方法向上抽取出接口,然后在每个类的内部,定义自己迭代方式,这样做的好处有二,第一规定了整个集合体系的遍历方式都是hasNext()和next()方法,第二,代码有底层内部实现,使用者不用管怎么实现的,会用即可
        迭代器源码解析
                  1,在eclipse中ctrl + shift + t找到ArrayList类
                  2,ctrl+o查找iterator()方法
                  3,查看返回值类型是new Itr(),说明Itr这个类实现Iterator接口
                  4,查找Itr这个内部类,发现重写了Iterator中的所有抽象方法
练习:(使用数组和迭代器两种方式实现)
        1:首先定义一个标准学生类(name,age属性)
        2:用集合存储3个学生,然后遍历集合。打印出每个学生的name和age。

List集合的特有功能概述
        void add(int index,E element)
        E remove(int index)
        E get(int index)
        E set(int index,E element)

练习:
        注意:用迭代器来做。
        我有一个集合,然后往里边添加hello,world,java三个元素,
        我想判断里面有没有“world”这个元素。
        如果有,我就添加一个“javaee”元素,没有什么都不添加。

并发修改异常 : java.util.ConcurrentModificationException
解决: 使用 ListIterator
ListIterator:
          boolean hasNext()是否有下一个
          boolean hasPrevious()是否有前一个
          Object next()返回下一个元素
          Object previous();返回上一个元素
       
Vector 类特有功能
          public void addElement(E obj)
          public E elementAt(int index)
          public Enumeration elements()

List
        ArrayList
                底层数组实现,查询快,增删慢。
                线程不安全,效率高。
        LinkedList
                底层链表结构,查询慢,增删块。
                线程不安全,效率高。
        Vector
                底层数组实现,
                线程安全的,效率低。

        ArrayList 和 LinkedList
                都是线程不安全
                ArrayList 底层数组实现,查询快,增删慢。
                LinkedList 底层链表结构,查询慢,增删块。
        ArrayList 和 Vector
                都是数组结构
                ArrayList 是线程不安全的
                Vector 是线程安全的
List的使用:
        查询多用 ArrayList
        增删多用 LinkedList
        不确定用 ArrayList

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马