Collection子接口的List接口

List接口下的ArrayList、LinkedList、Vector实现的练习


import org.junit.Test;

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

/**
 *
 * Collection子接口:
 *      |----List接口:存储有序的、可重复的数据 ——>“动态”数组,替换原有的数组
 *           |----ArrayList:作为List接口的主要实现类,线程不安全的,效率高;底层使用Object[]存储。
 *           |----LinkedList:对于频繁的增删改操作,使用此类效率高,底层使用双向链表存储。
 *           |----Vector:作为List接口的古老实现类,线程安全的,效率低;底层使用Object[]存储。
 *
 *     ArrayList的源码分析:
 *          ArrayList list = new ArrayList();//底层Object[] elementData初始化为{},并未创建长度
 *          list.add(123);//第一次调用add()时,底层才创建长度为10的数组,并添加数据
 *          ...
 *          list.add(11);//如果此次添加底层elementData数组容量不够,则扩容1.5倍
 *
 *     LinkedList的源码分析:
 *          LinkedList list = new LinkedList(); 内部为双端链表操作,声明了一个Node类型并有一个头节点
 *          与尾节点。
 *
 *          //Node类型的定义
 *         private static class Node<E> {
 *         E item;
 *         Node<E> next;
 *         Node<E> prev;
 *
 *         Node(Node<E> prev, E element, Node<E> next) {
 *             this.item = element;
 *             this.next = next;
 *             this.prev = prev;
 *         }
 *      }
 *
 *      Vector的源码分析:
 *          扩容为2倍
 *
 *    1、ArrayList、LinkedList、Vector三者的异同
 *    同:
 *    三个类都实现了List接口,存储数据的特点相同:存储有序的、可重复的数据
 *    不同:
 *
 *
 *    2、List接口的常用方法
 *
 * @Author Sinch
 * @create 10/11/2020 5:31 PM
 */
public class ListTest {
    
    

    /**
     * 总结: 常用方法
     */

    @Test
    public void test3(){
    
    
        List list = new ArrayList();
        list.add(1);
        list.add(2);
        list.add(3);
        list.remove(new Integer(2));
        System.out.println(list);
    }

    @Test
    public void test2(){
    
    
        ArrayList list = new ArrayList();
        list.add(123);
        list.add(456);
        list.add("AA");
        list.add(new String("Tom"));
        list.add(new Person("sch",20));
        int index = list.indexOf(123);
        System.out.println(index);

        int lastIndex = list.lastIndexOf(123);
        System.out.println(lastIndex);

        System.out.println(list.remove(0));
        System.out.println(list);
        list.set(1,"CC");
        System.out.println(list);

        List result = list.subList(1,4);
        System.out.println(result);

    }

    @Test
    public void test1(){
    
    
        ArrayList list = new ArrayList();
        list.add(123);
        list.add(456);
        list.add("AA");
        list.add(new String("Tom"));
        list.add(new Person("sch",20));

        System.out.println(list);
        list.add(1,"BB");
        System.out.println(list);
        List list1 = Arrays.asList(1,2,3);
        list.add(list1);
        System.out.println(list);
        System.out.println(list.size());
        list.addAll(1,list1);
        System.out.println(list + ":" + list.size());
    }
}

猜你喜欢

转载自blog.csdn.net/qq_45830383/article/details/109019425