集合之List子实现类

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);
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值