zoukankan      html  css  js  c++  java
  • 集合 Collection

    数组和集合的区别
    	* 区别1 : 
    		* 数组既可以存储基本数据类型,又可以存储引用数据类型,基本数据类型存储的是值,引用数据类型存储的是地址值
    		* 集合只能存储引用数据类型(对象)集合中也可以存储基本数据类型,但是在存储的时候会自动装箱变成对象
    	* 区别2:
    		* 数组长度是固定的,不能自动增长
    		* 集合的长度的是可变的,可以根据元素的增加而增长
    * C:数组和集合什么时候用
    		* 1,如果元素个数是固定的推荐用数组
    		* 2,如果元素个数不是固定的推荐用集合

    Collection集合的基本功能测试)
    	boolean add(E e)
    	boolean remove(Object o)
    	void clear()
    	boolean contains(Object o)
    	boolean isEmpty()
    	int size()
    toArray()
     1     Collection coll = new ArrayList();
     2     coll.add(new Student("张三",23));        //Object obj = new Student("张三",23);
     3     coll.add(new Student("李四",24));
     4     coll.add(new Student("王五",25));
     5     coll.add(new Student("赵六",26));
     6             
     7     Object[] arr = coll.toArray();                //将集合转换成数组
     8     for (int i = 0; i < arr.length; i++) {
     9         Student s = (Student)arr[i];            //强转成Student
    10         System.out.println(s.getName() + "," + s.getAge());
    11     }
    (Collection集合的带All功能测试)
    	boolean addAll(Collection c)
    	boolean removeAll(Collection c)
    	boolean containsAll(Collection c)
    	boolean retainAll(Collection c)
    集合的遍历之迭代器遍历
    * A:迭代器概述
    	* 集合是用来存储元素,存储的元素需要查看,那么就需要迭代(遍历)
    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));
                
    for(Iterator it = c.iterator();it.hasNext();) {
        Student s = (Student)it.next();                        //向下转型
        System.out.println(s.getName() + "," + s.getAge());    //获取对象中的姓名和年龄
    }
    System.out.println("------------------------------");
    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());    //获取对象中的姓名和年龄
    }
    迭代器原理:迭代器是对集合进行遍历,而每一个集合内部的存储结构都是不同的,所以每一个集合存和取都是不一样,那么就需要在每一个类中定义hasNext()和next()方法,
    这样做是可以的,但是会让整个集合体系过于臃肿,迭代器是将这样的方法向上抽取出接口,然后在每个类的内部,定义自己迭代方式,这样做的好处有二,
    第一规定了整个集合体系的遍历方式都是hasNext()和next()方法,
    第二,代码有底层内部实现,使用者不用管怎么实现的,会用即可


    * A:案例演示 * 需求:我有一个集合,请问,我想判断里面有没有"world"这个元素,如果有,我就添加一个"javaee"元素,请写代码实现。
    List list = new ArrayList();
    list.add("a");
    list.add("b");
    list.add("world");
    list.add("d");
    list.add("e");
    /*Iterator it = list.iterator();
    while(it.hasNext()) {
        String str = (String)it.next();
        if(str.equals("world")) {
            list.add("javaee");            //这里会抛出ConcurrentModificationException并发修改异常
            }
    }*/
    ConcurrentModificationException出现的原因
    	* 迭代器遍历,集合修改集合
    * C:解决方案
    	* a:迭代器迭代元素,迭代器修改元素(ListIterator的特有功能add)
    	* b:集合遍历元素,集合修改元素
    1 ListIterator lit = list.listIterator();        //如果想在遍历的过程中添加元素,可以用ListIterator中的add方法
    2 while(lit.hasNext()) {
    3     String str = (String)lit.next();
    4     if(str.equals("world")) {
    5      lit.add("javaee");  
    6      //list.add("javaee");
    7     }
    8 }
    (ListIterator)(了解)
    * boolean hasNext()是否有下一个
    * boolean hasPrevious()是否有前一个
    * Object next()返回下一个元素
    * Object previous();返回上一个元素

    Vector类
    * B:Vector类特有功能
    	* public void addElement(E obj)
    	* public E elementAt(int index)
    	* public Enumeration elements()
    Vector的迭代:
    Vector v = new Vector();                //创建集合对象,List的子类
    v.addElement("a");
    v.addElement("b");
    v.addElement("c");
    v.addElement("d");
                
    //Vector迭代
    Enumeration en = v.elements();            //获取枚举
    while(en.hasMoreElements()) {            //判断集合中是否有元素
        System.out.println(en.nextElement());//获取集合中的元素
    }

    数据结构之数组和链表)
    * A:数组
    	* 查询快修改也快
    	* 增删慢
    * B:链表
    	* 查询慢,修改也慢
    	* 增删快
    
    List的三个子类的特点
    
    	ArrayList:
    		底层数据结构是数组,查询快,增删慢。
    		线程不安全,效率高Vector:
    		底层数据结构是数组,查询快,增删慢。
    		线程安全,效率低。
    	Vector相对ArrayList查询慢(线程安全的)
    	Vector相对LinkedList增删慢(数组结构)
    	LinkedList:
    		底层数据结构是链表,查询慢,增删快。
    		线程不安全,效率高。
    
    	Vector和ArrayList的区别
    		Vector是线程安全的,效率低
    		ArrayList是线程不安全的,效率高
    	共同点:都是数组实现的
    	ArrayList和LinkedList的区别
    	ArrayList底层是数组结果,查询和修改快
    	LinkedList底层是链表结构的,增和删比较快,查询和修改比较慢
    	共同点:都是线程不安全的
    * B:List有三个儿子,我们到底使用谁呢?
    	查询多用ArrayList
    	增删多用LinkedList
    	如果都多ArrayList
  • 相关阅读:
    WSP部署错误—SharePoint管理框架中的对象“SPSolutionLanguagePack Name=0”依赖其他不存在的对象
    Elevate Permissions To Modify User Profile
    Error with Stsadm CommandObject reference not set to an instance of an object
    ASP.NET MVC3添加Controller时没有Scaffolding options
    测试使用Windows Live Writer写日志
    配置TFS 2010出现错误—SQL Server 登录的安全标识符(SID)与某个指定的域或工作组帐户冲突
    使用ADO.NET DbContext Generator出现错误—Unable to locate file
    CSS
    HTML DIV标签
    数据库
  • 原文地址:https://www.cnblogs.com/gaoyang666/p/11179380.html
Copyright © 2011-2022 走看看