Java学习个人备忘录之数组

来源:互联网 发布:出国关闭蜂窝移动数据 编辑:程序博客网 时间:2024/05/21 19:43
数组

概念:同一种类型数据的集合,其实数组就是一个容器.

数组的好处:可以自动给数组中的元素从0开始编号,方便操作这些元素.

格式1:元素类型[] 数组名 = new 元素类型[元素个数];

格式2:元素类型[] 数组名 = new 元素类型[]{元素1,元素2,元素3,....,元素N};


内存的划分:
1:寄存器
2:本地方法区
3:方法区
4:栈内存
  存储的都是局部变量
  而且变量所属的作用域一旦结束,该变量就自动释放
5: 堆内存
存储的是数组和对象(其实数组就是对象) 凡是new 建立的都在堆中.
特点:
1.每一个实体都有首地址值
2.堆内存中的每一个变量都有默认初始化值,根据类型的不同而不同.

class ArrayDemo{public static void main(String[] args){int[] arr = new int[3];System.out.println(arr(3)); //ArrayIndexOutOfBoundsException//当访问到数组中不存在的角标时,就会发生该异常.arr = null;System.out.println(arr[0]);//NullpointerExeception//当引用变量没有任何实体指向时,还在用其操作实体,就会发生该异常.}}

 

对数组操作最基本的动作就是存和取。
核心思想:就是对角标的操作。

常见数组应用算法

数组遍历

int[] arr = {89,34,280,15};for (int x = 0; x<arr.length ; x++ ){System.out.println(arr[x]);}


数组最值

public static int getMax(int[] arr){//定义变量记录较大的值int max = arr[0];for (int x=1; x<arr.length ; x++ ){if(arr[x]>max){max = arr[x];}}return max;}
//第二种方法public static int getMax(int[] arr){//定义变量记录较大的值int max = 0;for (int x=1; x<arr.length ; x++ ){if(arr[x]>arr[max]){max = x;}}return arr[max];  //这里返回的最大值的角标}


选择排序

public static void selectSort(int[] arr){for (int x=0; x<arr.length ; x++ ){for (int y=x+1; y<arr.length ; y++ ){if (arr[x]>arr[y]){int temp = arr[x];arr[x] = arr[y];arr[y] = temp;}}}}


冒泡排序

/*内循环:-1: 为了避免角标越界-x: 为了让外循环增加一次,内循环参数与比较的元素个数递减.*/for (int x=0; x<arr.length ; x++ ){for (int y=0; y<arr.length-1-x ; y++ ){if (arr[y]>arr[y+1]){int temp = arr[y];arr[y] = arr[y+1];arr[y+1] = temp;}}}// 方法二:for (int x=arr.length-1; x>0 ; x-- ){for (int y=0; y<x ; y++ ){if (arr[y]>arr[y+1]){int temp = arr[y];arr[y] = arr[y+1];arr[y+1] = temp;}}}


查找: 返回数组的角标

public static getIndex(int[] arr,int value){for (int x=0; x<arr.length ; x++ ){if (arr[x] == key){return x;}}return -1;}


进制转换 10->16

public static void toHex(int num){for (int x=0; x<8 ; x++ ){int temp = num & 15;if (temp>9)System.out.print((char)(temp-10+'A'));elseSystem.out.print(temp);num = num >>> 4;}}


什么时候使用数组呢?
如果数据出现了对应关系,而且对应关系的一方是有序的数字编号,并作为角标使用。这时就必须要想到数组的使用。

就可以将这些数据存储到数组中,根据运算的结果作为角标直接去查数组中对应的元素即可。
这种方式: 称为查表法.

public static void toHex_1(int num){// 定义一个对应关系表char[] chs = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};for(int x=0; x<8; x++){int temp = num & 15;System.out.println(chs[temp]);num = num >>> 4;}}//但是这个方法显示出来的写过是反着的public static void toHex_2(int num){if (num == 0){System.out.println("0");return;}//定义一个对应关系表char[] chs = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};/*一会查表会查到比较多的数据数据一多,就先存储起来,在进行操作.所以定义一个数组---临时容器.*/char[] = arr = new char[8];int pos = arr.length;while(num != 0){int temp = num & 15;arr[--pos] = chs[temp];num = num >>> 4;}System.out.println("pos=" + pos);for (int x = pos; x<arr.length ; x++ ){System.out.println(arr[x] + ",");}}

 


二维数组定义的格式

class Array2Demo{public static void main(String[] args){int[][] arr = new int[3][2]; //这就是二维数组的定义格式.//该数组中有3个大箱子,每个大箱子中有2个小箱子System.out.println(arr); //[I@15db9742   @左边是实体的类型.   @右边是实体的哈希值.System.out.println(arr);//直接打印二维数组System.out.println(arr[0]); //直接打印二维数组中角标0下面的一维数组/*********************************************************************/int[][] arr = new int[3][];arr[0] = new int[2];arr[1] = new int[1];arr[2] = new int[3];//分别对二维数组中的每一个小数组进行初始化./**********************************************************************/int[][] arr = new int[3][2];System.out.println(arr.length); //打印二维数组的长度,其实就是一维数组的个数System.out.println(arr[1].length);/***********************************************************************///第二种定义方式int[][] arr = {{8,3,6},{7,4,9},{3,0,7}};int sum = 0;//遍历二维数组for (int x=0; x<arr.length ; x++ ){for (int y=0; y<arr[x].length ; y++ ){System.out.println(arr[x][y]+",");sum += arr[x][y];}}System.out.println("sum="+sum);}}

 

原创粉丝点击