List接口的常见实现ArrayList Vector LinkedList

List接口的典型实现
ArrayList
可调整大小的数组的实现List接口。 实现所有可选列表操作,并允许所有元素,包括null 。 除了实现List 接口之外,该类还提供了一些方法来操纵内部使用的存储列表的数组的大小。 (这个类是大致相当于Vector,不同之处在于它是不同步的)。
Vector
Vector类实现了可扩展的对象数组 他是同步的
LinkedList
双链表实现 并允许所有元素(包括null ) 此实现不同步
数据结构:

指的是数据在计算机中存储的结构及存储的方式.
结构1 : 数组
在内存中是连续存储的 可以通过索引来访问到数组中的每一个元素

结构2 : 栈
栈的特点: 先进后出
在这里插入图片描述
结构3:队列
在这里插入图片描述
结构4:链表:单向链表 双向链表 循环链表
链表在计算机中的存储的地址是不连续
单向链表
在这里插入图片描述
双向链表
在这里插入图片描述
数组和链表的区别:
数组:查询效率高 插入 删除 都包含了移位操作 因此效率低
链表:查找效率低 插入 删除 效率高
二叉树
在这里插入图片描述
前序遍历:根左右
后序遍历:左右根
中序遍历:左根右
红黑树:

ArrayList的 实现
底层实现使用的是数组 数组的默认容量为10
在这里插入图片描述

在这里插入图片描述
添加的方式
在这里插入图片描述
扩容机制
在这里插入图片描述
在这里插入图片描述

    public static void main(String[] args) {
        // 在实际使用中  都是用的多态的形式
        List list = new ArrayList();
        Student st1 = new Student("张三",20);
        Student st2 = new Student("李四",22);
        list.add(st1);
        list.add(st2);
        //进行遍历
//        for(int i = 0 ; i < list.size();i++){
//           Object obj =  list.get(i);
//            System.out.println(obj);
//        }
        //增强for
//        for (Object  obj : list){
//            System.out.println(obj);
//        }
        //使用迭代器
        Iterator iter = list.iterator();
        while(iter.hasNext()){
            Object obj = iter.next();
            System.out.println(obj);
        }
    }


Vector
在这里插入图片描述
Vector的默认容量也是10
LinkedList
LinkedList底层实现是双向链表
在这里插入图片描述
添加元素
在这里插入图片描述
头插法的实现
在这里插入图片描述
尾插法
在这里插入图片描述
默认采用尾插法

public static void main(String[] args) {
    LinkedList  list = new LinkedList();
    Student st1 = new Student("张三",20);
    Student st2 = new Student("李四",22);
    Student st3 = new Student("王五",23);
    Student st4 = new Student("赵四",22);
    list.add(st1);
    list.add(st2);
    list.add(st3);
    list.add(st4);
    Iterator iter = list.iterator();
    while(iter.hasNext()){
        Object obj = iter.next();
        System.out.println(obj);
    }
    System.out.println("------------------");
    Object first = list.getFirst();//获取头节点
    System.out.println(first);
    Object last = list.getLast();//获取尾节点
    System.out.println(last);
}


Vector和ArrayList的使用场景
 在多线程的环境中使用Vector
 在不需要保证数据同步的时候 优先使用ArrayList
因为Vector的效率较ArrayList低
在开发中 一般都 使用ArrayList

ArrayList 和LinkedList的使用场景.
 如果数据查询的频率高 而删除和插入的频率低 则使用ArrayList
 如果查询的频率低 而删除和插入的频率高 则使用LinkedList

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值