Array与Arrays的区别(数组转list)

本文详细探讨了在Java中如何正确地将数组转换为ArrayList。文章对比了几种常见做法,并指出了使用Arrays.asList方法的局限性及如何通过ArrayList构造方法创建可变的列表。

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

1.数组类Array

   Java中最基本的一个存储结构。

     提供了动态创建和访问 Java 数组的方法。其中的元素的类型必须相同。

     效率高,但容量固定且无法动态改变。

     它无法判断其中实际存有多少元素,length只是告诉我们array的容量。

2、静态类Arrays

    此静态类专门用来操作array ,提供搜索、排序、复制等静态方法。

      equals():比较两个array是否相等。array拥有相同元素个数,且所有对应元素两两相等。

      sort():用来对array进行排序。

      binarySearch():在排好序的array中寻找元素。

      Arrays.asList(array):将数组array转化为List   (此种方法不正规)

 

 

注意:

为了实现把一个数组转换成一个ArrayList,很多Java程序员会使用如下的代码:

 

 

Arrays.asList确实会返回一个ArrayList对象,但是该类是Arrays类 中一个私有静态内部类,而不是常见的java.util.ArrayList类。这个java.util.Arrays.ArrayList类具有 set(),get(),contains()等方法,但是不具有任何添加或移除元素的任何方法。因为该类的大小(size)是固定的。为了创建出一个真正的ArrayList,代码应该如下所示:

 

 

 

我们知道,ArrayList的构造方法可以接受一个Collection类型的对象,而我们的 java.util.Arrays.ArrayList正好也是它的一个子类。实际上,更加高效的代码示例是:

 

 

 

(正确的做法是test2和test3的做法)

复制代码

package Array2List;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

import org.junit.Test;

public class Array2List {

    /**
     * 错误的做法 此种方法返回的list不具有任何添加或移除元素的任何方法。因为该类的大小(size)是固定的。
     */
    @Test
    public void test1() {
        String attr[] = { "1", "2", "3" };
        List<String> list = Arrays.asList(attr);
        list.add("4");// 报错
        for (String s : list) {
            System.out.println(s);
        }
    }

    /**
     * 正确的做法 
     * ArrayList的构造方法可以接受一个Collection类型的对象,而我们的 java.util.Arrays.ArrayList正好也是它的一个子类
     */
    @Test
    public void test2() {
        String attr[] = { "1", "2", "3" };
        List<String> list = new ArrayList<String>(Arrays.asList(attr));
        list.add("4");// 不会报错
        for (String s : list) {
            System.out.println(s);// 1234
        }
    }

    /**
     * 更加高效的做法
     *  ArrayList的构造方法可以接受一个Collection类型的对象,而我们的 java.util.Arrays.ArrayList正好也是它的一个子类
     */

    @Test
    public void test3() {
        String attr[] = { "1", "2", "3" };
        List<String> list = new ArrayList<String>(attr.length);
        Collections.addAll(list, attr);
        list.add("4");// 不会报错
        for (String s : list) {
            System.out.println(s);// 1234
        }
    }

}

复制代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值