[java初探05]__数组

数组是具有相同数据类型的一组数据的集合.在程序设计中,这样的集合称之为数组.数组的每个元素都具有相同的数据类型,在Java中数组也被看为一个对象.

在里,了解了数组的定义之后, 我们知道了,数组并不是简单的由一组数组成的.而是由一组具有相同数据类型的数据组成的,可以是一组整型的数据,也可以是一组字符型的数组,这里的数可以来理解为代表的是数据,而不是数字的意思.


  • 关于一维数组与二维数组

一维数组实际上就是一组相同数据类型的数据的线性集合.

如果一维数组中的每一个元素任然是一个数组的话,那么它就构成了一个二维数组了.二维数组常用于表示表,表中的信息以行和列的形式组织.第一个代表元素的所在列,第二个下标是代表元素所在的列.

在理解上,一维二维,就是线与面的关系,或者说一条数据和一个数据表的关系.面由线组成,表由一条条数据组成.


  • 数组的创建于初始化

  • 一维数组的创建

创建一维数组,我们可以将代表数组的符号[]加在变量或者数据类型关键字后面,在通常情况下,数组的创建,都是使用第二种,及将[]加在数据类型关键字后面,这样在使用上,和在意义表达上也都要更加契合一些.

而数组的创建,不仅要new一个数组出来,我们还的为它分配内存.

int a[]; // 声明int型数组
int[] b=new int[4]; // 声明的同时直接分配内存大小
a = new int [4]; //为其分配内存大小
2019-4-5-02.png
  • 一维数组的初始化
    在前面我们知道了,数组的每个元素的表示,都是以数组的下标来表示的.那么我们想要对数组中的元素进行操作的化,必然要从数组的下标入手.

  • 静态初始化
    我们可以直接在创建数组的时候使用{}直接为数组初始化赋值,实现一步直接创建并初始化数组赋初值.这样就省略了分配内存的步骤.

int[] b={1,2,3,4};
  • 动态初始化
    我们也可以直接通过数组的下标来直接对数组中的某个元素赋值初始化,称作动态初始化,动态初始化前,我们需要先为数组分配内存空间.
  int[] a;
        a =new int[4];
        a[0]=1;
        a[1]=2;
        a[3]=3;

动态初始化给数组赋值时,可以不对数组中的某些元素赋初始值,其将会输出为默认值0.

  • 二维数组的创建与初始化

二位数组前面我们说过了,就是在一维的基础上,再加一维.由线变面.
所以二位数组的创建与初始化与一维数组的大同小异.


int arr[][];
int[][] arr2;
arr2 = new int[2][4];

   int[][] c={{2,3},{12,13},{22,23}};
        System.out.println(c[0][1]);
        int[][] d=new int[3][4];
        d[0][0]=1;
        d[0][1]=2;
        d[0][2]=3;
        d[0][3]=4;
        d[1][0]=11;
        d[1][1]=12;
        d[1][2]=13;
        d[1][3]=14;

2019-4-5-03.png
  • 数组操作

  • 遍历数组
    通过for循环遍历数组,将数组内容全部输出.一维数组的遍历十分简单:

int[] a={1,2,3,4,5};
        for(int i=0;i<a.length;i++){
            System.out.print(a[i]+",");
        }
  • 二维数组的遍历

相对的,二维数组的遍历就要稍微复杂一些,我们观察一维数组的遍历,了解到实现原理是通过for循环,来循环输出对应下标的数组元素,每循环一次下标就加1,然后使条件小于数组的长度.

那么二维数组的遍历应当可以使用一样的原理,不过二维数组有两个下标,怎么办呢,想来也是因该使用两个for循环来控制.

  // 二维数组的遍历
        int[][] b={{2,3,4,5},{12,13,14,15},{22,23,24,25}};
        for(int i=0;i<b.length;i++){ // 通过两个for循环遍历二维数组,外层循环遍历列的下标,
            for (int j=0;j<b[i].length;j++){  // 内存循环循环遍历行的下标.
                System.out.print(b[i][j]+","); //循环输出对应下标的元素.遍历出整个二维数组.
            }
            System.out.println(); // 输出换行(每行数据输出红后换行.)
        }
2019-4-5-04.png
  • 替换数组元素

