ACAC List常用方法(ArrayList)

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

/**
* 测试List接口常用方法:
*   1.List集合存储元素特点:有序可重复
*       有序:List集合中的元素有下标,从0开始,以1递增
*       可重复:存储一个1,还可再存储1
*   2、List是Collection接口的子接口,有自己的特有方法:
*      常用的特有的方法:
*       void add(int index, E element) 在列表中指定的位置上插入指定的元素(可选操作)。
*       E get(int index)返回此列表中指定位置的元素。
*       int indexOf(Object o) 返回此列表中指定元素的第一个出现的索引,或-如果此列表不包含元素,或- 1
*       int lastIndexOf(Object o) 返回此列表中指定元素的最后一个发生的索引,或-如果此列表不包含元素,或- 1。
*       E remove(int index) 移除此列表中指定位置的元素(可选操作)。
*       E set(int index, E element) 用指定元素替换此列表中指定位置的元素(可选操作)。
*/
public class ListTest01 {
    public static void main(String[] args) {
        List myList = new ArrayList();

        myList.add(12);
        myList.add(13);
        myList.add(14);
        myList.add(12);

        myList.add(1,99);
        //用的不多,涉及到数组位移的问题,效率不高

        System.out.println("获取下标为1的元素: " +myList.get(1));

        Iterator it = myList.iterator();
        while (it.hasNext()){
            System.out.print(" " + it.next());
        }


        System.out.println("\n--------------");
        for (int i = 0; i < myList.size(); i++) {
            //System.out.println(myList[i]);不能这样写
            System.out.print(" " + myList.get(i));
        }
        /**
         * list特有的方式,Set没有
         * 有下标,所以List有自己特殊的遍历方式
         */

        System.out.println("\n---------------");
        System.out.println("获取第一次出现的索引: " + myList.indexOf(12));
        System.out.println("获取最后一次出现的索引: " + myList.lastIndexOf(12));

        System.out.println("----------------");
        myList.set(0,"werwt");
        Iterator it2 = myList.iterator();
        while (it2.hasNext()){
            System.out.print(" " + it2.next());
        }

        System.out.println("\n----------------");
        myList.remove(0);
        for (int i = 0; i < myList.size(); i++) {
            //System.out.println(myList[i]);不能这样写
            System.out.print(" " + myList.get(i));
        }


        /**
         * 计算机英语:
         *  增删改查:
         *      增:add,save,new
         *      删:delete,drop,remove
         *      改:update,set,modify
         *      查:find,get,query,select
         */


    }
}

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

/*
*   ArrayList集合:
*       1、默认初始化容量是10(底层先创建一个长度为0的数组,当添加第一个元素的时候,初始化容量10)
*       2、集合底层是一个Object【】数组
*       3、构造方法:
*           new ArrayList()
*       4、ArrayList的扩容:
*            原容量的1.5倍
*            ArrayList集合底层是数组,怎么优化?
*               尽肯能少的扩容,因为数组扩容效率比较低,建议使用ArrayList集合的时候
*               预估元素的个数,给定一个初始化的容量
*       5、数组的优点:检索效率比较高
*       (每个元素占用空间大小相同,内存地址连续的,知道首元素内存地址,知道下标
*        可以计算出元素的内存地址,所以检索效率最高)
*       6、数组的缺点:随机增删元素效率比较低
*          数组无法存储大数据量,很难找到一块大的连续内存空间
*       7、注意:想数组末尾添加元素,效率还是很高的
*       8、这么多集合中,你用哪个集合最多?
*           ArrayList 因为:往数组末尾添加元素,效率不受影响
*           另外,我们查找/检索某个元素的操作比较多
*       9、ArrayList是非线程安全的
* */
public class ListTest02 {
    public static void main(String[] args) {

        List list = new ArrayList();
        System.out.println(list.size());
        //size获取的是集合中元素的个数,不是集合的容量,这两个个数都是0


        List list1 = new ArrayList(20);
        System.out.println(list1.size());

        /**
         * 100 二进制装换成10进制:0000 0100右移一位 0000 0010(2) 【4/2】
         * 原先是4 现在增长2 ,增长之后的容量是之前容量的1.5倍
         *
         * 这个地方有一个位运算: >>  <<
         * >>1 左移一位  0000 1010 --> 0000 0101 (10 --> 5)
         * 1<< 右移一位  0001 0100 (10 --> 20)
         *
         * 左移一位就是除以2的1次方
         * 右移一位就是乘以2的1次方
         * 依次类推
         *
         * int newCapacity = ArraysSupport.newLength(oldCapacity,
         *                     minCapacity - oldCapacity,
         *                     oldCapacity >> 1
         *
         */


    }
}

已标记关键词 清除标记