javase-collection-210620-01

本文详细介绍了Java中的List接口及其实现类ArrayList,包括List的特点、常用方法,如add、get、indexOf等,并展示了ArrayList的初始化、扩容机制、遍历方式以及元素修改操作。还提及ArrayList在数组基础上的优势和不足,以及在实际开发中的应用场景。

javase-collection-210620-01

  • List
  • ArrayList

ListTest01.java

package bgy_list_01;

import java.util.*;

/*
    1. List
        特点:  有序可重复
            1)有序:List集合中的元素有下标   从0开始,以1递增
            2)可重复:存一个‘bgy’,还能再存一个‘bgy’

    2. List是Collection的子接口
        List接口特有常用方法:
            void add(int index, E element)
            Object get(int index)
            int indexOf(Object o)
            int lastIndexOf(Object o)
            Object remove(int index)
            Object set(int index , Object element)
 */
public class ListTest01 {
    public static void main(String[] args) {
        // List集合可以创建的类型
//        List myList01 = new LinkedList();
//        List myList02 = new Vector();
        List myList = new ArrayList();

        myList.add("a");
        myList.add("b");
        myList.add("c");
        myList.add("d");

        /*
         这个方法对于ArrayList来说,效率比较低
         第一个参数为下标,第二个参数为插入元素
         */
        myList.add(0,"bgy");

        Iterator it = myList.iterator();

        while (it.hasNext()) {
            Object o = it.next();
            System.out.println(o);
        }
        System.out.println("========================================================");

        /*
            根据下标获取元素
         */
        Object firstObject = myList.get(0);
        System.out.println(firstObject);
        System.out.println("========================================================");


        /*
            因为有下标,所以List集合会有自己的特殊的遍历方式
            通过下标遍历,,,List集合特有,Set就没有了
         */
        for (int i = 0; i < myList.size(); i++) {
            Object obj = myList.get(i);
            System.out.println(obj);
        }
        System.out.println("========================================================");


        /*
            获取指定对象第一次出现处的索引
         */
        System.out.println(myList.indexOf("b"));
        /*
            获取指定对象最后一次出现处的索引
         */
        System.out.println(myList.lastIndexOf("c"));
        System.out.println("========================================================");


        /*
            修改指定位置元素
         */
        myList.set(2,"xiugai");
        for (int i = 0; i < myList.size(); i++) {
            Object obj = myList.get(i);
            System.out.println(obj);
        }
        System.out.println("========================================================");
    }
}

ArrayListTest01.java

package bgy_ArrayList_01;

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,
                因为往数组末尾添加元素,效率不受影响
                另外,我们 检索 / 查找 某个元素的操作比较多
                
        9. ArrayList集合不是线程安全的集合。。。

 */
public class ArrayListTest01 {
    public static void main(String[] args) {

        // 默认初始容量为10
        List list01 = new ArrayList();
        // size()是获取当前集合中的元素个数,不是获取集合的容量
        System.out.println(list01.size());    // 0

        // 指定集合初始化容量为20
        List list02 = new ArrayList(20);
        System.out.println(list02.size());    // 0
    }
}

ArrayListTest02.java

package bgy_ArrayList_01;

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) {
        List list01 = new ArrayList();
        List list02 = new ArrayList(22);

        Collection c = new HashSet();
        c.add(1);
        c.add(2);
        c.add(3);
        c.add(4);

        /*
            通过这个构造方法一个将HashSet集合转化为List集合
         */
        List list03 = new ArrayList(c);
        for (int i = 0; i < list03.size(); i++) {
            Object o = list03.get(i);
            System.out.println(o);
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值