Java 数据结构 - 数组

knowledgeable / 2024-07-20 / 原文

一、固定数组Arrays

数组用来存储固定大小的同类型的元素;

1、声明,初始化,访问

int[] myIntArray;
double[] myDoubleArr;
String[] myStrArr;

int size = 10;
double[] myDoubleArr  = new double[size];
double[] myList = {1.9, 1.4, 2.3, 9.8};

for (int i = 0; i < myList.length; i++) {  //方式1 获取数组的长度;
    System.out.println(myList[i] + " ");
}

for (double element: myList) {   //方式2 For-Each的方式;
    System.out.println(myList[i] + " ");
}

2、数组排序

Arrays.sort(nums);  // 默认升序排序;

Arrays.sort(a, new Comparator<String>() { // 自定义排序算法;
    @Override
    public int compare(String o1, String o2) {
        return o1.length() - o2.length();
    }
});

3、数组拷贝

方法1 for 循环拷贝(深拷贝)

int [] source = {1, 2, 3, 4, 5, 6};
int [] destination = new int[6];

//迭代并将元素从源复制到目标
for (int i = 0; i < source.length; ++i) {
    destination[i] = source[i];
}

在这里,源和目标数组引用不同的对象(深拷贝)。因此,如果一个数组的元素被更改,另一个数组的相应元素也将保持不变。

方法2 Arrays.copy (浅拷贝)

String[] newStr = Arrays.copyOf(strArrays, 4); // 通过函数复制;

将一个字符串数组(strArrays)复制到一个新的长度为4的数组中。如果原数组长度小于4,则新数组的剩余位置将被填充为null。如果原数组长度大于等于4,则新数组将包含原数组的前4个元素。

浅拷贝——原始数组的一个元素的员工姓名的变化导致了拷贝数组的变化.

参考链接

Java复制数组的方法 https://www.cnblogs.com/baichunyu/p/12966475.html
Java复制(拷贝)数组的4种方法:arraycopy()方法、clone() 方法、copyOf()和copyOfRange https://c.biancheng.net/view/924.html
Java 中复制数组 https://www.itcodingman.com/java_array_copy/
Java 数组复制 https://www.cainiaojc.com/java/java-copy-arrays.html

4、Arrays类常见的函数

boolean isEqual = Arrays.equal(a, b); //比较函数

int idx = Arrays.binarySerch(num, key); //二分查找key,前提是数组必须有序;

5、其他类型和Arrays互转

// HashSet ==> Arrays;
HashSet<String> store = new HashSet<String>();
String[] result = new String[store.size()];
store.toArray(result); // 转换 collection.toArray()

//ArraysList ==> Arrays
ArrayList<Integer> storeNum = new ArrayList<>();
Integer[] strNumArray = new Integer[storeStr.size()];  // 必须是Integer类型;
storeStr.toArray(strNumArray);

二、动态数组 ArrayList

ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。
Array 数组可以包含基本数据类型和引用数据类型,而 ArrayList 不能直接存储基本数据类型,而要存储其包装类对象。
image

ArrayList 继承了 AbstractList ,并实现了 List 接口。ArrayList 可以使用List的所有方法。
ArrayList 类位于 java.util 包中,使用前需要引入它,语法格式如下:

import java.util.ArrayList; // 引入 ArrayList 类

ArrayList<E> objectName =new ArrayList<>();  // 初始化
// E: 泛型数据类型,用于设置 objectName 的数据类型,只能为引用数据类型。
// objectName: 对象名。

1、定义/添加/删除元素

ArrayList<String> sites = new ArrayList<String>();
sites.add("Google");
sites.add("Runoob");
sites.add("Taobao");
sites.add("Weibo");
sites.remove(3); // 删除第四个元素;

site.clear();  //清空元素;

2、遍历/修改元素

sites.set(2, "Wiki"); //修改idx=2位置的 值为Wiki;

//遍历元素
for (int i = 0; i < sites.size(); i++) {
    System.out.println(sites.get(i));       //   访问数据;
}

for (String i : sites) {  //for-each;
    System.out.println(i);
}

3、排序和反转数据

Collection.sort(sites);
Collections.sort(store, new Comparator<Integer>() {  //自定义排序算法
    @Override
    public int compare(Integer o1, Integer o2) {
        return 0;
    }
});