集合之List子实现类

来源:互联网 发布:淘宝客订单接口 编辑:程序博客网 时间:2024/06/06 18:24

List集合的子实现类的特点:

ArrayList:        底层数据结构是数组的形式,满足数组结构的特点:查询快,增删慢        从线程安全问题来看:线程不安全的,不同步,执行效率高Vector:        底层数据结构是数组的形式,查询快,增删慢        从线程角度看:线程安全的类,同步,执行效率低LinkedList:        底层数据结构是链接列表,特点:查询慢,增删快        从线程角度看:线程不安全的一个类,不同步,执行效率高        如果实现多线程程序,一般要是安全的类:                StringBuffer,Vector<E>,hashtable<K,V>                synchronized(同步锁对象){                    代码;                }    如果在一般的需求中没有指明使用集合去完成,都默认采用ArrayList    如果需求中要考虑线程安全,那么使用Vector集合!        笔试过程中,一些需求用到集合:就是用ArrayList

(1)ArrayList:
底层数据结构是数组的形式,满足数组结构的特点:查询快,增删慢
从线程安全问题来看:线程不安全的,不同步,执行效率高
由于ArrayList是List集合的字实现类,它元素可以重复,并且存储和取出一致

JDK5以后提供了很多特性:
泛型,增强for循环,可变参数,静态导入,自动拆装箱,枚举等
增强for循环
书写格式:
* for(集合或者数组中的数据类型 变量名:集合或者数组的对象名){
* 输出变量名;
* }
*
* 增强for循环的弊端:
* 遍历数组或者集合的时候,数组对象或者集合对象不能为null
* 如果对象为空,一般加上非空判断
*
* 增强for循环的出现就是为了替代迭代器遍历集合的,以后开发中就是用增强for遍历元素

增强for只能进行遍历,无法获取单个元素.

