ArrayList的扩容机制的理解以及日常代码错误的总结

本文详细阐述了ArrayList的扩容原理,包括容量与负载因子的作用,以及扩容过程中的步骤。同时,总结了编程中常见的语法和逻辑错误,如返回值方法的正确用法和数组转换字符串的注意事项。
摘要由CSDN通过智能技术生成

   一.ArrayList的扩容机制

  在学习ArrayList的过程中,我们知道ArrayList是java集合框架动态数组实现,具有自动扩容机制。本质上,Arraylist是一个数组,但是为什么它能做到自动扩容,这让我提起了兴趣。

   在我查阅资料后,我发现Arraylist主要有两个方面因素:容量与负载因子。这里我解释一下什么是容量和负载因子。容量,就是Arraylist内部维护的一个数组,简单来说就是数组的大小。当Arraylist的元素数量达到数组容量时候,就要进行扩容了。而负载因子是一个比率,表示实际存储元素数量与数组容量之间的关系,当负载因子超过某个值时候,就会触发扩容操作。

   了解了容量和负载因子之后,我们在了解扩容的大概步骤。

    触发扩容

在添加元素之前,ArrayList 先检查当前元素数量是否达到了数组的容量。如果达到或超过了容量的阈值,就会触发扩容。

  计算新容量

当需要进行扩容时,ArrayList 计算新的容量。通常,新容量是原容量的 1.5 倍。这个倍数可以根据具体实现而有所不同。

  创建新数组

为了容纳更多的元素,ArrayList 创建一个新的数组,其大小为新容量。这个新数组将用于替代原数组。

  元素复制

将原数组中的所有元素复制到新数组中。这个过程涉及数组的复制操作,时间复杂度为 O(n),其中 n 是数组中元素的数量。

  替换原数组

一旦元素复制完成,ArrayList 将新数组替代原数组,成为其内部存储元素的数组。

 但是在扩容中,有点显而易见,处理数据简单快捷更加灵活,但是同样的,在扩容时也会带来一定的性能开销,因此,在设计应用时,需要权衡元素数量、初始容量和负载因子,以优化性能。

二.日常代码错误总结

   在新学的方法中,不时就会出现语法,逻辑错误,下面我总结了我觉得比较有代表性的错误

1.在Java中,如果一个方法被声明有返回值(即使用了非void的返回类型),那么它必须确保所有可能的返回路径上都有返回语句

public class ReturnStatementExample {

    public static int addNumbers(int a, int b) {
        int sum = a + b;
        return sum; 
    }
    public static int getMax(int x, int y) {
        if (x > y) {
            return x; 
        } else {
            return y; 
        }
    }

    public static String getMessage(boolean condition) {
        if (condition) {
            return "Condition is true";         
        } else {
            return "Condition is false"; 
        }
    }

    public static void main(String[] args) {
        int result = addNumbers(5, 3);
        System.out.println("Sum: " + result);

        int max = getMax(8, 12);
        System.out.println("Max: " + max);

        String message1 = getMessage(true);
        String message2 = getMessage(false);
        System.out.println("Message 1: " + message1);
        System.out.println("Message 2: " + message2);
    }
}

2.数组对象中不能直接使用+运算符连接起来然后输出,这样会得到数组的哈希码而不是数组额内容,因此,需要用Array.toString方法将数组转化为字符串

mport java.util.Arrays;

public class ArrayToStringExample {

    public static void main(String[] args) {
        int[] numbers = {1, 2, 3, 4, 5};

        // 直接使用+运算符输出数组(错误方式)
        System.out.println( numbers);

        // 使用Arrays.toString()方法将数组转化为字符串输出(正确方式)
        String arrayAsString = Arrays.toString(numbers);
        System.out.println(arrayAsString);
    }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值