数组的作用和类型
1.作用:存储相同数据类型的一组数据,对同类型数据进行集中管理,便于遍历。
2.数组类型:数组类型就是数组中存储的数据类型。数组中的所有元素必须属于相同的数据类型,数组中所有元素在内存中连续存储。
数组本身也是一种引用数据类型,数组的长度一旦确定之后,数组的长度是不可变的。
3.数组名只是引用,指向堆中创建的数组对象,该对象保存一组其它引用或直接值。
备注:variable变量,primitive主数据类型,java等编程语言中的默认基本数据类型,如:int、long等.
声明、创建数组
1.告诉系统数据类型是什么
2.语法:
数据类型[] 数组名;(就是栈中那个引用变量,通过数组名就可以访问数组中的元素)
数组的创建
为数组分配内存空间,通过new操作符的使用。
声明并创建数组
数据类型[] 数组名 = new 数据类型[大小];
数组特点:
1.数组有一个字段length,表示此数组对象可以存储多少元素,即数组长度;length不是实际保存的元素个数。
2.[]是访问数组对象成员的唯一方式
3.对象数组保存的是引用,基本类型数组直接保存基本类型的值
4.新生成的数组对象,其中所有的引用自动初始化为null,基本类型数组成员有各自的默认值(数值型自动初始化为0,字符型为0,布尔型为false)
初始化数组并赋值
1.通过下标来进行赋值 array[0] = 1;
2.通过for循环进行统一遍历
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
常用数组查找算法
1.线性查找法:
它又称为顺序查找,在一列给定的值中进行搜索,从一端开始逐一检查每个元素,直到找到所需元素的过程。
例1:查找指定的数在数组中出现的位置,找到返回下标,找不到返回-1.
public class Demo {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int[] array = {10,100,80,50,70,60,90};
System.out.println("请输入要查找的数:");
int number = input.nextInt();
int index = -1;
for (int i = 0; i < array.length; i++) {
if (array[i] == number) {
index = i;
break;
}
if (i == array.length - 1) {
System.out.println("你要查找的数不存在!");
}
}
if (index != -1) {
System.out.println("你要查找的数在数组中的下标为:" + index);
}
input.close();
}
}
例2.求数组中的最大值、最小值
public class Demo {
public static void main(String[] args) {
int[] array = {10,100,80,50,70,60,90};
int max = array[0];
int min = array[0];
for (int i = 0; i < array.length; i++) {
if (max < array[i]) {
max = array[i];
}
if (min > array[i]) {
min = array[i];
}
}
System.out.println("最大值为:" + max);
System.out.println("最小值为:" + min);
}
}
2.二分查找法
它又称之为折半查找法。将数组中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将数组分成前后两个子数组,
如果中间位置记录的关键字大于查找关键字,则进一步查找前一子数组,否则进一步查找后一子数组。重复以上过程,直到找到或找不到为止。
public class Demo {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int[] array = {10, 20, 30, 50, 70, 80, 90, 100};
System.out.println("请输入要查找的数:");
int number = input.nextInt();
int index = -1;
int start = 0;
int end = array.length - 1;
int middle = 0;
while (start <= end) {
middle = (start + end)/2;
if (number == array[middle]) {
index = middle;
break;
}
if (number > array[middle]) {
start = middle + 1;
}
if (number < array[middle]) {
end = middle - 1;
}
}
if (index != -1) {
System.out.println("你要查找的数在数组中的下标为:" + index);
} else {
System.out.println("你要查找的数不存在!");
}
input.close();
}
}
3.冒泡排序法
比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。最后的元素应该会是最大的数。
针对除了最后一个元素以外所有的元素重复以上的步骤。直到没有任何一对数字需要比较。
public class Demo {
public static void main(String[] args) {
int[] array = {10, 20, 60, 50, 70, 80, 90, 100};
// N个数比较的轮数为N-1
for (int i = 0; i < array.length - 1; i++) {
// 每轮比较的次数为N-1-i
for (int j = 0; j < array.length - 1 - i; j++) {
// 比较相邻的两个数,小数冒泡,大数沉底
if (array[j] > array[j + 1]) {
// 两个数做交换
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
// 输出结果
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + " ");
}
}
}