把握住自己能把握住的点滴。
概述:数组是一种数据结构,在连续的内存空间中,存储一组相同类型的元素。
元素
: 存储的内容(整型数组的初始值为0)。
索引
:存储元素相对的位置,即数组存储元素的下标(数组的下标从0开始)。
1、创建数组
方式一:静态初始化
int[] a = {1,2,3};
方式二:静态初始化
int[] b = new int[]{1,2,3};
方式三:动态初始化
// 创建一个整型数组,数组名为c,数组长度为3
int[] c = new int[3];
// 通过索引向数组中添加元素
c[0] = 1;
c[1] = 2;
c[2] = 3;
方式四:使用动态数组(ArrayList)
// 创建一个ArrayList对象
ArrayList<Integer> d = new ArrayList<Integer>();
// 添加元素
d.add(1);
d.add(2);
d.add(3);
2、添加元素
- 数组:
数组名[索引]=内容;
- ArrayList:
对象名.add(内容);
3、访问元素
- 数组:
数组名[索引];
- ArrayList:
对象名.get(索引);
4、更新元素
- 数组:通过索引重新为元素赋值。如: int[] a = {1,2,3};a[0]=7;
- ArrayList:
对象名.set(索引,内容);
5、删除元素
- 数组删除元素。
- 使用ArrayList的
remove()
方法来删除元素。
6、数组长度
- 数组长度:
数组名.length;
- ArrayList大小:
对象名.size();
7、遍历数组
- for 循环
- 增强for (for-each,jdk1.5新特性)
8、数组排序
- 数组排序:
Arrays.sort(数组名);
- ArrayList排序:
Collections.sort(对象名);
9、查找元素
数组:
int[] arr = {1,9,6,3};
// 顺序查找,时间复杂度T(n)=O(n),大O表示法
for(int i=0;i<arr.length;i++){
if(arr[i]==3){
//数组中有3这个元素
}else{
//数组中没有3这个元素
}
}
ArrayList:
ArrayList<Integer> d = new ArrayList<Integer>();
d.add(1);
d.add(2);
d.add(3);
boolean flag = d.contains(2); //contains:包含
System.out.println(flag); //true
10、练习
例1:打印除小红以外所有同学姓名。
System.out.println("-------begin--------");
String[] str = {"小明", "小红", "小黄", "小绿", "小黑"};
for (String name : str) {
if ("小红".equals(name)){
continue;
}
System.out.println(name);
}
System.out.println("-------end--------");
例2:逆向输出数组的值。
System.out.println("-------begin--------");
String[] str = {"小明", "小红", "小黄", "小绿", "小黑"};
for (int i = str.length - 1; i >= 0; i--) {
System.out.println(str[i]);
}
System.out.println("-------end--------");
例3:逐位计算两个数组,并将值赋给第三数组。
System.out.println("-------begin--------");
int[] nums1 = {9, 8, 7};
int[] nums2 = {3, 1, 2};
int[] nums3 = new int[nums1.length];
for (int i = 0; i < nums1.length; i++) {
nums3[i] = nums1[i] + nums2[i];
}
System.out.println(Arrays.toString(nums3));
System.out.println("-------end--------");
例4:查找数组中最大值。
System.out.println("-------begin--------");
int[] nums = {3, 1, 2, 9, 8, 7};
int max = 0;
for (int i = 0; i < nums.length; i++) {
int n = nums[i];
if (n > max) {
System.out.println(n+"比目前的最大值大"+max+",因此更新最大值为"+n);
max = n;
}else {
System.out.println(n+"不比目前的最大值"+max+"大");
}
}
System.out.println(max);
System.out.println("-------end--------");
11、多维数组
多维数组:可以看成是数组的数组,比如二维数组就是一个特殊的一维数组,其中每一个元素都是一个一维数组;
二维数组:
int[][] arr = new int[4][2];
这个二维数组 arr 可以看成一个4行2列的数组;
/*
四行两列
arr[0]:1,2
arr[1]:2,3
arr[2]:3,4
arr[3]:4,5
*/
int[][] arr = {{1, 2}, {2, 3}, {3, 4}, {4, 5}};
System.out.println(arr[0][0]); // 1
System.out.println(arr[0][1]); // 2
System.out.println(arr[2][0]); // 3
System.out.println(arr[2][1]); // 4
System.out.println("外面的长度: "+arr.length); // 4
System.out.println("里面的长度: "+ arr[0].length); // 2
遍历二维数组:
int[][] arr = {{1, 2}, {2, 3}, {3, 4}, {4, 5}};
for(int i =0;i<arr.length;i++) {
for(int j=0;j<2;j++) {
System.out.print(arr[i][j]+"\t");
}
System.out.println();
}
运行结果如下: