转---黑马程序员-Java学习笔记(数组)

数组

定义和初始化:

int[]x = new int[3];//x是数组类型,默认初始化为0(int), 0.0f, 0,0(double) ,false(bool)

x处于栈内存中

x = null;//x不指向数组,这时候如果数组没有其他指向值,会当成垃圾处理

数组在内存中的存储方式:

内存结构:

运行的时候才会开辟内存空间,(因此超出数组范围编译不会报错,运行时才会报错)

栈内存:数据使用完毕,会自动释放空间(局部变量)

堆内存:new int[2],数组和对象,每一个实体都有一个位置,(垃圾回收机制)

数组初始化

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

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

3)int[]arr= new int[5];

arr[0]=1;

arr[1]=2;

.......

对数组的一些操作:

/*

获取数组中的最大值

思路:

获取最值需要进行比较,每次比较都会有一个较大的值,因为该值不确定,需要一个变量进行存储.

让数组中的每一个元素都和这个变量中的值进行比较,如果大于变量中的值,就用该变量记录较大值

当所有元素都比较完成,那么该变量就是最大值

步骤:

定义变量,初始化为数组中任意一个元素

通过循环语句对数组进行遍历

在变量中定义判断条件,如果遍历到的元素比变量值大,就将其赋值给变量需要

需要定义一个功能来完成,以便提高复用性

明确结果,数组中的最大元素int

未知内容,:一个数组,int[]

*/

        //计算数组最大值

        int arr[] ={2,5,6,7,8,32,4,2,4,9,4,11,3,34};

        int max = arr[0];

        for(int i = 1;i<arr.length;i++)

        {            

            if(arr[i] > max)

                max = arr[i];

        }

数组排序

  1. 选择排序,嵌套循环(比如5个元素的数组,arr[0]比较4次,arr[1]比较3次.......)

    第一个元素和后面的所有元素对比,发现比他小的就替换值,一轮比完第一个元素就是最小值;

    然后,第二个元素和后面的所有元素对比,发现比他小的就替换值,第二轮轮比完第二个元素就是第二个最小值;

    ……以此类推

    原理如下图:

// int arr[] ={2,5,6,7,8,32,4,2,4,9,4,11,3,34};

//选择排序,数组第一个数跟后面所有相比,最小值放到最前,然后第二个数跟后面所有数相比,以此类推

        for(int i=0;i<arr.length-1;i++)

        {

            for(int j=i+1;j<arr.length;j++)

            {

                int temp = arr[i];

                if(temp > arr[j])//如果后面的元素比他小,就替换

                {    

                    arr[i] = arr[j];

                    arr[j] = temp;

                }

            }

        }

  1. 冒泡排序:相邻两个元素进行比较,如果符合条件则换位;

    第一轮,第一个元素和第二个元素比,如果比他小就替换,

    第二个元素跟第三个比,如果比他小就替换…….全部对比完,则最后的元素即是最大值;

    第二轮,去掉最后一个元素,前面的元素挨个对比,则对比完倒数第二个元素即是第二个最大值;

    …….以此类推

    原理如下:

//冒泡排序,相邻的两个元素比较,如果符合条件,则换位    

for(int i=arr.length-1;i>0;i--)    {

            for(int j= 0;j<i;j++)

            {

                int temp = arr[j];

                if(temp < arr[j+1])//挨个对比,满足条件换位

                {

                    arr[j] = arr[j+1];

                    arr[j+1] = temp;

                }

            }

        }

数组的查找:

  1. 顺序查找:

    遍历数组,查找到需要的内容

  2. 折半查找:(数组必须是有序的)

            //折半查找,数组必须是有序的

            int[] arr = {3,5,8,44,47,51,57,59,72,77,79,82,84,97,101,204,304};

     

            int num = 304;

            int min = 0;

            int max = arr.length-1;

            int location = -1;

            while(min <=max)        //当最小角标>最大角标时,代表没有找到,退出while循环

            {

                int mid = (max+min)/2;

                if(arr[mid] == num)    //若找到,则直接退出循环

                {

                    location = mid;

                    break;

                }

                else if(arr[mid] > num)     //若中间值比寻找值大,说明在上半区

                    max = mid-1;

                else if(arr[mid] < num)    //若中间值比寻找值小,说明在下半区

                    min = mid+1;

     

            }

     

二维数组:

普通定义:int [][]arr = new int[3][4];//每个组都是4个元素

特殊定义:int [][]arr = new int[3][]; //arr.length == 3

arr[0] = new int [3];//arr[0].length == 3

arr[1] = new int[2];//arr[1].length == 2

arr[2] = new int[4];//arr[2].length == 4

int[]x,y[];//x是一维数组,y是二维

相当于    int[]x;

     int[] y[];

 

http://blog.163.com/ljj1219@126/blog/static/143633241201472925918508/

posted @ 2016-12-12 14:14  mayya  阅读(160)  评论(0)    收藏  举报