package list;import java.util.ArrayList;import java.util.Iterator;import java.util.ListIterator;/** * 使用ArrayList集合存储自定义对象并遍历 *      几种方式呢: *          1)toArray() *          2)Collection集合的迭代器:Iterator iterator(); *          3)List集合的迭代器:ListIterator listiterator(); *          4)普通for循环:size()和get(int index)相结合 *          5)增强for循环 * @author Apple */public class ForDemo2 {    public static void main(String[] args) {        // 创建ArrayList集合        ArrayList<Student> array = new ArrayList<Student>();        // 创建学生对象        Student s1 = new Student("高圆圆", 27);        Student s2 = new Student("高圆圆", 20);        Student s3 = new Student("邓超", 29);        Student s4 = new Student("邓超", 25);        // 给集合中添加元素        array.add(s1) ;        array.add(s2) ;        array.add(s3) ;        array.add(s4) ;        //普通for循环:size()和get(int index)相结合        for(int x =0 ; x < array.size() ; x ++){            Student s = array.get(x) ;            System.out.println(s.getName()+"---"+s.getAge());        }        System.out.println("-----------------------");        //Collection集合的迭代器:Iterator iterator();        Iterator<Student> it = array.iterator() ;        while(it.hasNext()){            Student s = it.next() ;            System.out.println(s.getName()+"----"+s.getAge());        }        System.out.println("-----------------------");        //List集合的迭代器:ListIterator listiterator();        ListIterator<Student> lt=array.listIterator();        while(lt.hasNext()) {            Student st = lt.next() ;            System.out.println(st.getName()+"----"+st.getAge());        }        System.out.println("-----------------------");        //增强for遍历        for(Student s : array){            System.out.println(s.getName()+"----"+s.getAge());        }    }}

ArrayList的应用:集合去重
方法1:创建新集合
如果当前元素不包括在新集合中,则添加到新集合中
//3)创建一个新集合
ArrayList newArray = new ArrayList() ;

    //遍历旧集合,获取迭代器对象    Iterator it = array.iterator() ;    while(it.hasNext()){        Student s = (Student) it.next() ;               //判断新集合中是否包含这些对象        if(!newArray.contains(s)){            //不包含的对象才能添加新集合            newArray.add(s) ;        }    }

方法2:利用选择排序思想
将后面的元素和前面的元素比较,如果和前一个元素重复则从集合中移除后面索引对应的元素

for(int x = 0 ;x <array.size() -1 ; x ++){            for(int y= x +1 ; y <array.size() ;y++){                //判断                if(array.get(x).equals(array.get(y))){                    array.remove(y) ;                    y -- ;                }            }        }

注意:如果集合存储的是自定义对象,需要重写此自定义类的equals()方法

(2)Vector

package org.westos_02;import java.util.Enumeration;import java.util.Vector;/** * Vector:            底层数据结构是数组的形式,查询快,增删慢            从线程角度看:线程安全的类,同步,执行效率低    特有功能:            public void addElement(E obj)------->相当于:add(Object e)            public Enumeration<E> elements()----->相当于:Iterator iterator() ;            Enumeration<E>接口:向量的组件枚举有两个方法                    boolean hasMoreElements():------>相当于:hasNext()                    Object nextElement():----------->相当于:next();    源码:         synchronized:同步锁(多线程中讲):它就可以保证线程安全!     public synchronized void addElement(E obj) {//由同步代码块演变过来的同步方法             modCount++;            ensureCapacityHelper(elementCount + 1);            elementData[elementCount++] = obj;    } * @author Apple */public class VectorDemo {    public static void main(String[] args) {        //创建一个Vector集合对象        Vector v = new Vector() ;        //添加元素        //public void addElement(E obj)        v.addElement("hello");        v.addElement("hello");        v.addElement("world");        v.addElement("Java");        //public Enumeration<E> elements()----->相当于:Iterator iterator() ;        Enumeration en = v.elements() ;        //遍历元素        /**         * boolean hasMoreElements():------>相当于:hasNext()        Object nextElement():----------->相当于:next();         */        while(en.hasMoreElements()){            //获取元素            String s = (String)en.nextElement() ;            System.out.println(s);        }    }}   

(3)LinkedList:
底层数据结构是链接列表,特点:查询慢,增删快
从线程角度看:线程不安全的一个类,不同步,执行效率高

特有功能:    添加功能:        public void addFirst(E e)将指定元素插入此列表的开头。        public void addLast(E e)将指定元素添加到此列表的结尾。    获取功能:        public Object getFirst()返回此列表的第一个元素        public Object getLast()返回此列表的最后一个元素。    删除功能:        public Object removeFirst()移除并返回此列表的第一个元素。        public Object removeLast()移除并返回此列表的最后一个元素。
package org.westos_03;import java.util.LinkedList;/** * LinkedList:            底层数据结构是链接列表,特点:查询慢,增删快            从线程角度看:线程不安全的一个类,不同步,执行效率高    特有功能:        添加功能:            public void addFirst(E e)将指定元素插入此列表的开头。            public void addLast(E e)将指定元素添加到此列表的结尾。        获取功能:            public Object getFirst()返回此列表的第一个元素            public Object getLast()返回此列表的最后一个元素。        删除功能:            public Object removeFirst()移除并返回此列表的第一个元素。            public Object removeLast()移除并返回此列表的最后一个元素。 * @author Apple */public class LinkedListDemo {    public static void main(String[] args) {        //创建LinkedList集合        LinkedList link = new LinkedList() ;        //添加元素        link.addFirst("hello") ;        link.addFirst("world") ;        link.addFirst("Java") ;        //public void addFirst(E e)将指定元素插入此列表的开头        /*link.addFirst("android") ;        link.addLast("JavaWeb") ;*/        /**         * public Object getFirst()返回此列表的第一个元素            public Object getLast()返回此列表的最后一个元素。         */        /*        Object obj = link.getFirst() ;        System.out.println(obj);        Object obj2 = link.getLast() ;        System.out.println(obj2);*/        /**         * public Object removeFirst()移除并返回此列表的第一个元素。            public Object removeLast()移除并返回此列表的最后一个元素。         */        /*System.out.println("removeFirst:"+link.removeFirst());        System.out.println("removeLast:"+link.removeLast());*/        //输出集合        System.out.println("link:"+link);    }}