Java基础进阶List-ArrayList集合

简介: Java基础进阶List-ArrayList集合

1、List接口中的常用方法。

List是Collection接口的子接口。所以List接口中有一些特有的方法。


void add(int index, Object element)
Object set(int index, Object element)
Object get(int index)
int indexOf(Object o)
int lastIndexOf(Object o)
Object remove(int index)


2、迭代器迭代元素的过程中不能使用集合对象的remove方法删除元素,

要使用迭代器Iterator的remove方法来删除元素,防止出现异常:


ConcurrentModificationException


3、ArrayList集合:


(1)默认初始化容量10(底层先创建了一个长度为0的数组,当添加第一个元素的时候,初始化容量10。)

(2)集合底层是一个Object[]数组。

(3)构造方法:


new ArrayList();
new ArrayList(20);


(4)ArrayList集合的扩容:


增长到原容量的1.5倍


源码:int newCapacity = ArraysSupport.newLength(oldCapacity,minCapacity - oldCapacity,oldCapacity >> 1)


ArrayList集合底层是数组,怎么优化?


尽可能少的扩容。因为数组扩容效率比较低,建议在使用ArrayList集合的时候

预估计元素的个数,给定一个初始化容量


(5)数组优点:


检索效率比较高。(每个元素占用空间大小相同,内存地址是连续的,知道首元素的内存地址,然后知道下标,通过数学表达式计算出元素的内存地址,所以检索效率较高)

(6)数组缺点:


随机增删元素的效率比较低

另外数组无法存储大数据量(很难找到一块非常巨大的连续的内存空间)

(7)向数组末尾添加元素,效率比较高,不受影响


(8)面试题


使用最多的集合是哪一个?

是ArrayList集合,因为往数组末尾添加元素,效率不受影响

另外,此数组检索/查找某个元素的操作比较多

(9)ArrayList集合是非线程安全的(不是线程安全的集合)


示例代码01:


public class ArrayListTest01 {
    public static void main(String[] args) {
        // 默认初始化容量是10
        // 数组的长度是10
        List l1 = new ArrayList();
        System.out.println(l1.size());//0 size方法是求出集合中的元素有多少,并不是求容量
        // 指定初始化容量
        // 数组的长度是20
        List l2 = new ArrayList(10);
        System.out.println(l2.size());//0
        l2.add(1);
        l2.add(2);
        l2.add(3);
        l2.add(4);
        l2.add(5);
        l2.add(6);
        l2.add(7);
        l2.add(8);
        l2.add(9);
        l2.add(10);
        System.out.println(l2.size());//10
        l2.add(11);
        System.out.println(l2.size());//11
        /*
        * int newCapacity = ArraysSupport.newLength(oldCapacity,minCapacity - oldCapacity,oldCapacity >> 1)
        * 100 二进制转换为10进制:00000100右移一位 00000010【4 / 2】
        * 原先是4、现在增长:2,增长之后是6,增长之后的容量是之前容量的1.5倍
        * */
    }
}


示例代码02:


/*
集合ArrayList的构造方法
 */
public class ArrayListTest02 {
    public static void main(String[] args) {
        //初始化容量是10
        List i2 = new ArrayList();
        //自定义容量20
        List i1 = new ArrayList(100);//数组长度是110
        //创建HashSet集合
        Collection c = new HashSet();
        c.add(500);
        c.add(50);
        c.add(400);
        c.add(100);
        //把HashSet集合放到List集合中,就变成了List集合
        List i3 = new ArrayList(c);
        for(int i=0;i<i3.size();i++){
            System.out.println(i3.get(i));
        }
    }
}
相关文章
|
1月前
|
Java 大数据 API
Java Stream API:现代集合处理与函数式编程
Java Stream API:现代集合处理与函数式编程
193 100
|
1月前
|
Java API 数据处理
Java Stream API:现代集合处理新方式
Java Stream API:现代集合处理新方式
215 101
|
1月前
|
算法 Java
50道java集合面试题
50道 java 集合面试题
|
19天前
|
存储 算法 安全
Java集合框架:理解类型多样性与限制
总之,在 Java 题材中正确地应对多样化与约束条件要求开发人员深入理解面向对象原则、范式编程思想以及JVM工作机理等核心知识点。通过精心设计与周密规划能够有效地利用 Java 高级特征打造出既健壮又灵活易维护系统软件产品。
51 7
|
18天前
|
存储 Java 索引
(Python基础)新时代语言!一起学习Python吧!(二):字符编码由来;Python字符串、字符串格式化;list集合和tuple元组区别
字符编码 我们要清楚,计算机最开始的表达都是由二进制而来 我们要想通过二进制来表示我们熟知的字符看看以下的变化 例如: 1 的二进制编码为 0000 0001 我们通过A这个字符,让其在计算机内部存储(现如今,A 字符在地址通常表示为65) 现在拿A举例: 在计算机内部 A字符,它本身表示为 65这个数,在计算机底层会转为二进制码 也意味着A字符在底层表示为 1000001 通过这样的字符表示进行转换,逐步发展为拥有127个字符的编码存储到计算机中,这个编码表也被称为ASCII编码。 但随时代变迁,ASCII编码逐渐暴露短板,全球有上百种语言,光是ASCII编码并不能够满足需求
85 3
|
1月前
|
存储 Java Go
对比Java学习Go——函数、集合和OOP
Go语言的函数支持声明与调用,具备多返回值、命名返回值等特性,结合`func`关键字与类型后置语法,使函数定义简洁直观。函数可作为一等公民传递、赋值或作为参数,支持匿名函数与闭包。Go通过组合与接口实现面向对象编程,结构体定义数据,方法定义行为,接口实现多态,体现了Go语言的简洁与高效设计。
|
2月前
|
存储 缓存 安全
Java集合框架(二):Set接口与哈希表原理
本文深入解析Java中Set集合的工作原理及其实现机制,涵盖HashSet、LinkedHashSet和TreeSet三大实现类。从Set接口的特性出发,对比List理解去重机制,并详解哈希表原理、hashCode与equals方法的作用。进一步剖析HashSet的底层HashMap实现、LinkedHashSet的双向链表维护顺序特性,以及TreeSet基于红黑树的排序功能。文章还包含性能对比、自定义对象去重、集合运算实战和线程安全方案,帮助读者全面掌握Set的应用与选择策略。
188 23
|
2月前
|
存储 缓存 安全
Java集合框架(三):Map体系与ConcurrentHashMap
本文深入解析Java中Map接口体系及其实现类,包括HashMap、ConcurrentHashMap等的工作原理与线程安全机制。内容涵盖哈希冲突解决、扩容策略、并发优化,以及不同Map实现的适用场景,助你掌握高并发编程核心技巧。
|
2月前
|
安全 Java 开发者
Java集合框架:详解Deque接口的栈操作方法全集
理解和掌握这些方法对于实现像浏览器后退功能这样的栈操作来说至关重要,它们能够帮助开发者编写既高效又稳定的应用程序。此外,在多线程环境中想保证线程安全,可以考虑使用ConcurrentLinkedDeque,它是Deque的线程安全版本,尽管它并未直接实现栈操作的方法,但是Deque的接口方法可以相对应地使用。
170 12
|
2月前
|
存储 NoSQL Java
Java Stream API:集合操作与并行处理
Stream API 是 Java 8 提供的集合处理工具,通过声明式编程简化数据操作。它支持链式调用、延迟执行和并行处理,能够高效实现过滤、转换、聚合等操作,提升代码可读性和性能。

热门文章

最新文章