ArrayList 集合

public class ArrayListTest {
    public static void main(String[] args) {
        /** ArrayList 集合
         *  1.底层是Object[]数组
         *  2.默认初始化容量为10(刚创建出来容量为0,add第一个元素后扩容为10)
         *  3.构造方法
         *    new ArrayList();
         *    new ArrayList(20);
         *    new ArrayList(hashSet);
         *  4.ArrayList 集合的扩容
         *     int newCapacity = oldCapacity + (oldCapacity >> 1);
         *    增长到原容量的1.5倍(Vector是2倍)
         *    ArrayList的底层是数组,怎么优化?
         *     尽可能减少扩容,因为数组的扩容效率比较低,所以建议在使用ArrayList时,
         *     给定一个合适的初始化容量,减少扩容次数.
         *  5.数组的优点:
         *    检索的效率比较高.(每个元素占用的空间大小相同,内存地址是连续的,知道首元素的地址,
         *    然后知道下标,就可以通过数学表达式计算出其他内存地址,所以检索效率高)
         *  6.数组的缺点:
         *    指定位置增删元素效率低(非末尾)
         *    数组无法存储大数据量(因为很难找到一块非常巨大的连续的内存空间)
         *  7.向数组末尾增删元素效率很高,不受影响
         *  8.这么多的集合,我们最常用的集合是哪个?
         *    ArrayList集合,因为我们通常是往数组末尾添加元素,效率不受影响
         *    另外,我们查找元素的操作比较多
         *  9.ArrayList是非线程安全的 可通过Collections.synchronizedList(ArrayList list)变成线程安全的.
         */
         //默认0,添加第一个元素时,指定容量为10
        List myList1 = new ArrayList();
        //指定容量
        List myList2 = new ArrayList(100);
        //变成线程安全
        Collections.synchronizedList(myList2);

        Set hashSet = new HashSet();
        hashSet.add(100);
        hashSet.add(200);
        hashSet.add(150);
        hashSet.add(50);
        //将HashSet集合转成ArrayList集合
        List myList3 = new ArrayList(hashSet);
        for (int i = 0; i < myList3.size(); i++) {
            System.out.println(myList3.get(i));//50 100 150 200
        }
    }
}
posted @ 2020-12-06 22:10  阿灿呀  阅读(69)  评论(0)    收藏  举报