数组

来源:互联网 发布:mysql deleted表 编辑:程序博客网 时间:2024/06/06 14:21

1.数组的常用算法

1.1删除元素:

数组中添加或删除元素需要大量的移位,效率较低。

 

/**
*从数组中删除指定的元素
*分析:
1.根据元素的值获取该元素在数组中的下标位置
2.将指定下标index以后的元素向前移位
* 3.将数组的最后一个元素赋值为0(0为int类型数组元素的默认值)
*/
public static void deleteElement2(int[] arr,int element){
int index=-1;//保存元素的下标位置
//删除前遍历输出
System.out.println("删除前数组元素为:");
for(int i=0;i<arr.length;i++){
//查找元素所在下标位置
if(element==arr[i]){
index=i;
}
System.out.print(arr[i]+"\t");
}
System.out.println("");//换行

//将指定下标index以后的元素向前移位
for(int i=index;i<arr.length-1;i++){
arr[i]=arr[i+1];
}
//将数组的最后一个元素赋值为0
arr[arr.length-1]=0;
System.out.println("删除后数组元素为:");
for(int n:arr){
System.out.print(n+"\t");
}
}
public static void main(String[] args){
int[] nums={10,20,30,40,50};
deleteElement2(nums,40);
}

1.2冒泡排序:

原理:将相近的两个数字进行比较,大的向后去,小的向前赶。每比较一轮可以确定一个最大值。
冒泡排序口诀:
N个数字来排队,两两比较小靠前。
外层循环N-1(控制需要比较的轮数)
内层循环N-1-i(控制每轮需要比较的次数)

冒泡排序:是一种经典的排序算法,类似于生活中的开水的气泡。
原理:相近的数两两进行比较,数字小的向前,数字大的向后。
口诀:N个数字来排队,两两比较小靠前
外层循环N-1(控制需要比较的轮数)
内层循环N-1-i(控制每轮需要比较次数)
*/
public class bao{
//使用冒泡进行排序
public static void maopao(int[] arr){
//外层循环:控制需要比较的轮数
for(int i=0;i<arr.length-1;i++){
//内层循环:控制每轮需要比较的次数
for(int j=0;j<arr.length-1-i;j++){
//交换位置
if(arr[j]>arr[j+1]){
int temp = arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
}

1.3查找元素:

二分法查找:

/*
使用二分法(折半)查找元素所在位置
前提:待查找的数组必须是有序(大小顺序)
原理:将要查找元素与数组中的中间元素进行比较。
如果必中间元素值小,在左半边查找
如果必中间元素值大,在右半边查找

*/
public static int erfen(int[] arr,int ele){
int index=-1;//要查找的元素在数组中的下标位置
int left=0;//开始位置
int right=arr.length-1;//结束位置
int middle;//中间位置
while(left<=right){
middle=(left+right)/2;
if(arr[middle]==ele){
index=middle;
break;
}else if(arr[middle]>ele){//中间元素的值大于要查找的元素,在左半边查找
right = middle-1;
}else if(arr[middle]<ele){//中间元素的值小于要查找的元素,在右半边查找
left = middle+1;
}
}
return index;
}

2.java.util.Arrays工具类:

 

除java.lang包下的类和接口可以直接使用之外,其他包下的类和接口在使用时,需要使用import关键字进行导包
java.util.Arrays类:提供了一下对数组操作的方法。
常用方法:
sort(...):对数组进行排序,默认使用升序
toString(..);可以将数组转换成字符串。
binarySearch(....):二分法进行搜索指定元素,并返回元素的下标
fill(..):将数组中的元素替换成指定的数字
copyOf(..):将数组指定长度的元素复制到一个新数组并返回
copyRange():复制数组中指定范围的元素到新数组,并返回。

3.命令行参数:

 

public static void main(String[] args){

 

}
命令行参数作用:可以在执行java命令的过程中为main方法传递参数。
语法: java 类名 值1,值2...
注意:值1,值2..应该是字符串类型,命令行参数会将值1,值2...封装到args中传入给main方法,下标从0开始

 

 

4.可变参数:

 

可变参数(...):从JDK1.5之后引入的新特性。
作用:避免因相同类型的参数个数不同而编写大量重载方法。
可变参数可以代表0或多个指定类型的参数。
可变参数只能作为方法的形参(在方法的定义时)使用,并且一个方法中最多只能有1个可变参数,位置必须放在参数的最后一个位置。
处理时可以将可变参数当作数组进行处理。

5.二维数组

5.1定义:

二维数组:一个数组中每一个元素又是一个数组(数组嵌套数组)。

5.2声明和初始化:

语法:
数据类型[][] 数组名 = new 数据类型[rows][cols];
eg:
int[][]nums=new int[3][2];
nums[0][0]=1;
nums[0][1]=2;
...
注意:二维数组声明时需要按照高纬度向低纬度的顺序指定。
int[][]nums = new int[3][];//合法
int[][]nums = new int[][3];//不合法

静态初始化:
int[][]nums={{1,2},{3,4},{5,6}};
int[][]nums={{1,2},{3,4},{5,6,7}};
int[][]nums;
nums={{1,2},{3,4},{5,6}};//错误