AyyayList集合

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

案例1:

package com.javaSe.List;


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集合。因为往数组末尾添加元素,效率不受影响。另外,我们检索/查找某个元素的操作比较多。
*/
public class ArrayListTest01 {
    public static void main(String[] args) {
        // 默认初始化容量是10
        // 数组的长度是10
        List list1 = new ArrayList();
        System.out.println(list1.size());//0
        
        // 集合的size()方法是获取当前集合中元素的个数。不是获取集合的容量。
        // 数组的长度是20
        List list2 = new ArrayList(20);
        System.out.println(list2.size());//0
        
        list1.add(1);
        list1.add(2);
        list1.add(3);
        list1.add(4);
        list1.add(5);
        list1.add(6);
        list1.add(7);
        list1.add(8);
        list1.add(9);
        list1.add(10);
    
        System.out.println(list1.size());
        
        // 在加一个元素
        list1.add(11);
        
        /*
        int newCapacity = ArraysSupport.newLength(oldCapacity,minCapacity - oldCapacity,oldCapacity >> 1 );
         */
        
        // 100 二进制转换成10进制:0000100右移一位 0000010(2) 【4/2】
        // 原来是4、现在增长:2 增长之后是6,增长之后的容量是之前容量的:1.5倍
        // 6是原来4的1.5倍。
    }
}

 

集合ArrayList的构造方法:

package com.javaSe.List;


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();
        
        // 指定初始化容量100
        List list1 = new ArrayList(100);
        
        // 创建一个HashSet集合
        Collection c = new HashSet();
        c.add(100);
        c.add(200);
        c.add(300);
        c.add(400);
        
        // 通过这个构造方法就可以将HashSet集合转换成List集合。
        List list3 = new ArrayList(c);
        for (int i = 0; i < list3.size(); i++) {
            System.out.println(list3.get(i));
        }
        
    }
}

 

位运算符:

package com.javaSe.List;


/*
位运算符 >>
*/
public class BinaryTest {
    public static void main(String[] args) {
        // 5
        // >> 1 二进制右移1位。
        // >> 2 二进制右移2位。
        // 10的二进制位是:00001010 [10]
        // 10的二进制右移一位是:00000101 [5]
        System.out.println(10 >> 1);// 右移1位就是除以2
        
        // 二进制位左移1位
        // 10的二进制位是:00001010 [10]
        // 10的二进制右移一位是:000010100 [20]
        System.out.println(10 << 1);
    }
}

 

posted @ 2020-08-01 17:28  xlwu丶lz  阅读(320)  评论(0编辑  收藏  举报