Java学习之数组

一、概述:

1、定义:数组是一种数据结构,用来存储同一类型值的集合。简单来说,就是一个存放同种类型的容器。
2、使用数组的好处:数组可将其中的每一个值自动添加对应的编号,每一个值称为一个元素,元素从0开始编号,方便对每个元素的管理。

二、格式:

1、格式一:
数据元素类型[] 变量名 = new 元素类型[参数]; 说明:参数表示数组中元素的个数。
如:

int[] a = new int[10];

内存分配情况如图:


Paste_Image.png

2、格式二:
元素类型[] 变量名 = new 元素类型[]{元素1,元素2,......};
如:

int[] a = new int[10]{0,1,2,3,4,5,6,7,8,9};

三、数组赋值:

1、数组的初始化:
1)对于上面两种格式的赋值:
第一种是隐式初始化,每个元素的值都为相对应的各类型的初始化值,具体看数据类型的总结。
第二种是显式初始化,每个元素都已经被赋予初值。
2)还可以定义匿名数组:
new int[]{3,2,6,7,9,1,4}
2、数组的间的赋值:
Java中,可以将一个数组的变量的引用值赋给另一个数组的变量。如:

String[] b = a;

具体见图示:

Paste_Image.png

四、多维数组:也称数组中的数组

这里主要总结一下二维数组:
1、格式:
1)格式一:

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

定义了一个名为arr的数组,数组中有2个一维数组,每个一维数组中含有3个元素。
可以对其赋值:

arr[0][0] = 3;

即对第一个一位数组的第一个元素赋值。

Paste_Image.png

2)格式二:

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

此二维数组中含有3个一维数组,每个一维数组的默认初始化值都为null,每个一维数组中的元素值都为0;可对每个元素赋值,如:

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

3)格式三:
显式初始化二维数组:

int[][] arr = {{1,5,7},{4,8},{3,9,20,12}}

2、数组长度:
以格式二为例:
a.二维数组的长度:

arr.length//为3

b.二维数组中的第一维数组的长度:

arr[0].length//为3

五、数组的排序与查找:

1、获取最大值:

/**需求:获取数组中的最大值 
思路:将数组中的元素进行从小到大(或从大到小)的排列,然后取第一个元素为最小值,取最后一个值为最大值 
步骤: 
    1创建类ArrayTextMax 
    2创建一个数组并赋值 
    3用for循环对其进行排序, 
    4打印排序后的数组的第一个元素和最后一个元素 
*/  
  
class ArrayTextMax  
{  
    //定义功能:在数组中取最大值  
    public static int getMax(int[] arry)  
    {  
        int max = arry[0];  
        for (int i=0;i<arry.length;i++)  
        {  
            //用第一个元素的值和后面的比较,大则换值  
            if (max<arry[i])  
            {  
                max = arry[i];  
            }  
        }  
        return max;  
    }  
  
    public static void main(String [] args)  
    {  
        int[] arr = {5,2,4,8,6,1,9};  
        int max = getMax(arr);//只是获取最大值的方法  
        System.out.println("getMax方法:arr数组中最大值为;" + max);  
    }  
}

2、数组的排序:(选择排序、冒泡排序以及java中的排序方法)

/* 
定义功能: 
获取最大值,先用第一个值和每一个比较, 
再用第二个值和后面的值比较,将小的放前面 
*/  
import java.util.*;  
class ArrayText  
{  
    //第一种排序方法:选择排序  
    public static void getPaixu0(int[] arry)  
    {  
        for (int j=0;j<arry.length;j++)  
        {  
            //i=j,每比较一轮就减少一个数,比较后,再用第二个数获得后面的最小值  
            for (int i=j+1;i<arry.length;i++)  
            {  
                //换值  
                if (arry[j]>arry[i])  
                {  
                    int temp = 0;  
                    temp = arry[j];  
                    arry[j] = arry[i];  
                    arry[i] = temp;  
                }  
            }  
        }  
    }  
  
    //第二种排序方法:冒泡排序--相邻的两个元素比较  
    public static void getPaixu(int[] arr)  
    {  
        for (int j=0;j<arr.length*arr.length;j++)  
        {  
            for (int i=1;i<arr.length;i++)//设置为1是为了防止越界  
            {  
                if (arr[i-1]>arr[i])//若改成<是从大到小排序  
                {  
                    int temp = 0;  
                    temp = arr[i-1];  
                    arr[i-1] = arr[i];  
                    arr[i] = temp;  
                }  
            }  
        }  
    }  
  
