集合框架&List接口

List接口实现类:ArrayList、Vector、LinkedList类

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Vector;

/**
    Collection接口:用于存储单个对象的集合
    子接口:List  Set
    List接口:
    1、有序的,可以重复 
    2、允许多个null元素
    3、具体的实现有常用的实现类:ArrayList,Vector,LinkedList
    
    在实际开发中,我们如何选择List的具体实现类?
    1、安全性问题(一般Vector)
    2、是否频繁插入,删除操作(LinkedList)
    3、是否是存储后直接遍历(一般ArrayList)
    
 */


public class ListDemo {
    public static void main(String[] args) {
        //arraylistDemo();
        //vector();
        linkedlist();
    }
    
    
    /**
     *  面试题:ArrayList 和 Vector的区别?
     */
    
    
    /**
     * ArrayList
     * 1、实现原理:采用动态对象数组实现,默认构造方法创建了一个空数组
     * 2、第一次添加元素,扩充容量为10,之后的扩充算法:原来数组大小+原来数组的一半
     * 3、不适合进行删除或者插入操作
     * 4、为了防止数组动态扩充次数过多,建议创建ArrayList时给定初始容量
     * 5、多线程使用不安全,适合在单线程访问时使用,效率较高(JDK1.2之后开始引用)
     */
    public static void arraylistDemo() {
        //使用集合类存储多个不同类型的元素(对象),那么在处理时会比较麻烦,在实际开发中不建议
        //建议:应该在一个集合中存储相同的类型对象:使用<String> 指定泛型
        List<String> list = new ArrayList<>();
        list.add("方老师");//添加
        list.add("苍老师");
        list.add("胡老师");
        //list.add(10);  指定泛型<String>后,即不能添加整型的数值了
        int size = list.size();  //先将list.size()求出存于临时变量,临时变量进栈,这样在每次for循环时不用再做一次list.size()节省性能
        for(int i=0;i<size;i++) {
            System.out.println(list.get(i));
        }
        
        System.out.println(list.contains("胡老师"));    //判断是否包含
        list.remove("方老师");                          //删除
        String[] array = list.toArray(new String[] {});//转换成数组,参数为数组类型对象
        for(String f:array) {                          //转换成数组后就可以使用foreach()遍历了
            System.out.println(f);
        }
        
    }
    
    
    /**
     * Vector实现类
     * 1、实现原理:采用动态对象数组实现,默认构造方法创建了一个大小为10的对象数组
     * 2、扩充的算法:当增量为0时,扩充为原来大小的2倍;当增量大于0时,扩充为原来大小+增量
     * 3、不适合删除或插入操作
     * 4、为了防止数组动态扩充次过多,建议创建Vector时,给定初始容量
     * 5、线程安全的,适合在多线程访问时使用,但是在单线程时效率较低
     */
    public static void vector() {
        Vector<String> v = new Vector<>();
        v.add("方老师");
        v.add("苍老师");
        v.add("胡老师");
        int size=v.size();
        for(int i=0;i<size;i++) {
            System.out.println(v.get(i));
        }
    }
    
    
    /**
     * LinkedList
     * 1、实现原理:采用双向链表结构实现
     * 2、适合插入,删除操作,性能高
     */
    
    public static void linkedlist() {
        LinkedList<String> list = new LinkedList<>();
        list.add("方老师");
        list.add("苍老师");
        list.add("胡老师");
        int size = list.size();
        for(int i=0;i<size;i++) {
            System.out.println(list.get(i));
        }
    }
    
    

}

猜你喜欢

转载自blog.csdn.net/weixin_33871366/article/details/87073887