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

Java 数组(java.util.Arrays)

作者: Tinyspot | 来源:发表于2023-01-29 12:58 被阅读0次

    1. 数组(Array)

    • 数组是一种线性表数据结构
    • 三个特点:顺序存储;内存地址连续;相同数据类型
    • 数组所有元素初始化为默认值
    • 使用索引访问数组元素,索引也称为下标
    • 数组是引用类型,并且大小不可变
    • 缺点:无法动态修改容量;插入要移动数据

    1.1 数组的名与实

    • 数组的实,是一块地址连续的内存
    • 数组的名,就是这个块连续内存的第一个内存的地址
    • 数组的变量和基本变量一样,本身是个地址
    int[] nums = new int[] {2,14,35}
    // or int[] nums = {2,14,35}
    // 重新赋值
    nums = {1, 2} 
    

    分析:
    nums 是局部变量,放栈空间;{2,14,35} 是通过 new 获取,放堆空间
    数组是引用类型,大小不可变,nums 实际上是从一个数组对象,指向另一个数组对象,数组本身没有变,只是创建了一个新的数组对象

    array-nums.png

    2. java.util.Arrays

    2.1 输出数组

    String str = ",a,,b,";
    String[] split1 = str.split(",");
    System.out.println(Arrays.toString(split1));
    

    2.2 add() 会抛异常

    List<String> list = Arrays.asList("A", "B", "C", "D");
    list.add(0, "sss");
    // java.lang.UnsupportedOperationException
    

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

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

    2.3 添加元素 set()

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

    3. 数组转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);
    

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

    4.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);
            }
        }
    }
    

    4.2 new ArrayList(Arrays.asList())

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

    5. 其他方法

    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/iycphdtx.html