动态数组与数组简要总结

  • 概述
  • 常用API
  • 使用范例
  • 转换方法


概述

数组是一种线性数据结构,是一个使用连续的内存空间存放相同的数据类型的集合容器,其中的元素均为同一类型。数组的长度在创建时确定,并且在创建后无法改变。上述两特性决定了数组随机访问性能高而难以实现增删操作的特点。
在Java中,通过new新建的数组视为对象,可通过对象引用对其进行属性的修改。

ArrayList就是动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了动态的增加和删除元素、实现了ICollection和IList接口、灵活的设置数组的大小等好处。
List接口的大小可变数组(即动态数组)的实现,位于API文档的java.util.ArrayList。实现了所有可选列表操作,并允许包括 null 在内的所有元素。除了实现 List 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。

常用API

数组:

array.clone();//创建一个与原数组长度和对应元素相同的数组,并返回此副本。

array.equals();//判断两个数组对象属性是否一致

array.length();//获取指定数组初始设定长度

ArrayS.toString();//返回此对象的字符串表示形式

Arrays.hashCode();//返回指定数组的哈希码(hashCode就是对象的散列码,是根据对象的某些信息推导出的一个整数值,默认情况下表示是对象的存储地址。通过散列码,可以提高检索的效率,主要用于在散列存储结构中快速确定对象的存储地址)

Arrays.copyOf();//复制数组指定长度的部分,并以0或null填充(若有必要)

Arrays.binarySearch();//对有序数组进行对半搜索查找指定元素

Arrays.sort();//将数组进行快速排序(改造器方法)

Arrays.copyOfRange();//将数组指定范围元素复制到另一数组

动态数组:

arrayList.add();//添加元素

arrayList.addAll();//将集合中所有元素添加到动态数组

arrayList.set();//设定指定位置元素内容

arrayList.get();//通过索引值获取动态数组中元素

arrayList.indexOf();//返回动态数组中元素的索引

arrayList.remove();//移除数组指定位置元素

arrayList.size();//返回动态数组的长度

Collections.sort();//调用Collections容器类对动态数组进行排序

arrayList.contains();//判断动态数组是否含有某个元素

arrayList.isEmpty();//判断动态数组是否为空

arrayList.toString();//将动态数组转换为字符串数组

arrayList.subList();//截取动态数组指定长度部分

arrayList.toArray();//将动态数组转为数组

使用范例

数组:

public static void main(String[] args){
        String[] arr = new String[]{"peach","banana","pear","apple","watermelon"};
        String[] arr2 = arr.clone();
        String[] arr3 = Arrays.copyOf(arr,7);
        System.out.println("arr: " + Arrays.toString(arr));
        System.out.println("arr2: " + Arrays.toString(arr2));
        System.out.println("arr3: " + Arrays.toString(arr3));
        System.out.println("hashCode: " + arr.hashCode());
        System.out.println("equals: " + arr.equals(arr2));
}

输出结果:
arr: [peach, banana, pear, apple, watermelon]
arr2: [peach, banana, pear, apple, watermelon]
arr3: [peach, banana, pear, apple, watermelon, null, null]
hashCode: 1078694789
equals: false

动态数组:

public static void main(String[] args){
        ArrayList<Integer> arrayList = new ArrayList<>();
        int[] arr = new int[]{7,23,5,-4,46,0,235,-8};
        for(int x = 1;x<20;x+=2){
            arrayList.add(-3*x+7);
        }
        System.out.println("arraylist: " + arrayList);
        Collections.sort(arrayList);
        System.out.println("sorted: " + arrayList);
        System.out.println("remove: " + arrayList.remove(3));
        System.out.println("sublist: " + arrayList.subList(2,7));
}

输出结果:
arraylist: [4, -2, -8, -14, -20, -26, -32, -38, -44, -50]
sorted: [-50, -44, -38, -32, -26, -20, -14, -8, -2, 4]
remove: -32
sublist: [-38, -26, -20, -14, -8]

转换方法

数组转动态数组:

public static void main(String[] args){
        String[] arr = new String[]{"apple","pear","lemon","grapes"};
        ArrayList<String> arrayList = new ArrayList<>();
        for(String str:arr){
            arrayList.add(str);
        }
        System.out.println(arrayList);
    }

动态数组转数组:

public static void main(String[] args){
        ArrayList<String> arrayList = new ArrayList<>();
        arrayList.add("apple");
        arrayList.add("pear");
        arrayList.add("strawberry");
        arrayList.add("peach");
        String[] arr = new String[arrayList.size()];
        arrayList.toArray(arr); //不带参数的toArray()会返回Object类数组,需添加类型转换。
        System.out.println(Arrays.toString(arr));
}