黑马程序员——java---数组

来源:互联网 发布:手机淘宝收获地址吗 编辑:程序博客网 时间:2024/05/20 22:00
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

概念

同一种类型数据的集合,其实数组就是一个容器。

数组的好处

可以自动给数组中的元素从0开始编号,方便操作这个元素。

格式

1.元素类型[] 数组名 = new 元素类型[元素个数或数组长度]

示例:int[] arr  = new int [5];

2.元素类型[] 数组名 = new 元素类型[]{元素,元素,.......};

Int [] arr = new {3,4,6,1};

数组中的数组

二维数组:(其实是一个一维数组,它的每一个元素又是一个一维数组),

可以看做是一张表格。

初始化:

      动态初始化

       int[ ][ ]  arr = new int[3][2];

       定义了一个二维数组,其中有3个一维数组,每一个一维数组中有2个元素

        静态初始化

        int[ ][ ]  arr = new int[][]{{1,2},{3,4},{5,6}};

        int[ ][ ]  arr = {{1,2},{3,4},{5,6}};

public class Demo3 {public static void main(String[] args) {int age[][] = new int[][]{{1,2},{3,4},{5,6,7}};System.out.println(age[0].length);//2System.out.println(age[2].length);//3}}


 

内存结构

Java程序在运行时,需要在内存中的分配空间。为了提高运算效率,有对空间进行了不同区域的划分,因为每一片区域都有它特定的处理数据方式和内存管理方式。

栈内存

用于存储局部变量,当数据使用完,所占空间会自动释放。

堆内存

数组合对象,通过new建立的实例都存放在堆内存中。

每一个实体都有内存地址值。

实体中的变量都有默认初始化值实体不在被使用,会在不确定的实践内被垃圾回收器回收。

异常

1、数组脚标越界异常(ArrayIndexOutOfBoundsException)。例:

             int[] arr = new int[2];

              System.out.println(arr[3]);

            访问到了数组中的不存在的脚标时发生。

    2、空指针异常(NullPointerException)。例:

            int[]arr = null;

             System.out.println(arr[0]);

            arr引用没有指向实体,却在操作实体中的元素时

lenth方法 

获取数组中的元素。通常会用到遍历

lenth可获取数组的长度

public class DeMo1 {public static void main(String[] args) {int [] arr = {3,4,2,7,6};//获取数组中的元素。通常会用到遍历。//数组中有一个属性可以直接获取到数组元素个数。length。//获取数组长度System.out.println(arr.length);for(int x = 0; x<arr.length; x++){System.out.println("arr["+x+"]="+arr[x]+";");}}}


 

练习:

1获取数组中的最大值:

public class DeMo2 {/** *获取数组中的最大值。 *思路: *1:获取最值需要进行比较。每一次比较都会有一个较大的值。因为该值不确定。 *通过一个变量临时存储。 *2:让数组中的每一个元素都和这个变量中的值进行比较。如果大于了变量中的值就用该变量记录较大值。 *3:当所有的元素都比较完成,那么该变量中存储的数组中的最大值了。 */public static void main(String[] args) {//定义一个数组。int[] arr = {3,7,6,9,2,4,11,13};//定义一个用于输出数组最大值的方法。int max = max(arr);System.out.println(max);}private static int max(int[] arr) {//定义一个用于临时存储的变量。int max =0;for(int x = 0; x<arr.length; x++){if(arr[x]>max)//如果遍历的数大于了max就把便利的数的值赋给max。max = arr[x];}return max;}}

2选择排序

public class DeMo3 {/** * 选择排序。 思路: 1:定义一个数组,遍历里面的数。 2:在遍历数组的同时用第一个数跟数组中所有的数比一遍。以此类推。 * 3:定义一个交换比较的数方法。 */public static void main(String[] args) {// 定义一个数组。int[] arr = { 2, 3, 5, 6, 9, 1, 12 };//定义一个方法用于比较每个数。arraySort(arr);}private static void arraySort(int[] arr) {for (int x = 0; x < arr.length-1; 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;}}}//使打印后看起来更有好看。System.out.print("[");for(int x = 0; x<arr.length; x++){if(x!=arr.length-1)System.out.print(arr[x]+",");elseSystem.out.println(arr[x]+"]");}}}

3冒泡排序

原理相邻的两个元素进行比较,如果符合条件换位。

public class DeMo4 {/** *冒泡排序 *思路: *1:定义一个数组把相邻两个元素进行比较。 *2:满足指定条件交换位置。 */public static void main(String[] args) {//定义一个数组。int[] arr = {2,4,6,7,9,12,42,11};//定义一个符合冒泡排序的方法。bubbleSort(arr);}private static void bubbleSort(int[] arr) {// for(int x = 0; x<arr.length; x++){for(int y = 0; y<arr.length-x-1; y++){if(arr[y]>arr[y+1]){int temp = arr[y];arr[y] = arr[y+1];arr[y+1] = temp;}}}//使打印后看起来更有好看。System.out.print("[");for(int x = 0; x<arr.length; x++){if(x!=arr.length-1)System.out.print(arr[x]+",");elseSystem.out.println(arr[x]+"]");}}}

4.折半查找

折半查找可以提高效率但是但是必须要保证该数组是有序的数组。

public class DeMo5 {/** * 折半查找 * 思路: * 1:定义一个数组。定义三个变量分别记入最大值最小值和中间值。 * 2:如果要找的数在中间值的右边则把最小值变成中间值+1 * 3:如果要找的数在中间值的左边则把最大值变成中间值-1 */public static void main(String[] args) {// 定义一个数组。int[] arr = {1,2,4,5,7,9,12,13,16,34};//定义一个查找的方法。int index = halfSearch(arr,9);System.out.println(index);}private static int halfSearch(int[] arr, int i) {// 定义三个变量来实施查找。int min = 0;int max = arr.length-1;int mid = (min+max)/2;while(arr[mid]!=i){if(i<arr[mid])max = mid-1;else if(i>arr[mid])min = mid +1;mid = (min+max)/2;}return mid;}}



 

0 0
原创粉丝点击