一、数组的定义 new操作符在内存中产生容器实体
1、概念:同一种类型数据的集合,其实数组就是一个容器。
2、数组的好处:可以自动给数组中的元素从0开始编号,方便操作这些元素。
3、数组为数组类型,为引用数据类型,前面的格式类型为容器中数据的类型
4、格式1:元素类型[] 数组名 = new 元素类型[元素个数或数组长度]。
int[] arr = new int[5];
5、格式2:元素类型[] 数组名 = new 元素类型[]{元素,元素,元素,元素,元素}
int[] arr = new int[]{3,4,5,6} //静态初始化
int[] arr = {3,4,5,6}
int arr[] = {3,4,5,6} //这个也对,但建议不要这么写
6、范例
(1)、 int[] x = new int[3];
int[] y = x;
y[1] = 1;
则 x[1] 也为 1,引用类型
(2)、 int[] x = new int[3];
int[] y = new int[3];
y[1] = 1;
则 x[1] 还为 0,两个内存空间
(3)、int[] x = new int[3];
System.out.print(x[5]);
编译的时候不会报错,因为只是编译,但是当运行时,会分配内存空间,一使用x[5],就会报异常
java.lang.ArrayIndexOutOfBoundsException 数组脚标越界异常
操作数组时,访问到了数组中不存在的角标
(4)、int[] x = new int[3];
x = null; //此时,x被赋值null,已经不再指向数组了,不是数组
System.out.print(x[5]);
java.lang.NullpointerException空指针异常
运行时,会报空指针异常:当引用没有任何指向值为null的情况,该引用还在用于操作实体。
7、数组操作
数组中有一个属性可以直接获取到数组元素的个数:.length
使用方式:数组名称.length
(1)、获取数组中的元素
int[] arr = new int[3];
arr[1];
(2)、遍历
int[] arr = new int[3];
for(int x=0;x<3;x++){
System.out.println(arr[x]);
}
(3)、length 遍历
int[] arr = new int[3];
for(int x=0;x<x.length;x++){
System.out.println(arr[x]);
}
(4)、直接print(数组)
会打印出 [1@十六进制 [:表示数组,1:表示类型,@:后面是地址
(5)、获取数组中的最大值
public class Demo{
public static void main(String args[]){
int[] num = new int[]{32,4,35,2,78,45,23,43};
int max = theFunction(num);
System.out.println(“max number is :”max);
}
public static int theFunction(int[] num){
int max = num[0];
for(int x=0;x<num.length;x++){
max = max<num[x]?num[x]:max;
}
return max;
}
}
(6)、数组选择排序法
public static void theFunction(int[] num){
int temp = 0;
for(int x=0;x<num.length-1;x++){
for(int y=x+1;y<num.length;y++){
if(num[x]>num[y]){
temp = num[x];
num[x] = num[y];
num[y] = temp;
}
}
}
(7)、冒泡排序:相邻两个元素进行比较,如果符合条件则换位 //效率低,堆换位慢,希尔排序快
public static void theFunction(int[] num){
int temp = 0;
for(int x=0;x<num.length-1;x++){
for(int y=0;y<num.length-x-1;y++){
if(num[y]>num[y+1]){
temp = num[y+1];
num[y+1] = num[y];
num[y] = temp;
}
}
}
}
(8)、java 自带排序
import java.util.*; //引入
Arrays.sort(num);
(9)、数组的查找 //返回 角标,没有找到返回-1,惯例
折半查找法 只针对于有序的数组
(1)、第一种
public static int halfSearch(int[] arr,int key){
int min,max,mid;
min = 0;
max = arr.length-1;
mid = (min+max)/2;
while(arr[mid]!=key){
if(key>arr[mid]){
min = mid + 1;
}else if(key<arr[mid]){
min = max - 1;
}
if(min>max){
return -1;
}
mid = (min+max)/2;
}
return mid;
}
(2)、第二种
public static int halfSearch(int[] arr,int key){
int min,max,mid;
min = 0;
max = arr.length-1;
while(min<=max){
mid = (min+max)>>1;
if(key>arr[mid]){
min = mid +1;
}else if(key<arr[mid]){
max = mid - 1;
}else{
return mid;
}
}
return -1;
}
8、进制转换
(1)、十进制 ---》 二进制
public static void toBin(int num){
StringBuffer sb = new StringBuffer();
while(num>0){
sb.append(num%2);
num = num>>1;
}
System.out.print(sb.reverse());
}
(2)、十进制 -----》十六进制
public static void toBin(int num){
StringBuffer sb = new StringBuffer();
for(int x=0;x<8;x++){
int temp = num&15;
if(temp>9){
sb.append((char)(temp-10+'a'));
}else{
sb.append(temp);
}
num = num >>>4;
}
System.out.print(sb.reverse());
}
(3)、转换优化,可十进制转二进制,十进制,八进制
public static void trans(int num,int base,int offset){
if(num==0){
System.out.print('0');
return;
}
char[] chs = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
char[] arr = new char[32];
int pos = arr.length;
while(num!=0){
int temp = num&base;
arr[--pos] = chs[temp];
num = num >>> offset;
}
for(int x=pos;x<arr.length;x++){
System.out.print(arr[x]);
}
}
8、二维数组
(1)、格式:int[][] arr = new int[3][2];
定义了名称为arr的二维数组
二维数组中有3个以为数组
每个以为数组中有两个元素
一维数组的名称分别为 arr[0] arr[1] arr[2]
给第一个一维数组 1 脚标 位赋值为78 的写法是: arr[0][1] = 78;
(2)、格式2:int[][] arr = new int[3][];
二维数组中有3个一维数组
每个一维数组都是默认初始化值 null
可以对这三个一维数组分别进行初始化
arr[0] = new int[3];
arr[1] = new
补充:软件开发 , Java ,