集合中List的ArrayList和LinkedList

1.ArrayList扩容

  1. 新数组长度 = 原数组长度/2+原数组长度
  2. 添加元素 add()
  3. 采用addAll(),添加元素,由于添加的是一个集合,所以第一次扩容的时候,应该在 扩容的默认长度和元素个数,选一个较大值。

2. 扩容机制总结

  1. ArrayList()会使用长度为0的数组
  2. ArrayList( int   initialCapacity) 会使用指定容量得数组  
  3. ArrayList(集合)  使用集合大小作为数组初始容量   
  4. add(Object o) 首次扩容为10,再次扩容为之前的1.5倍 
  5. addAll(Collection c)  没有元素的时候,扩容为Math.max(10,实际元素个数),有元素时为Math.max(原容量1.5倍,实际元素个数)

3.ArrayList 

  1. 底层是基于数组的,需要连续的内存
  2. 随机访问快,通过数组下标查询
  3. 尾部增删快,其他慢
  4. 线程不安全,效率高

4.ArrayList的成员方法 ,以及创建方式

package cn.sxau;

import java.util.ArrayList;

public class Java_List_ArrayList {
    public static void main(String[] args) {
        /**
         * 三种创建集合对象方式:
         *       ArrayList list1 = new ArrayList(); //无需传递构造参数,底层数组为空数组
         *       ArrayList list2 = new ArrayList(3); //构造参数需要传递一个int类型的值,用于设定底层数组的长度
         *       ArrayList list3 = new ArrayList(list1)构造参数需要传递一个Collection类型的值,用于将其他集合中数据放置在当前集合中
         */
        ArrayList arrayList = new ArrayList();
        /**
         * 方法:添加元素
         *      1.add("数据"),添加数据,当超过指定数组长度,数组自动扩容;
         *      2.add("索引","数据")当索引重复,被重复的向后移动一位
         *      3.addAll(collection)增加一个集合中数据
         */
        arrayList.add(0,"zhansan");
        System.out.println(arrayList);
        /**
         * 查询:
         *      1.get("索引"),获取指定位置的数据
         *      2.size(),获取集合中数据条数
         *      3.indexOf("数据")获取数据在集合中位置,如果该数据重复,返回第一次出现的位置,如果没有该数据返回-1
         *      4.lastIndexOf("数据")获取数据最后一次出现的位置
         */
        System.out.println(arrayList.indexOf("zhansan"));
        /**
         * 修改:
         *       1.set("索引","数据")修改数据,  返回修改之前的数据
         */
        System.out.println(arrayList.set(0, "王五"));
        System.out.println(arrayList);
        /**
         * 删除:
         *        1.remove("索引")删除数据,返回删除之前的数据
         *        2.clear()清空数据
         *        3.removeAll()删除指定集合中所有数据
         */
        System.out.println(arrayList.remove(0));
        System.out.println(arrayList);
        /**
         * 包含:
         *          contains("数据")判单集合中是否包含该数据
         * 判断
         *          isEmpty()判断改集合是否为空
         */
        System.out.println(arrayList.contains("zhansan"));
        System.out.println(arrayList.isEmpty());

    }
}

5.LinkedList

  1. 底层是一个双向链表,无需连续的内存 

  2. 随机访问慢,更具链表遍历

  3. 头尾插入删除快

  4. 线程不安全,效率高

6.LinkedList的成员方法 ,以及创建方式 

package cn.sxau.Collection;

import java.util.LinkedList;

public class java_List_LinkedList {
    public static void main(String[] args) {
        /**
         * 创建集合对象方式:
         *       1.LinkedList list1 = new LinkedList();无需传递构造参数
         *       2.LinkedList list2 = new LinkedList(list2);传递一个集合
         */
        LinkedList linkedList = new LinkedList();
        /**
         * 添加:
         *       list.add("zhangsan"); //添加数据,放置在最后
         *       list.addFirst("数据"); //添加到最前面
         *       list.addLast("数据");//添加到最后
         *       list.add("","数据");//通过索引,添加数据
         *       list.add(集合)
         *       push("数据");//添加数据,直接添加到最前面
         */
        linkedList.addFirst("张三");
        linkedList.add("王五");
        System.out.println(linkedList);
        /**
         * 查询
         *       list.get("索引");
         *       list.getFirst();
         *       list.getLast();
         *       element();//获取第一个数据
         */
        System.out.println(linkedList.element());
        System.out.println(linkedList.get(0));
        /**
         * 修改:
         *       set("索引","数据") 返回被修改的值;
         */
        System.out.println(linkedList.set(0, "哈哈哈"));
        System.out.println(linkedList);
        /**
         *  删除
         *       remove();
         *       removeFirst();
         *       removeLast();
         *       pop();弹出第一个数据,并返回
         */
        System.out.println(linkedList.pop());
        /**
         * ArrayList有的方法,LinkedList基本也有
         */

    }
}

 

7.List接口

  1. List接口继承collection父类接口

  2. List的实现类有ArrayList和LinkedList

  3. List中元素有序,可重复。

  4. List存储的是单列数据的集合

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值