ACAC LinkedList 和vector浅析

package LinkListed00;

/**
 * 链表的优点:
 *      由于链表上的元素在空间存储上内存地址不连续
 *      所以随机增删元素的时候不会有大量元素位移,因此随机增删效率较高
 *      在以后的开发中,如果遇到随机增删集合中元素的业务比较多时,建议使用LinkedList
 *
 *  缺点:
 *      不能通过数学表达式计算被查找元素的内存地址,每一次查找都是从头节点开始遍历
 *      直到找到为止,所以LinkedList集合检索/查找的效率较低
 *
 *      ArrayList:将检索发挥到极致
 *      LinkedList:把随机增删发挥到极致
 *      加元素都是往末尾添加,所以ArrayList用的比LinkedList的多
 */
public class Test01 {
    public static void main(String[] args) {

        /**
         * linkedList 集合底层也是有下标的
         * ArrayList之所以检索效率比较低,不是单纯因为下标的原因,是因为底层数组发挥的作用
         * LinkedList集合照样有下标,但是检索/查找某个元素的时候效率较低
         *  是因为只能从头节点一个一个遍历
         */

    }
}

package LinkListed00;

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

public class LinkLinkedList01 {

    public static void main(String[] args) {
        LinkedList aa = new LinkedList();

        aa.add("a");
        aa.add("b");
        aa.add("c");

        for (int i = 0; i < aa.size(); i++) {
            System.out.println(aa.get(i));
        }

        /**
         * LinkedList集合有初始化容量吗? 没有
         * 最初这个链表中没有任何元素,fist和last引用都是null
         * 不管LinkedList还是ArrayList,以后写代码时不需要关心具体是哪个集合
         * 因为面向接口编程,调用方法都是接口中的方法
         */

        //List list = new ArrayList(); 表示底层用数组
        List list = new LinkedList(); //表示底层用双向链表

        //以下这些方法都是面向的接口编程

        list.add("1");
        list.add("2");
        list.add("3");
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }


    }
}


package Vector;

import java.util.*;

/**
 * Vector:
 *      1、底层也是一个数组
 *      2、初始化容量: 10
 *      3。怎么扩容的?
 *          扩容后是原容量的二倍,10 -- 20 -- 40 --80
 *
 *      4、ArrayList集合扩容:
 *           原容量的1.5倍
 *      5、Vector中所有方法都是线程同步的,都带有synchronized关键字
 *          是线程安全的,效率比较低,用的较少。
 *
 *      6、怎么将一个线程不安全的ArrayList集合转换成线程安全的呢?
 *          使用工具类:
 *          java.util.Collections 集合工具类
 *          java.util.Collection  是集合接口
 *
 */
public class Note01 {
    public static void main(String[] args) {

        List aa = new Vector();

        for (int i = 0; i < 10; i++) {
            aa.add(i);
        }

        aa.add(11);

        Iterator it = aa.iterator();
        while(it.hasNext()){
            System.out.println(it.next());
        }


        //这个可能以后会使用
        List list = new ArrayList();
        //怎样变成线程安全的?
        Collections.synchronizedList(list);
        //这里没办法看效果,多线程没学,记住就行

        //list集合就是线程安全的
        list.add("111");
        list.add("333");

    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值