java——ArrayList和LinkedList的区别以及List的实现

ArrayList和LinkedList有什么区别:

  • 1.ArrayList底层结构是顺序表(基于数组);
    LinkList是链表;
  • 2.ArrayList数据存放在内存空间上;
    LinkList不是存放在连续的内存空间上;
  • 3.ArrayList能够高效的进行 “随机访问 ” ,按照下面操作时间复杂度是O(1);
  • 4.LinkList能够高效的进行插入删除,时间复杂度为O(1)
  • 5.ArrayList在初始化的时候,可以通过capacity参数指定最大容量,当add尾插的时候,如果元素个数小于capacity,此时就会触发扩容操作。
    LinkedList没有capacity这个概念,每次新插入一个元素,都去new一个特定的节点对象
  • 6.ArrayList比较害怕内存碎;
    LinkedList不怕

List代码实现

public class TestWrapperClass {
     
    public static void main(String[] args) {
     
        //实例化一个List
        List<String> list = new ArrayList<>();
        //新增
        list.add("1");
        list.add("2");
        list.add("3");
        list.add("4");
        list.add("5");
        //打印
        System.out.println(list);
        //使用下标访问
        //如果是ArrayList访问的,get/set按下标访问比较高效,时间复杂度O(1)
        //如果是LinkedList访问的,get/set按下标访问比较低效,时间复杂度O(n)
        System.out.println("==============");
        System.out.println(list.get(0));
        //修改
        list.set(0,"d");
        System.out.println(list);

        //截取部分内容
        System.out.println(list.subList(1,3));//前闭后开区间

        //重新构造一个list
        List<String> arrayList = new ArrayList<>(list);
        List<String> linedkList = new LinkedList<>(list);
        System.out.println("=====相当于复制了List======");
        //是改变原来的list的值,新生成的链表的值不会变化,所以是深拷贝
        System.out.println(arrayList);
        System.out.println(linedkList);
        //向下转型
        ArrayList<String> arrayList1 = (ArrayList<String>)list;
    }

你可能感兴趣的:(java)