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());
}
}