    public static void main(String [] args)  
    {  
        int[] arr0 = {5,2,4,8,6,1,9};  
        System.out.println("arr数组排序前:\n"+ Arrays.toString(arr0));  
        System.out.println();  
        int[] arr1 = {5,2,4,8,6,1,9};  
        getPaixu0(arr1);//第一种排序方法  
        System.out.println("选择排序方法:arr数组排序后:\n"+ Arrays.toString(arr1));//打印排序后的数组  
        System.out.println();  
        int[] arr2 = {5,2,4,8,6,1,9};  
        Arrays.sort(arr2);//java中自带的排序函数  
        System.out.println("java中自带的排序函数sort:arr数组排序后:\n"+Arrays.toString(arr2));  
        System.out.println();  
        int[] arr3 = {5,2,4,8,6,1,9};  
        getPaixu(arr3);//第二种排序方法  
        System.out.println("冒泡排序方法:arr数组排序后:\n"+ Arrays.toString(arr3));  
        System.out.println();  
        System.out.println("arr数组中最小值为;" + arr3[0]);  
        System.out.println("arr数组中最大值为:" + arr3[arr3.length-1]);  
    }  
}

3、数组中元素的查找:

/**需求|:查找数组中的元素 
思路|:遍历数组中的元素,并与要查找的内容比较,相同,则返回脚标 
步骤 
    1创建类FindArry 
    2用for遍历数组,如果查找到相同内容,记录脚标并返回 
    3如果未找到,就返回-1 
 
    如果要在一个有序数组中插入一个数,之后仍有序 
    就是先查找数组,用折中法:如果查找到有此数,则返回的中间值就是插入的地方,否则将返回的-1改成返回min,即为插入的地方 
    如:{1, 2, 3, 5, 6, 8, 11, 13}插入8,返回mid = 5;插入后为{1, 2, 3, 5, 6, 8, 8, 11, 13} 
    插入10,返回min = 6,插入后为{1, 2, 3, 5, 6, 8, 10, 11, 13} 
*/  
  
import java.util.*;  
class FindArry  
{  
    //方法一:遍历每一个元素查找  
    public static int findarr(int[] arr,int key)  
    {  
        for(int i=0;i<arr.length;i++)  
        {  
            if(arr[i] == key)  
            {  
                return i;  
            }  
        }  
        return -1;  
    }  
  
    //方法二:折半,前提是数组是按大小顺序排列好的,  
    //用查找的值和中间值比较,大则和下一半中间值比依次,小则和上一半中间值比,找到则返回。  
    //        小值的编号在左移或大值的编号在右移。要判断是否大小值的编号相遇,仍若未找到,则不再循环,返回-1  
    public static int FindArry1(int[] arr,int key)  
    {  
        int min,max,mid;  
        min = 0;  
        max = arr.length-1;  
        mid = (min + max)/2;  
          
        //循环,查找中间值与要查找的值比较  
        while(key != arr[mid])  
        {  
            if (key > arr[mid])  
                min = mid +1;  
            else   
                max = mid - 1;  
            if (min > max)  
                return -1;  
            mid = (min + max)/2;  
        }  
        return mid;  
    }  
  
    //方法三:折半第二种  
    //while的条件改变  
    public static int FindArry2(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;  
    }  
  
    public static void main(String [] args)  
    {  
        int[] arr = {1,6,11,2,8,5,3,13};  
        int m = findarr(arr,3);  
        System.out.println("m=" + m);  
        Arrays.sort(arr);  
        System.out.println(Arrays.toString(arr));  
        int x = FindArry1(arr,13);  
        int y = FindArry2(arr,25);  
        System.out.println("查找13的结果x=" + x + "\n查找25的结果y=" + y);  
    }  
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容

  • 数组在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称...
    朱森阅读 3,882评论 2 13
  • 先来看下面一个小程序: 我们在给一维数组赋值的时候,如果用上面那种输入的方法,是可以的,但是如果给b这种二维甚至多...
    玉圣阅读 1,266评论 0 0
  • 我喜欢现在的自己,我怀念过去的我们
    楠木吖阅读 215评论 0 0
  • 这一路走来 又是一年九月,去年这时候站在操场上走着正步的人,是我们。犹记昨日忆今宵,我们已是大二的学姐,早已熟...
    木文金敬敷文学创造社阅读 238评论 0 0
  • 编译时找不见tio包,求助高手!!! 用上键盘输入时函数时,编译提示找不到tio包,用记事本和exclipse编写...
    金没日成阅读 1,245评论 0 49