初学JavaDay06——数组
一、数组的基础知识
数组用是来存储数据的集合
数组在内存中是如干个大小一致,类型一样,地址连续的存储空间
如何访问数组中的元素?
直接使用角标、数组、下标访问元素
java中内存的分布情况
寄存器
本地方法区:存储操作系统的部分代码
方法区:存储应用程序的代码
栈内存:运行函数代码
堆内存:存储对象的
二、创建数组
格式
元素类型[] 数组名 = new 元素类型[元素个数或数组长度];
例如:new sanner中的new是创建对象
三、数组的定义
数据类型[] 数组名=new 数据类型[lenght]
创建一个指定长度的数组,里面没有数据,是默认值(但凡在堆内存中的数据都有默认初始化数值)
eg:int[] arr=new int[5];
//创建一个整形数组(int)且长度为5 然后将这个对象的地址给变量arr arr的
//[]指的一维数组
//arr中存放的第一数字的地址(拿到第一个的地址就可以找到后续的)
四、数组的大小和默认值
当创建数组后,它的元素被赋予默认值。
数值型的基本数据类型为0
char默认值是‘\u0000’
boolean默认值为false
五、如何访问数组?
数组元素可以通过下标访问。数组下标是基于 0的,也就是说,其范围从 0 开始到 数组的长度-1结束。
基本格式:
数组引用交量[下标];
创建数组后,下标变量与正常变童的使用方法相同。
六、数组的初始化语法
Java 有一个简捷的标记,称作数组初始化语法,它使用下面的语法将声明数组、创建数 组和初始化数组结合到一条语句中:
元索类型[] 数进引用变量={值 0,值1, …,值 k}
数组初始化语法中不使用操作符 new。使用数组初始化语法时,必须将声明、创建和 初始化数组都放在一条语句中。将它们分开会产生语法错误。
七、数组的常见处理
1.数组的遍历
public static void bianli(){
System.out.println("数组的遍历");
int arr[]={1,2,3,4,5,6};
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+" "); //正向的遍历
}
System.out.println();
for(int i=arr.length-1;i>=0;i--){ //逆向的遍历
System.out.print(arr[i]+" ");
}
System.out.println();
2.数组的查找
2.1线性查找
public static void find(){
System.out.println("数组的查找");
int arr[]={6,4,8,2,3,1,9,7,5};
int key=3;
int index=-1;
for(int i=0;i<arr.length;i++){ //线性查找(挨个对比)
if(arr[i]==index){
index=i;
break;
}
}
System.out.println(index);
2.2二分查找
arr=new int[]{1,2,3,4,5,6,7,8,9};//二分查找
key=8;
int minIndex=0;
int maxIndex=arr.length-1;
int midIndex=(minIndex+maxIndex)/2;
index=-1;
while(true){
if(arr[midIndex]>key){
maxIndex=midIndex-1;
}else if(arr[midIndex]<key){ //当找到时退出
minIndex=midIndex+1;
}else{
index=midIndex;
break;
}
midIndex=(minIndex+maxIndex)/2;
if(minIndex>maxIndex){ //当最小的大于最大的时退出(没有相应的数字)
break;
}
}
System.out.print(index);
}
3.数组的扩容
public static void resize(){
System.out.println("数组的扩容");
int[] arr=new int[]{1,2,3,4,5};
int deitSize=-2;//-缩 +扩
int[] newArr=new int[arr.lenght+deitSize];
//将原先的数据放入到新数组中
for(int i=0;i<Math.min(arr.length,newArr.length;){
newArr[i]=arr[i];
}
arr=newArr;//将新的数组重新赋给原数组(也就是新数组改了个名字)
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
}
4.数组的排序
4.1选择排序
public static void selectedSort(){
int[] arr={5,1,3,2,7,4,9,8,6};
for(int i=0;i<arr.length-1;i++){
for(int j=i+1;j<arr.length;j++){
if(arr[i]>arr[j]){
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
System.out.println();
}
4.2冒泡排序
public static void bubbleSort(){
int[] arr={5,1,3,2,7,4,9,8,6};
//i仅仅表示轮数
for(int i=0;i<arr.length-1;i++){
for(int j=0;j<arr.length-i-1;j++){
if(arr[j]>arr[j+1]){
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
System.out.println();
}
4.3插入排序
public static void insertSort(){
int[] arr={5,1,3,2,7,4,9,8,6};
for(int i=1;i<arr.length;i++){
int e=arr[i];
int j=i-1;
while(j>=0&&arr[j]>e){
arr[j+1]=arr[j];
j--;
}
arr[j+1]=e;
}
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
System.out.println();
}