现在的位置: 首页 > 综合 > 正文

黑马程序员-java学习笔记-第一阶段:Java初级-第四天 数组

2013年12月04日 ⁄ 综合 ⁄ 共 3476字 ⁄ 字号 评论关闭

---------------------- android培训java培训、期待与您交流! ----------------------

一、数组的定义     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 int[2];

arr[2] = new int[1];

(3)、int[][] arr = new int[3][2]; 3必须写,2可不写

(4)、格式3:int[][] arr = {{1,2,3},{4},{5},{3,4},};

---------------------- android培训java培训、期待与您交流! ----------------------

抱歉!评论已关闭.