java.util.arraylist类 toArray()方法

该博客探讨了Java中ArrayList的toArray()方法的使用,特别是为何经常将它转换为特定类型数组时会配合传入new String[0]。通过这种方法,可以确保返回的数组大小与列表实际元素数量匹配,并且在列表元素少于数组长度时,额外的数组位置会被设置为null,帮助判断列表的实际长度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以前一直迷惑为什么会有这样的用法 String[] s  = (String [])arrayList.toArray(new String[0]),看完API之后才明白,API 片段 如下:

public <T> T[] toArray(T[] a)


Returns an array containing all of the elements in this list in proper sequence (from first to last element); the runtime type of the returned array is that of the specified array. If the list fits in the specified array, it is returned therein. Otherwise, a new array is allocated with the runtime type of the specified array and the size of this list.

If the list fits in the specified array with room to spare (i.e., the array has more elements than the list), the element in the array immediately following the end of the collection is set to null. (This is useful in determining the length of the list only if the caller knows that the list does not contain any null elements.)

Parameters:
a - the array into which the elements of the list are to be stored, if it is big enough; otherwise, a new array of the same runtime type is allocated for this purpose.

只有当数组a的空间足够大的时候,元素才会放到数组a中去,否则就重新生成一个数组。此例当中,new String[0]的空间不足以存放arrayList中的元素,arrayList中的元素将会存放去数组s。下面的例子方便理解:

import java.util.ArrayList;

/** 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
 */
public class Classic11 {
    public static void main(String args[]){
        ArrayList result = new ArrayList(30);
        int index = 0;
        for(int i =1;i<5;i++)
            for(int j =1;j<5;j++)
                for(int k =1;k<5;k++)
                    if((i!=j)&&(i!=k)&&(j!=k))
                        result.add(i*100+j*10+k);
        System.out.println(result.size());

        if(!result.isEmpty()){
//            Integer[] x =(Integer[]) result.toArray(new Integer[0]);
            Integer[] x = new Integer[result.size()];
            result.toArray(x);
            int counter = 0;
            for(int i=0;i<x.length;i++) {
                System.out.print(x[i].intValue() + " ");
                if((++counter) %4 ==0)
                    System.out.println("\n");
            }
            System.out.println("\n"+x.length+" in total!");
        }
        else
            System.out.println("no elements!");
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值