美文网首页
Java 数组(java.util.Arrays)

Java 数组(java.util.Arrays)

作者: Tinyspot | 来源:发表于2024-01-11 18:04 被阅读0次

1. java.util.Arrays

1.1 输出数组

@Test
public void test() {
    String str = ",a,,b,";
    String[] strArr = str.split(",");
    System.out.println(Arrays.toString(strArr));
}

1.2 Arrays.asList

List<String> list = Arrays.asList("A", "B", "C", "D");
Arrays.asList() 返回的是一个List (List是一个接口,实际返回的是 List 的实现类),这个List在底层是有数组实现的,所以 size 是 fixed 的

public class Arrays {
    public static <T> List<T> asList(T... a) {
        return new ArrayList<>(a);
    }

    private static class ArrayList<E> extends AbstractList<E>
        implements RandomAccess, java.io.Serializable {
            private final E[] a;
            ArrayList(E[] array) {
            a = Objects.requireNonNull(array);
        }
    }
}

1.3 add() 会抛异常

@Test
public void test() {
    List<String> list = Arrays.asList("A", "B", "C", "D");
    // java.lang.UnsupportedOperationException
    // at java.util.AbstractList.add(AbstractList.java:148)
    list.add("E");
}

原因分析:
Arrays 有一个内部类 ArrayList(非 java.util.ArrayList 类)
继承抽象类 AbstractList,未重写 add(),remove() 等方法

public abstract class AbstractList {
    public void add(int index, E element) {
        throw new UnsupportedOperationException();
    }
}

1.4 添加元素 set()

List<String> list = Arrays.asList("A", "B", "C", "D");
list.set(0, "sss");

2. 数组转List

// 方式一:
List<String> list = Arrays.asList(strArray);

// 方式二:
String[] strArray = new String[] {"A", "B", "C", "D"};
ArrayList<String> copyArrays = new ArrayList<>(Arrays.asList(strArray));

// 方式三:
List<String> arrayList = new ArrayList<>();
Collections.addAll(arrayList, strArray);

2.2 toArray()转为数组

public interface List<E> extends Collection<E> {
    Object[] toArray();
     /**
     *  String[] y = x.toArray(new String[0]);
     *  
     *  toArray(new Object[0]) 等价于 toArray()
     */
    <T> T[] toArray(T[] a);
}

toArray(T[] a) 可指定数组元素的类型

3. Arrays.asList() vs new ArrayList(Arrays.asList())

3.1 Arrays.asList()

List<String> list = Arrays.asList("A", "B", "C", "D");
源码分析

public class Arrays {
    public static <T> List<T> asList(T... a) {
        return new Arrays.ArrayList<>(a);
    }

    private static class ArrayList<E> extends AbstractList<E> implements RandomAccess, java.io.Serializable {
        private static final long serialVersionUID = -2764017481108945198L;
        private final E[] a;

        ArrayList(E[] array) {
            a = Objects.requireNonNull(array);
        }
    }
}

3.2 new ArrayList(Arrays.asList())

String[] array = new String[]{"A", "B", "C", "D"};
List<String> stringList = new ArrayList<>(Arrays.asList(array));

4. 其他方法

@Test
public void test() {
    int[] arr = new int[]{1, 3, 4, 2};
    Arrays.sort(arr);
    System.out.println(Arrays.toString(arr));
}

相关文章

网友评论

      本文标题:Java 数组(java.util.Arrays)

      本文链接:https://www.haomeiwen.com/subject/dnitodtx.html