一、初步认识数组:
数组===衣柜:是一个装衣服的容器,将衣服分门别类的整理储存。1.什么是数组?
数组也是一个容器,存储一组相同数据类型的容器
2.数组的特点:
数组可以存储多个相同数据类型的数据,在内存空间中所有的数据是连续的。
数组中数据的个数是固定不变的,一旦初始化数组,长度确定后,就不可以修改
3.使用数组的好处和局限:
好处:可以同时声明多个变量,连续的,便于查找使用。
局限:容易造成数据溢出(ArrayIndexOutOfBoundsException)即数组下标越界异常。
4.数组的声明和初始化:
1)声明:数据类型 数组名()
2)数组的初始化:
数组中的数据称为数组的元素
i.静态初始化:不需要给数组定义长度,只需要给每一个元素进行初始化值即可。
例:(int[] arr;arr=new int[]{1,2,3}或者arr={1,2,3};)
ii.动态初始化:不需要给每一个元素进行赋值,只需要给数组定义长度即可,由系统给每一个元素分配默认值
int[] arr=new int[整形数据]
说明:整形数据:表示数组的长度(数组中元素的个数);
系统分配的默认值:
整数:0;浮点型:0.0;字符型:‘\u0000即空格’;boolean型:false; 引用数据类型:null;
注意:初始化数组时,要么使用动态初始化,要么使用静态初始化,坚决不允许混合使用!!
二.数组(引用数据类型)的存储:
引用数据类型在内存中分为两部分进行存储引用----数组名:存储在栈中,栈的存储结构遵循先进后出。
元素--数据:存储在堆中
栈中除了存储了引用之外还存储了第一个元素在堆中的地址
三。数组的使用:
1.下标访问数组元素:由于数组中的元素是连续的,所以我们元素可以通过一个元素在数组中的位置进进行对数组元素的访问,
注意: 数组的第一个元素的下标数0,最后一个元素的小标是长度减1
若下标大于等于数组的长度或小于0时,会抛出数组下标越界。
2.数组的长度
获取数组的长度,数组中多少个元素
所有的数组都有的一个属性:length属性
3.获取数组中所有的元素:遍历
1)使用普通循环:通过下标访问每一个元素
for(int i=0;i<arr.length;i++);
2)增强for循环:
for(int c:arr)
4.动态初始化,给每一个元素重新赋值
int[] arr=new int[3];
使用循环给元素进行重新赋值,不可以使用增强for循环,只能使用普通for循环
5. 修改数组中的元素值:
通过下标获取到元素,然后重新赋值
四、数组的元素查找:
1.顺序查找:实现过程:将要查找的数据在数组中每一个元素进行匹配
实现方法:for循环和分支语句结合完成
class Demo5
{
public static void main(String[] args){
int[] arr={5,4,7,2,8,6,,9};
for(int i=0;i<arr.length;i++){
//找出为5的数据
if(arr[i]==5){
System.out.println(arr[i]);
}
}
}
}
2.二分法查找:
原理:不断的缩小查找范围
要求:数组中必须是从大到小或从小到大。
class Demo2
{
public static void main(String[] args)
{
//静态初始化一个数组
int[] arr = {1,2,3,4,5,6,8,9};
//定义三个变量:表示查找的最大范围,最小范围,中间位置
int min = 0, max = arr.length-1, mid = 0;
//使用while循环
while (true)
{
//求中间位置下标
mid = (max + min) / 2;
//查找到元素的情况
if (arr[max]==7)
{
System.out.println(max);
break;
}
if (arr[min]==7)
{
System.out.println(min);
break;
}
if (arr[mid]==7)
{
System.out.println(mid);
break;
}
//没查到的情况
if (arr[mid]>7)
{
max = mid - 1;
}
if (arr[mid]<7)
{
min = mid + 1;
}
//当max<=min时,说明没有要查找的元素
if (max<=min)
{
System.out.println("没有要查找的元素");
break;
}
}
System.out.println();
}
}
五、数组元素排序:
1.选择排序:原理:先从所有的元素中找出最大的元素,放到第一个元素的位置,再从剩余的元素中找到最大的放到
第二个元素的位置,
class Demo1
{
public static void main(String[] args)
{
int[] arr = {3,2,5,43,87,68,0};
//外层循环:确定位置
for (int i=0; i<arr.length; i++)
{
//内层循环:比较次数
for (int j=i+1; j<arr.length; j++)
{
//arr[i]
if (arr[i]<arr[j])
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
for (int i:arr)
{
System.out.println(i);
}
System.out.println();
}
}
2.冒泡排序:
原理:元素两两比较,从小到大排序,大的上浮,小的下沉。
class Demo2
{
public static void main(String[] args)
{
int[] arr = {2,76,3,45,9,2,0};
//外层循环:表示比较的轮数
for (int i=1; i<arr.length; i++)
{
//内层循环:表示每一轮比较的次数
for (int j=0; j<arr.length-i; j++)
{
if(arr[j]>arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
for (int i:arr)
{
System.out.println(i);
}
System.out.println();
}
}
六、多维数组:二维数组:
1.什么是二维数组数组时一个装数据的容器,数据分为基本类型数据和引用类型数据
二维数组就是一个数组中的元素还是一个数组
2.二维数组的声明与初始化:
数据类型 数组名:
数组名=值;
例:int[][] arr = new int[3][3];
int[][] arr = new int[3][];
int[][] arr = new int[][]{{},{},{}};
int[][] arr = {{},{},{}};
3.二维数组的遍历:
嵌套循环
七。Arrays工具类
此类中提供了一组对数组元素进行操作的方法。
使用arrarys时,需要导入包:import java.utils.Arrarys;
binarySearch:数组元素查找 例:Arrays.binrySearch(int arr,6); //arr时数组,6为数组内需要查找的元素sort:将数组元素升序排序 例: Arrays.sort(arr);
fill:使用指定的值将数组中所有的元素替换 例:Arrays.fill(arr,1); //将数组内的所有元素替换成1
toString:将数组转成字符串形式[值1,值2,.....] 例:Arrays.toString(arr);