Java 重温记录之一维数组

最近在重温 Java 基础,之前半半拉拉的学了,现在定心好好来一遍,并且记录下来

一维数组

  • 数组:用于存储同种数据类型的多个元素的容器,什么 int String 都可以存储

  • 定义格式:

    • 数据类型[] 数组名;

      1
      int[] arr;
    • 数据类型 数组名[];

      1
      int arr[];

      通常使用第一种,第二种不推荐使用,当看到的时候知道就可以


  • 特点:
    • 数组中的每一个元素都有自己的编号,从 0 开始,最大编号是 长度-1
    • 编号的专业叫法为:索引「index」

  • 数组的初始化

    • 动态初始化:只给出长度,系统给出默认值

      1
      int[] arr = new int[3]; // 3 代表数组的长度,也就是存在 3 个数据
    • 静态初始化:给出值,系统决定长度

      1
      2
      3
      int[] arr = new int[]{1, 2, 3};
      简化:
      int[] arr = {1, 2, 3};

一维数组的常见操作

遍历

方式一
1
2
3
4
5
6
7
8
public static void printArray(int[] arr) {
for(int x = 0; x < arr.length; x++) {
System.out.print(arr[x]);
}
}

arr.length --> arr 这个数组的长度
结果:123
方式二
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public static void printArray(int[] arr) {
System.out.print("[");
for(int x = 0; x < arr.length; x++) {
if(x == arr.length-1) {
System.out.println(arr[x] + "]");
}else {
System.out.println(arr[x] + ",");
}
}
}

arr.length --> arr 这个数组的长度
如果遍历到数组最后一位,就添加一个 "]"
否则,其他数据后添加一个 ","

结果:[1,2,3]

最值

最大值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public static void getMax(int[] arr) {
int max = arr[0];

for(int x = 1; x < arr.length; x++) {
if(arr[x] > max) {
max = arr[x];
}
}
return max;
}

分析:
- 先把数组中第一个元素当作最大的
- 通过遍历把每一个元素与当前最大的元素进行比较
- 如果比当前元素的值大,就使用这个元素替换之前的数据
- 最后返回这个值
最小值
1
2
3
4
5
6
7
8
9
10
11
12
public static void getMin(int[] arr) {
int min = arr[0];

for(int x = 1; x < arr.length; x++) {
if(arr[x] < min) {
min = arr[x];
}
}
return min;
}

分析:同最大值

逆序

方式一
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public static void reverse(int[] arr) {
for(int x=0; x<arr.length/2; x++) {
int temp = arr[x];
arr[x] = arr[arr.length-1-x];
arr[arr.length-1-x] = temp;
}
}

分析:
- 逆序也就是调换位置,例如:1,2,3,4,5 逆序后为 5,4,3,2,1,可以看出元素 "3" 不动
- 遍历所有元素,只需要遍历到数组长度的一半就可以,也就是例子中的第二个元素 "2"
- 定义一个变量 `temp` 存储当前元素「也就是第一个元素」的值
- `arr.length-1-x` 数组总长度为 5,使用编号表示最后一个元素为 4
- 15 对调,以此类推
方式二
1
2
3
4
5
6
7
8
9
10
11
12
public static void reverse(int[] arr) {
for(int start=0,end=arr.length-1; start<=end; start++,end--) {
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
}
}

分析:
- start 从数组编号为 0 的开始
- end 则是数组编号为 4 也就是最后一个
- 其他同 `方式一`

查表

1
2
3
4
5
6
public static String getString(String[] strArray,int index) {
return strArray[index];
}

分析:
- 输入数字找到对应编号的元素

基本查找

方式一
1
2
3
4
5
6
7
8
9
10
11
12
13
public static int getIndex(int[] arr,int value) {
for(int x=0; x<arr.length; x++) {
if(arr[x] == value) {
return x;
}
}
return -1;
}

分析:
- 输入数字通过遍历找到对应元素「注意不是编号」
- 如果找到则返回该元素的编号
- 否则返回 -1,表示该值不存在
方式二
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  public static int getIndex(int[] arr,int value) {
int index = -1;

for(int x=0; x<arr.length; x++) {
if(arr[x] == value) {
index = x;
break;
}
}
return index;
}

分析:
- 基本原理同 `方式一`
- 不同的是,事先定义了一个变量 index,并赋值 -1
- 如果找到则将 x 赋值给 index,并结束语句
- 最后再返回 index