Java数组
数组的定义
数组的声明和创建
package com. liu. array ;
import java. util. Arrays ;
public class ArrayDemo06 {
public static void main ( String [ ] args) {
int [ ] a = { 1 , 5 , 2659 , 29 , 2 , 6 , 216 } ;
System . out. println ( a) ;
System . out. println ( Arrays . toString ( a) ) ;
printArray ( a) ;
System . out. print ( "\n" ) ;
System . out. println ( "===========" ) ;
System . out. println ( "排序后:" ) ;
Arrays . sort ( a) ;
System . out. print ( Arrays . toString ( a) ) ;
System . out. print ( "\n" ) ;
System . out. println ( "===========" ) ;
Arrays . fill ( a, 2 , 4 , 0 ) ;
System . out. println ( Arrays . toString ( a) ) ;
}
public static void printArray ( int [ ] a) {
for ( int i = 0 ; i < a. length; i++ ) {
if ( i == 0 ) {
System . out. print ( "[" ) ;
}
if ( i == a. length - 1 ) {
System . out. print ( a[ i] + "]" ) ;
} else {
System . out. print ( a[ i] + ", " ) ;
}
}
}
}
内存分析
package com. liu. array ;
public class ArrayDemo01 {
public static void main ( String [ ] args) {
int [ ] nums;
int nums2[ ] ;
nums = new int [ 10 ] ;
int [ ] nums3 = new int [ 10 ] ;
nums[ 0 ] = 1 ;
nums[ 1 ] = 2 ;
nums[ 2 ] = 3 ;
nums[ 3 ] = 4 ;
nums[ 4 ] = 5 ;
nums[ 5 ] = 6 ;
nums[ 6 ] = 7 ;
nums[ 7 ] = 8 ;
nums[ 8 ] = 9 ;
nums[ 9 ] = 10 ;
System . out. println ( nums[ 10 ] ) ;
}
}
三种初始化
package com. liu. array ;
public class ArrayDemo02 {
public static void main ( String [ ] args) {
int [ ] a= { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 } ;
System . out. println ( a[ 0 ] ) ;
int [ ] b= new int [ 10 ] ;
b[ 0 ] = 10 ;
System . out. println ( b[ 0 ] ) ;
System . out. println ( b[ 1 ] ) ;
System . out. println ( b[ 2 ] ) ;
}
}
数组的四个基本特点
数组边界
数组使用
普通的for循环
package com. liu. array ;
public class ArrayDemo03 {
public static void main ( String [ ] args) {
int [ ] arrays = { 1 , 2 , 3 , 4 , 5 } ;
for ( int i= 0 ; i< arrays. length; i++ ) {
System . out. println ( arrays[ i] ) ;
}
System . out. println ( "================" ) ;
int sum= 0 ;
for ( int i = 0 ; i < arrays. length; i++ ) {
sum= sum+ arrays[ i] ;
}
System . out. println ( "sum=" + sum) ;
System . out. println ( "================" ) ;
int max = arrays[ 0 ] ;
for ( int i = 1 ; i < arrays. length; i++ ) {
if ( arrays[ i] > max) {
max= arrays[ i] ;
}
}
System . out. println ( "max=" + max) ;
}
}
For-Each循环/数组作方法入参/数组作返回值
package com. liu. array ;
public class ArrayDemo04 {
public static void main ( String [ ] args) {
int [ ] arrays = { 1 , 2 , 3 , 4 , 5 } ;
for ( int array : arrays) {
System . out. println ( array) ;
}
System . out. println ( "===========" ) ;
printArray ( arrays) ;
System . out. print ( "反转 " ) ;
int [ ] reverse = reverse ( arrays) ;
printArray ( reverse) ;
}
public static void printArray ( int [ ] arrays) {
for ( int i = 0 ; i < arrays. length; i++ ) {
System . out. print ( arrays[ i] + " " ) ;
}
}
public static int [ ] reverse ( int [ ] arrays) {
int [ ] result = new int [ arrays. length] ;
for ( int i = 0 , j= result. length- 1 ; i < arrays. length; i++ , j-- ) {
result[ j] = arrays[ i] ;
}
return result;
}
}
多维数组
二维数组
package com. liu. array ;
public class ArrayDemo05 {
public static void main ( String [ ] args) {
int [ ] [ ] array = { { 1 , 2 } , { 2 , 3 } , { 3 , 4 } , { 4 , 5 } } ;
System . out. println ( array[ 0 ] [ 0 ] ) ;
System . out. println ( "==============" ) ;
for ( int i = 0 ; i < array. length; i++ ) {
if ( i>= 1 ) {
System . out. println ( "====" ) ;
}
for ( int j = 0 ; j < array[ i] . length; j++ ) {
System . out. println ( array[ i] [ j] ) ;
}
}
}
}
Arrays类
package com. liu. array ;
import java. util. Arrays ;
public class ArrayDemo06 {
public static void main ( String [ ] args) {
int [ ] a = { 1 , 5 , 2659 , 29 , 2 , 6 , 216 } ;
System . out. println ( a) ;
System . out. println ( Arrays . toString ( a) ) ;
printArray ( a) ;
System . out. print ( "\n" ) ;
System . out. println ( "===========" ) ;
System . out. println ( "排序后:" ) ;
Arrays . sort ( a) ;
System . out. print ( Arrays . toString ( a) ) ;
}
public static void printArray ( int [ ] a) {
for ( int i = 0 ; i < a. length; i++ ) {
if ( i == 0 ) {
System . out. print ( "[" ) ;
}
if ( i == a. length - 1 ) {
System . out. print ( a[ i] + "]" ) ;
} else {
System . out. print ( a[ i] + ", " ) ;
}
}
}
}
冒泡排序
package com. liu. array ;
import java. util. Arrays ;
public class ArrayDemo07 {
public static void main ( String [ ] args) {
int [ ] a= { 1 , 1 , 1 , 15 , 6 , 1 , 15 , 1 , 6 , 1 , 26 } ;
int [ ] sort = sort ( a) ;
System . out. println ( Arrays . toString ( sort) ) ;
}
public static int [ ] sort ( int [ ] array) {
int temp= 0 ;
for ( int i = 0 ; i < array. length- 1 ; i++ ) {
for ( int j = 0 ; j < array. length- 1 - i; j++ ) {
if ( array[ j+ 1 ] < array[ j] ) {
temp= array[ j] ;
array[ j] = array[ j+ 1 ] ;
array[ j+ 1 ] = temp;
}
}
}
return array;
}
}
优化
添加了一个 flag 变量来检查是否进行了交换。 如果某一轮没有发生任何交换,说明数组已经有序,可以提前终止排序。 这样可以减少不必要的循环次数,从而减少排序次数。
package com. liu. array ;
import java. util. Arrays ;
public class ArrayDemo07yh {
public static void main ( String [ ] args) {
int [ ] a= { 1 , 1 , 1 , 15 , 6 , 1 , 15 , 1 , 6 , 1 , 26 } ;
int [ ] sort = sort ( a) ;
System . out. println ( Arrays . toString ( sort) ) ;
}
public static int [ ] sort ( int [ ] array) {
int temp= 0 ;
for ( int i = 0 ; i < array. length- 1 ; i++ ) {
boolean flag= false ;
for ( int j = 0 ; j < array. length- 1 - i; j++ ) {
if ( array[ j+ 1 ] < array[ j] ) {
temp= array[ j] ;
array[ j] = array[ j+ 1 ] ;
array[ j+ 1 ] = temp;
flag= true ;
}
}
if ( flag== false ) {
break ;
}
}
return array;
}
}
稀疏数组
package com. liu. array ;
public class ArrayDemo08 {
public static void main ( String [ ] args) {
int [ ] [ ] array1 = new int [ 11 ] [ 11 ] ;
array1[ 1 ] [ 2 ] = 1 ;
array1[ 2 ] [ 3 ] = 2 ;
System . out. println ( "输出原始数组" ) ;
for ( int [ ] ints: array1) {
for ( int anInt : ints) {
System . out. print ( anInt+ "\t" ) ;
}
System . out. println ( ) ;
}
System . out. println ( "-------------------------" ) ;
int sum= 0 ;
for ( int i = 0 ; i < 11 ; i++ ) {
for ( int j = 0 ; j < 11 ; j++ ) {
if ( array1[ i] [ j] != 0 ) {
sum++ ;
}
}
}
System . out. println ( "有效值个数" + sum) ;
System . out. println ( "-------------------------------" ) ;
int [ ] [ ] array2 = new int [ sum+ 1 ] [ 3 ] ;
array2[ 0 ] [ 0 ] = 11 ;
array2[ 0 ] [ 1 ] = 11 ;
array2[ 0 ] [ 2 ] = sum;
int count= 0 ;
for ( int i = 0 ; i < array1. length; i++ ) {
for ( int j = 0 ; j < array1[ i] . length; j++ ) {
if ( array1[ i] [ j] != 0 ) {
count++ ;
array2[ count] [ 0 ] = i;
array2[ count] [ 1 ] = j;
array2[ count] [ 2 ] = array1[ i] [ j] ;
}
}
}
System . out. println ( "输出稀疏数组" ) ;
for ( int i = 0 ; i < array2. length; i++ ) {
System . out. println ( array2[ i] [ 0 ] + "\t"
+ array2[ i] [ 1 ] + "\t"
+ array2[ i] [ 2 ] + "\t" ) ;
}
System . out. println ( "-------------------------------" ) ;
System . out. println ( "还原数组" ) ;
int [ ] [ ] array3 = new int [ array2[ 0 ] [ 0 ] ] [ array2[ 0 ] [ 1 ] ] ;
for ( int i = 1 ; i < array2. length; i++ ) {
array3[ array2[ i] [ 0 ] ] [ array2[ i] [ 1 ] ] = array2[ i] [ 2 ] ;
}
System . out. println ( "输出还原的数组" ) ;
for ( int [ ] ints: array3) {
for ( int anInt : ints) {
System . out. print ( anInt+ "\t" ) ;
}
System . out. println ( ) ;
}
}
}