数组声明

int[] second={};//second储存的是地址;int是second的变量类型;second是变量名称;

数组输出

for(int i=0; i{
System.out.println(second[i]);
}

对于非基本数据变量来说,可通过System.identityHashCode(second)方法来获取变量中的”地址”
数组不是基本类型变量,储存的是地址而不是数。

静态初始化

int[]first =new int[]{10,20,30};//只有在声明的时候才可以赋值
first={100,200,300};//是错误的

动态初始化

int[]second=new int[5];
给数组赋值(初始化);
for(int i=0;i{
second[i]=random.nextInt();//需要import java.util.Random;
}

冒泡排序

依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。
for(int r=0;r{
for(int i=0;iif(array[i]>array[i+1])
{
array[i]=array[i]^array[i+1];
array[i+1]=array[i]^array[i+1];
array[i]=array[i]^array[i+1];
}
}

选择排序

Java选择排序的思想(以从小到大排序为例,从大到小排序于此相同):
在arr[0]到arr[n-1]中选出最小(大)的的数与arr[0]交换位置,
在arr[1]到arr[n-1]中选出最小(大)的的数与arr[1]交换位置,
在arr[2]到arr[n-1]中选出最小(大)的的数与arr[2]交换位置,
public static void selectionSort(int[] arr){
for(int i=0;i for(int j=i+1;j if(arr[i]>arr[j]){
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}
}

多维数组

如果某个数组容量内部又是一个数组,则称之为多维数组
遍历二位数字(两个循环)
for(int i=0;i{
for(int j=0;j{
System.out.println(x[i][j]);
}
}

空指针异常问题

/*
1、数组类型是引用类型,数组变量是引用变量
2、数组变量中存储的是数组对象在堆区中的首地址
3、字面量 null 可以赋值给任意类型的引用变量
4、当通过 引用变量 访问 实例变量 或 实例方法 时,如果 引用变量 取值为 null 则会导致 NPE
/
public class ArrayHelper {
public static boolean equal( int[] first , int[] second ) {
// 当传入的参数中 first 或 second 中有一个为 null 时会触发 NullPointerException
// 对于 实例变量 和 实例方法 来说,但凡是 原点运算符 之前的 变量取值为 null 时就会抛出 空指针异常 ( NPE : NullPointerException )
if( first.length != second.length ) {
// 如果两个数组中元素个数不同,则直接返回 false ,方法立即结束
return false ;
}
for ( int i = 0 ; i < first.length; i++ ) {
if( first[ i ] != second[ i ] ) {
// 但凡是找到任意的一对不相等的元素,就直接返回 false ,方法立即结束
return false ;
}
}
return true ;
}
public static void main(String[] args) {
int[] first = null ; // 字面量 null 可以赋值给任意类型的引用变量
System.out.println( first );
int[] second = null ;
System.out.println( second );
// 【下行代码执行时会抛出 NPE ( NullPointerException ,中文称作 空指针异常 ) 】
boolean b = ArrayHelper.equal( first , second ); // java.lang.NullPointerException
System.out.println( b );
// 创建新的数组对象并使用数组常量对数组进行初始化,最后将数组对象的首地址赋值给 数组变量
first = new int[] { 1 , 3 , 5 , 7 , 9 };
// int[] second = { 2 , 4 , 6 , 8 , 10 }; // 无独有偶
second = new int[] { 1 , 3 , 5 , 7 , 9 };
boolean x = ArrayHelper.equal( first , second );
System.out.println( x );

}
}

数组复制

使用System.arraycopycarry()方法:
/*
1、使用 System 类中的 类方法 arraycopy 可以实现【复制数组元素】,其用法为:
System.arraycopy( source , srcBegin , destination , destBegin , length )
其中:
source 表示 源数组
srcBegin 表示 从源数组 的 哪个位置开始复制
destination 表示 目标数组
destBegin 表示 在 目标数组 的 哪个位置开始 存放复制后的元素值
length 表示 复制的元素个数

2、使用 System.arraycopy 复制数组元素时,源数组 和 目标数组 可以是同一个数组
/
eg:
public class Goose {
public void traversal(int[] array) {
// 为什么判断 array 不等于 null ?
// 为什么判断 array.length 大于零 ?
if (array != null && array.length > 0) {
for (int i = 0; i < array.length; i++) {
System.out.print( array[i] );
System.out.print( (i < array.length - 1) ? “ , “ : “” );
}
System.out.println();
}
}
public static void main(String[] args) {
Goose g = new Goose();
int[] first = new int[] { 10 , 7 , 20 , 5 , 16 , 30 , 40 , 50 } ;
g.traversal( first );
int[] second = new int[ 20 ];
g.traversal( second );
// System.arraycopy( source , srcBegin , destination , destBegin , length )
System.arraycopy( first , 3 , second , 10 , 4 ); // 注意是 arraycopy 不是 copyarray
g.traversal( second );
// System.out.println( second[ -1 ] ); // 运行时会抛出 java.lang.ArrayIndexOutOfBoundsException ( 数组下标越界异常 )
// 访问数组中的元素时如果下标超出了 [ 0 , array.length - 1 ] 范围 则会抛出 ArrayIndexOutOfBoundsException
// System.out.println( second[ second.length ] ); // 运行时会抛出ArrayIndexOutOfBoundsException
int[] third = new int[ 10 ];
third[ 0 ] = 78 ;
third[ 1 ] = 99 ;
third[ 2 ] = 100 ;
third[ 3 ] = 22 ;
third[ 4 ] = 25 ;
g.traversal( third );
System.arraycopy( third , 0 , third , 5 , 5 );
g.traversal( third );
}
}

==运算符比较引用变量

/*
1、从本质上讲所有的变量都是用来存储数据的
2、使用 == 运算符比较两个变量时,实际上是比较这两个变量中存储的值 (不管你存的是什么值)
3、使用 == 运算符比较两个引用变量时,仅比较两个引用变量中存储的值 ( 与引用变量所指向的对象无关 )
*/
public class Duck {
public static void main(String[] args) {
int[] first = null ;
int[] second = null ;
int[] third = null ;
System.out.println( first == second ); // true
System.out.println( second == third ); // true
first = new int[] { 1 , 3 , 5 , 7 , 9 };
second = new int[] { 1 , 3 , 5 , 7 , 9 };
System.out.println( first == second ); // false
System.out.println( “first : “ + System.identityHashCode( first ) );
System.out.println( “second : “ + System.identityHashCode( second ) );
third = second ;
System.out.println( second == third ); // true
System.out.println( “second : “ + System.identityHashCode( second ) );
System.out.println( “third : “ + System.identityHashCode( third ) );
third[ 1 ] = 33 ;
System.out.println( second[ 1 ] );//33

}
}