Arrays类中给我们提供了fill方法用来填充后替换数组中的元素.其重载有多种方法提供不同形式的替换方式.fill(int[],int)方法可以将指定值替换(填充)到指定数组的所有元素中.fill(int[],int ,int,int)方法将指定值替换到指定范围的元素中,前两个int参数指定数组下标范围.

  //填充数组
        Arrays.fill(c,6);
        System.out.println(Arrays.toString(c));
        Arrays.fill(c,3,7,10);
        System.out.println(Arrays.toString(c));
  • 数组排序
    Arrays类中还提供了排序方法sort()其也重载有多个方法.最简单的排序方法sort(object)参数及需要排序的数组.
 Arrays.sort(c);
        System.out.println(Arrays.toString(c));
  • 复制数组
    Arrays类也提供有copyOf()方法和copyOfRange()方法用来将一个数组复制到另一个新数组中.copyOfrange()方法可以指定copy范围.
//copy数组
        int[] d=Arrays.copyOf(c,12);
        int[] e=Arrays.copyOfRange(c,3,7);
        System.out.println(Arrays.toString(d));
        System.out.println(Arrays.toString(e));
  • 数组查询
    Arrays类的binarySearch()方法,可使用二分法来搜索指定数组.其也提供有多种重载方式,可以在指定范围搜索数组.返回值为数组所在位置(不是返回其下标).
//数组查询
          //数组查询
        System.out.println(Arrays.binarySearch(c,10));
        System.out.println(Arrays.binarySearch(c,5,7,10));


关于Arrays(数组)类的其他方法,我们可以打开Arrays类进行查看.

2019-4-5-05.png

关于数组的学习笔记就暂且记录到这里,关于数组的排序,又涉及到排序算法,而排序算法的种类又有很多,之后会专门单独总结一篇文章来系统的学习排序算法.这里就不涉及数组的排序了.

  • 源码
import java.sql.SQLOutput;
import java.util.Arrays;

/**
 * @outhor xiaoshe
 * @date 2019/4/5  - @time 20:40
 * 数组
 */
public class Sty_Array {

    public static void main(String[] args) {
        Sty_Array sty_array = new Sty_Array();
        sty_array.create_array();
        sty_array.TraverArrays();

    }

    // 两种数组的创建,我们可以将代表数组的符号[]加给变量或者数据类型关键字.

    public void create_array(){
        // 一维数组
        int[] a;
        a =new int[4];
        a[0]=1;
        a[3]=3;
        System.out.println(a[3]);
        System.out.println(Arrays.toString(a));
        System.out.println(a.length);
        char[] b ={'a','b','c','d'};
        System.out.println(Arrays.toString(b));
        // 二维数组
        int[][] c={{2,3},{12,13},{22,23}};
        System.out.println(c[0][1]);
        int[][] d=new int[3][4];
        d[0][0]=1;
        d[0][3]=4;
        d[1][0]=11;
    }

    // 数组操作
    public void TraverArrays(){
        //一维数组的遍历
        int[] a={1,2,3,4,5};
        int[] c={3,6,2,4,1,7,9,8,0};
        for(int i=0;i<a.length;i++){
            System.out.print(a[i]+",");
        }
        System.out.println("\n----分界线-----");
        // 二维数组的遍历
        int[][] b={{2,3,4,5},{12,13,14,15},{22,23,24,25}};
        for(int i=0;i<b.length;i++){ // 通过两个for循环遍历二维数组,外层循环遍历列的下标,
            for (int j=0;j<b[i].length;j++){  // 内存循环循环遍历行的下标.
                System.out.print(b[i][j]+","); //循环输出对应下标的元素.遍历出整个二维数组.
            }
            System.out.println(); // 输出换行(每行数据输出红后换行.)
        }
        //数组排序
        Arrays.sort(c);
        System.out.println(Arrays.toString(c));
        //copy数组
        int[] d=Arrays.copyOf(c,12);
        int[] e=Arrays.copyOfRange(c,3,7);
        System.out.println(Arrays.toString(d));
        System.out.println(Arrays.toString(e));
        //填充数组
        Arrays.fill(c,6);
        System.out.println(Arrays.toString(c));
        Arrays.fill(c,3,7,10);
        System.out.println(Arrays.toString(c));
        //数组查询
        System.out.println(Arrays.binarySearch(c,10));
        System.out.println(Arrays.binarySearch(c,5,7,10));
}
}


更新时间:
2019-4-5
23:14

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,607评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,239评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,960评论 0 355
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,750评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,764评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,604评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,347评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,253评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,702评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,893评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,015评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,734评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,352评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,934评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,052评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,216评论 3 371
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,969评论 2 355