Java基础知识之ArrayList集合

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

/**
 * ArrayList集合:
 *     1、默认初始化容量10(底层先创建了一个长度为0的数组,当添加第一个元素的时候,初始化容量10。)
 *     2、集合底层是一个Object[]数组。
 *     3、构造方法:
 *         new ArrayList();
 *         new ArrayList(20);
 *     4、ArrayList集合的扩容:
 *         增长到原容量的1.5倍。
 *         ArrayList集合底层是数组,怎么优化?
 *             尽可能少的扩容。因为数组扩容效率比较低,建议在使用ArrayList集合
 *             的时候预估计元素的个数,给定一个初始化容量。
 *     5、数组优点:
 *         检索效率比较高。(每个元素占用空间大小相同,内存地址是连续的,知道首元素内存地址,
 *         然后知道下标,通过数学表达式计算出元素的内存地址,所以检索效率最高。)
 *     6、数组缺点:
 *         随机增删元素效率比较低。
 *         另外数组无法存储大数据量。(很难找到一块非常巨大的连续的内存空间。)
 *     7、向数组末尾添加元素,效率很高,不受影响。
 *     8、面试官经常问的一个问题?
 *         这么多的集合中,你用哪个集合最多?
 *             答:ArrayList集合。
 *             因为往数组末尾添加元素,效率不受影响。
 *             另外,我们检索/查找某个元素的操作比较多。
 *
 *     7、ArrayList集合是非线程安全的。(不是线程安全的集合。)
 */
public class ArrayListTest01 {
    public static void main(String[] args) {
        // 默认初始化容量是10
        // 数组的长度是10
        List list =new ArrayList();
        // 集合的size()方法是获取当前集合中元素的个数。不是获取集合的容量。
        System.out.println(list.size());//0

        // 指定初始化容量
        // 数组的长度是10
        List list1=new ArrayList(10);

        for(int i=1;i<=10;i++){
            list.add(i);
        }

        // 再加一个元素,此时超出初始容量,自动扩容
        System.out.println(list.size());
        list.add(11);
         /*
        int newCapacity = ArraysSupport.newLength(oldCapacity,minCapacity - oldCapacity,oldCapacity >> 1);
         */
        // 100 二进制转换成10进制: 00000100右移一位 00000010 (2)  【4 / 2】
        // 原先是4、现在增长:2,增长之后是6,增长之后的容量是之前容量的:1.5倍。
        // 6是4的1.5倍
        System.out.println(list.size());
    }
}

 

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;

/**
 * 集合ArrayList的构造方法
 */
public class ArrayListTest02 {
    public static void main(String[] args) {
        //默认初始化容量10
        List list=new ArrayList();
        //指定初始化容量为20
        List list1=new ArrayList(20);

        //创建一个HashSet集合
        Collection c=new HashSet();
        c.add(1);
        c.add(2);

        //通过构造方法可以将HashSet集合转换成List集合
        List list2=new ArrayList(c);
        for(int i=0;i<list2.size();i++){
            System.out.println(list2.get(i));
        }
    }
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值