Java中数组(Array)和列表(ArrayList)的区别

转载自:http://blog.csdn.net/chenglansky/article/details/44567887

1)精辟阐述:

可以将  ArrayList想象成一种“会自动扩增容量的Array”。

2)Array([]):最高效;但是其容量固定且无法动态改变;
     ArrayList:  容量可动态增长;但牺牲效率;

3)建议:
基于效率和类型检验,应 尽可能使用Array无法确定数组大小时才使用ArrayList
不过当你试着解决更一般化的问题时,Array的功能就可能过于受限。

4) Java中一切皆对象,Array也是对象。不论你所使用得Array型别为何,

Array名称本身实际上是个reference,指向heap之内得某个实际对象。

这个对象可经由“Array初始化语法”被自动产生,也可以以new表达式手动产生。

5)Array可做为函数返回值,因为它本身是对象的reference;

6)对象数组与基本类型数组在运用上几乎一模一样,唯一差别在于,前者持有得是reference,后者直接持有基本型别之值;
例如:
string [] staff=new string[100];
int [] num=new int[10];

7)容器所持有的其实是一个个reference指向Object,进而才能存储任意型别。当然这不包括基本型别,因为基本型别并不继承自任何classes。

8)面对Array,我们可以直接持有基本型别数值的Array(例如:int [] num;),也可以持有reference(指向对象)的Array;但是容器类仅能持有reference(指向对象),若要将基本型别置于容器内,需要使用wrapper类。但是wrapper类使用起来可能不很容易上手,此外,primitives Array的效率比起“容纳基本型别之外覆类(的reference)”的容器好太多了。

当然,如果你的操作对象是基本型别,而且需要在空间不足时自动扩增容量,Array便不适合,此时就得使用外覆类的容器了。

9)某些情况下,容器类即使没有转型至原来的型别,仍然可以运作无误。有一种情况尤其特别:编译器对String class提供了一些额外的支持,使它可以平滑运作。

10)对数组的一些基本操作,像排序、搜索与比较等是很常见的。因此在Java中提供了Arrays类协助这几个操作:sort(),binarySearch(),equals(),fill(),asList().

不过Arrays类没有提供删除方法,而ArrayList中有remove()方法,不知道是否是不需要在Array中做删除等操作的原因(因为此时应该使用链表)。

11)ArrayList的使用也很简单:产生ArrayList,利用add()将对象置入,利用get(i)配合索引值将它们取出。这一切就和Array的使用方式完全相同,只不过少了[]而已。

2.参考资料:
1)效率:
数组扩容是对ArrayList效率影响比较大的一个因素。
每当执行Add、AddRange、Insert、InsertRange等添加元素的方法,都会检查内部数组的容量是否不够了,如果是,它就会以当前容量的两倍来重新构建一个数组,将旧元素Copy到新数组中,然后丢弃旧数组,在这个临界点的扩容操作,应该来说是比较影响效率的。

ArrayList是Array的复杂版本
ArrayList内部封装了一个Object类型的数组,从一般的意义来说,它和数组没有本质的差别,甚至于ArrayList的许多方法,如Index、IndexOf、Contains、Sort等都是在内部数组的基础上直接调用Array的对应方法。

2)类型识别:
ArrayList存入对象时,抛弃类型信息,所有对象屏蔽为Object,编译时不检查类型,但是运行时会报错。
ArrayList与数组的区别主要就是由于动态增容的效率问题了

3)ArrayList可以存任何Object,如String等。


附Array和ArrayList的相互转换

复制代码
public class Test {  
    public static void main(String[] args) {  
        List<String> list=new ArrayList<String>();  
        list.add("王利虎");  
        list.add("张三");  
        list.add("李四");  
        int size=list.size();  
        String[] array = (String[])list.toArray(new String[size]);  
        for(int i=0;i<array.length;i++){  
            System.out.println(array[i]);  
        }  
    }  
}  
复制代码
复制代码
package test.test1;  
  
import java.util.Arrays;  
import java.util.List;  
  
public class Test {  
    public static void main(String[] args) {  
        String[] array=new String[3];  
        array[0]="王利虎";  
        array[1]="张三";  
        array[2]="李四";  
        List<String> list=Arrays.asList(array);  
        for(int i=0;i<list.size();i++){  
            System.out.println(list.get(i));  
        }            
    }  
}  
  • 16
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Java数组的数据存入ArrayList的方法有以下几种: 1. 使用Arrays类的asList()方法。这种方法可以将数组直接转换成List。示例代码如下: ```java String[] arr = {"a", "b", "c"}; List<String> list = Arrays.asList(arr); ``` 2. 使用Collections类的addAll()方法。这种方法可以将数组的元素添加到List。示例代码如下: ```java String[] arr = {"a", "b", "c"}; List<String> list = new ArrayList<String>(); Collections.addAll(list, arr); ``` 3. 使用循环遍历数组并调用List的add()方法。示例代码如下: ```java String[] arr = {"a", "b", "c"}; List<String> list = new ArrayList<String>(); for(String element: arr){ list.add(element); } ``` 4. Java 8 Streams API ```java String[] arr = {"a", "b", "c"}; List<String> list = Arrays.stream(arr).collect(Collectors.toList()); ``` 都可以将数组转化成List. ### 回答2: 在Java数组的数据存入ArrayList可以使用ArrayList的addAll()方法。具体步骤如下: 1. 创建一个ArrayList对象,用于存储数组的数据。 ```java ArrayList<Integer> arrayList = new ArrayList<>(); ``` 2. 将数组转换为ArrayList。 - 如果数组是基本数据类型的数组,可以使用循环逐个将数组元素添加到ArrayList。 ```java int[] array = {1, 2, 3, 4, 5}; for (int element : array) { arrayList.add(element); } ``` - 如果数组是引用类型的数组,可以使用Arrays类的asList()方法将数组转换为List,然后使用addAll()方法将该List添加到ArrayList。 ```java String[] array = {"Apple", "Banana", "Orange"}; arrayList.addAll(Arrays.asList(array)); ``` 3. 最后,可以通过遍历ArrayList来验证数组的数据是否存入成功。 ```java for (int element : arrayList) { System.out.println(element); } ``` 注意事项: - 基本数据类型的数组无法直接转换为ArrayList,因为ArrayList只能存储引用类型。因此,需要逐个将数组元素添加到ArrayList。 - Arrays.asList()方法返回的是一个固定大小的List,无法进行添加、删除操作。如果需要可变大小的ArrayList,可以使用addAll()方法将该List添加到新的ArrayList对象。 ### 回答3: 在Java,我们可以使用ArrayList类来实现将数组的数据存入ArrayList。 首先,我们需要创建一个ArrayList对象来存储数组的数据,可以使用泛型来指定ArrayList存储的元素类型。比如,如果数组存储的是整数类型,我们可以创建一个ArrayList<Integer>对象。 接下来,我们需要遍历数组,将每个元素添加到ArrayList。可以使用for循环来遍历数组,循环使用ArrayList的add方法来将元素添加到ArrayList。 以下是一个示例代码: ```java int[] arr = {1, 2, 3, 4, 5}; // 假设存在一个整数数组 ArrayList<Integer> arrayList = new ArrayList<>(); // 创建一个存储整数的ArrayList对象 for(int i=0; i<arr.length; i++){ arrayList.add(arr[i]); // 将数组的每个元素添加到ArrayList } ``` 通过上述代码,我们可以将整数数组的数据存入ArrayList<Integer>对象。 需要注意的是,在实际应用,我们可以根据需要选择使用不同类型的ArrayList,比如ArrayList<String>用于存储字符串数组的数据。同样的操作原理适用于其他数据类型的数组
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值