一、一维数组
1、数组是相同类型数据的有序集合。
数组变量的语法:
int[] array = new int[5];
//不推荐
//int array[] = new int[3];
int [] arr = {1,2,3};
上面的这行语句做了两件事:
使用 new int[5] 创建了一个数组。
把新创建的数组的引用赋值给int变量 array。
2.数据的遍历:
private static void traverse() {
int [] array =new int[5];
array[0]=100;
array[1]=200;
array[2]=300;
array[3]=400;
array[4]=500;
for (int i = 0; i < array.length; i++) {
System.out.print(array[i]+",");
}
for-each循环或加强型循环,在不使用下标的 情况下比遍历数组
//基础语法
for(type element:element){
System.out.prinitln(element);
}
//数组定义和上面一样
for (int i : array) {
System.out.print(i+"\t");
}
-
数组的特点。
数组长度是确定的,一旦申请空间,长度不能发生变化,用length属性访问
元素必须是相同的类型
可以存储基本数据类型二号引用数据类型
数组变量属于引用类型 -
数组的优缺点
优点:按照索引查询元素速度快
能储存大量的数据
按照索引遍历数组方便
数组定义简单,而且访问很方便
可以随机访问其中的元素
缺点:
根据内容查找元素速度慢
数组的大小一经确定不能改变,不适合动态储存
数组智能存储一种类型的数据
添加 删除元素效率慢 -
冒泡排序的算法。
冒泡排序,是将数组由小到大,或由大到小的一种排序算法。
原理:比较两个相邻的元素,将值大的元素交换到右边
private static void traverse() {
int [] array = {5,1,7,3,9};
//排序前
System.out.println(Arrays.toString(array));
for (int i = 0; i < array.length-1; i++) {
for (int j = 0; j < array.length-1-i; j++) {
if (array[j]>array[j+1]) {
//交换arry[j]和array[j+1]
int tmp=array[j];
array[j]=array[j+1];
array[j+1]=tmp;
}
}
}
//排序后
System.out.println(Arrays.toString(array));
}
- 数组的三种初始化方式是什么?
静态初始化,动态初始化,默认初始化
二、二维数组
二维数组其实就是数组的数组。
1、定义方式
第一种方式
定义的同时,直接进行初始化。
public static void main(String[] args) {
int[][] ns = {
{1,2,3,5},
{1,2,3,5},
{1,2,3,5}
};
System.out.println(ns.length);//3
}
第二种方式
先定义声明二维数组,延迟初始化。
public static void main(String[] args) {
int[][] ns = new int[3][];
// 依次初始化三个数组
for (int i = 0; i < ns.length; i++) {
ns[i] = new int[3];
}
System.out.println(ns.length);//3
}
//定义并初始化arr
int[][] arr=new int[3][4];
arr[0][1]=1;
arr[0][2]=2;
arr[1][2]=3;
arr[1][1]=4;
arr[2][3]=8;
2、二维数组的访问
和一维数组相同,可通过数组下标索引进行数组访问。
public static void main(String[] args) {
int[][] ns = {
{1,2,3,5},
{4,5,6,7},
{8,9,10,11}
};
System.out.println(ns[2][3]);//11
}
二维数组的遍历
对二维数组比较常见的一个操作是进行遍历,下面我们通过for循环来对一个二维数组进行遍历。
public static void visitEveryOne() {
// 定义一个二维数组,高维(行)表示不同的班级,三个班
// 低维(列)标识每个学生的数学成绩。每个班有5名学生(人数比较少)
int[][] scores = {
{98, 97, 100, 80, 81},
{95, 100, 100, 99, 98},
{91, 89, 92, 90, 99}
};
for (int i = 0; i < scores.length; i++) {
StringBuilder stringBuilder = new StringBuilder("");
stringBuilder.append("[");
for (int j = 0; j < scores[i].length; j++) {
// 通过下标索引访问数组。
stringBuilder.append(scores[i][j]);
if (j != scores[i].length - 1) {
stringBuilder.append(",");
}
}
stringBuilder.append("]");
System.out.println("班级" + (i+1) + "的成绩:" + stringBuilder.toString());
}
}
输出:
班级1的成绩:[98,97,100,80,81]
班级2的成绩:[95,100,100,99,98]
班级3的成绩:[91,89,92,90,99]