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

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
        }
    }

}

复制代码

猜你喜欢

转载自blog.csdn.net/gm13508613743/article/details/82560053