java数组详解

数组

概念

一段连续的存储空间,用来存放某种类型的多个变量值

语法

数据类型 [] 数组变量名 = new 数据类型[数组长度]

创建

  • 动态创建

    数据类型 [] 数组变量名;

    数组变量名 = new 数据类型[数组长度]

  • 静态创建

    • 声明并赋值

    数据类型[] 数组名=new 数据类型[]{多个以英文逗号分隔的数据}

    • 先声明后赋值

      数据类型 [] 数组变量名;

      数组变量名 = new 数据类型[] {多个以英文逗号分隔的数据};

使用

  • 存值

    数组名[索引位置]=值

  • 取值

    • 数组名[索引位置]
    • 遍历

特点

  1. 数据类型限定了数组可以存放的数据类型

  2. 一个数组可以存储多个元素

  3. 一旦数组对象被创建好,那么其长度就固定不变了

  4. 动态创建好数组之后,会自动分配默认值,和数组中的元素类型有关(类似之前成员变量的默认值)

打印数组

  • 基本数据类型打印的时候,都是直接打印的值,因为他们的值存放在栈中

  • 引用和数据类型 除String 外,其他打印的地址值,因为真正放值的地方在堆中

    public class _09ArrayDemo4 {
      public static void main(String[] args){
           int[] arr={1,2,3,4};
         //数组的长度 length  通过数组名.length可以获取到数组的长度
        // System.out.println(arr.length);
           getSum(arr);
         getSum(4,3);
      }
      //定义一个方法 求一个数组中元素的和
      static void getSum(int[] arr){
          int sum=0;//声明初始的和为0
          for(int i=0;i<arr.length;i++){//i.length为数组的长度 索引是从0开始 
              sum+=arr[i];//arr[i] 第一次 i=0 arr[0]取第一个位置的值 
          }
           System.out.println(sum);
    

参数传递

值传递

对于基本数据类型 在方法传递参数的时候传递的是具体的值

引用传递

对于引用类型传递的是引用地址 除String以外

冒泡排序

概念

取第一元素,假设为最大值.依次与后面的对比,后面的大,则交换值再做对比,知道吧最大值放在最后,再进行索引次,得到按小到大的数组

实现

import java.util.Arrays;

  public class _01BubbleSort {
    public static void main(String[] args){
        int[] arr={10,2,1,8,7,5};
        reverse(arr);
        System.out.println(Arrays.toString(arr));
    }
    static void reverse(int[] arr1){//冒泡排序的方法
        //一共要执行的冒泡次数为数组长度-1
        for (int i=0;i<arr1.length-1 ;i++ ){
            //-j减少判断
            for (int j=0;j<arr1.length-1-i ;j++ ){
                if (arr1[j]>arr1[j+1]){
                    int temp=arr1[j];
                    arr1[j]=arr1[j+1];
                    arr1[j+1]=temp;
                }
            }
        }
    }
}

二分搜索

概念

只能用于有序数组

实现

  public class _03BinarySearch {
    public static void main(String[] args){
        System.out.println("Hello World!");
        int[] arr={1,2,3,4,5,6,7,8};
        //int[] arr1={9,8,7,6,5,4};
        System.out.println(BinarySearch(3,arr));
        //System.out.println(BinarySearch(6,arr1));
    }
    static int BinarySearch(int x,int[] arr){
        int maxIndex=arr.length-1;
        int minIndex=0;
        int halfIndex=(maxIndex+minIndex)/2;
        //对于未知次数的循环使用while,确定循环次数,用for循环
        while (minIndex<=maxIndex){
            /*if(x>arr[halfIndex]){
                minIndex=halfIndex+1;
            }else if(x<arr[halfIndex]){
                maxIndex=halfIndex-1;
            }else{
                return halfIndex;
            }
            halfIndex=(maxIndex+minIndex)/2;*/
            //该判断条件用于升序的数组
            if (x==arr[halfIndex]){
                return halfIndex;
            }else if (x<arr[halfIndex]){
                maxIndex=halfIndex-1;
            }else if(x>arr[halfIndex]){
                minIndex=halfIndex+1;
            }
            halfIndex=(maxIndex+minIndex)/2;
        }
        //如果没有找到,返回-1
        return -1;
    }
}

二维数组

创建

  • 动态方法:
    int[][] arr=new int[2][3]
  • 静态方法:
    int[][] [][]arr={{1,2},{3,4}}

取值

arr[1]取到的是地址,即第二个数组的地址

arr[1][1]这个取得的才是数组里面的值

打印

  public class _05TwoDimensionalArrays {
    //这是一个主方法
    public static void main(String[] args){
        //用for循环遍历二维数组的值
        for(int i=0;i<arr.length;i++){//先遍历外层的列表
            for(int j=0;j<arr[i].length;j++){//遍历每一个列表的元素
                System.out.print(arr[i][j]+",");//打印
            }
            System.out.println();
        }
        //用foreach 遍历二维数组
        for(int[] i:arr){
            for(int j:i){
                System.out.println(j);
            }
        }
    }
}

Arrays工具类

API使用

  1. 通过文档找到我们需要使用的类和方法
  2. 看这个方法是否有static修饰--》决定调用方式
  3. 看形参(调用此方法需要什么条件)
  4. 看结果(有些有返回值,有些没有)

Arrays类常用方法

static int binarySearch(Object[] a, Object key)
使用二分搜索法来搜索指定数组,以获得指定对象。

static <T,U> T[]
copyOf(U[] original, int newLength, Class<? extends T[]> newType)
复制指定的数组,截取或用 null 填充(如有必要),以使副本具有指定的长度。

static void sort(Object[] a)
根据元素的自然顺序对指定对象数组按升序进行排序。

static String toString(Object[] a)
返回指定数组内容的字符串表示形式。

增强for循环

概念

  1. 作用: 主要是用来遍历数组和集合的
  2. 缺点: 没有索引,凡是涉及有索引相关操作还是用普通for循环

语法

for(源中元素类型 e : 源 ){

​ //直接使用e就可以了

}

源 : 可以是数组或者集合(Iterable接口的实现类)

e : 形式参数,每次从源中遍历的数据,都临时存放在里面,可以在循环内部,通过e使 用到每一个元素

  public class _08SuperFor {
    public static void main(String[] args){
        System.out.println("Hello World!");
        int[] arr={1,55,64,3};
        //一般来说推荐带索引的
        for(int i=0;i<arr.length;i++){
            System.out.print(arr[i]+" ");
        }
        System.out.println();
        System.out.println("========");
        //foreach无法控制次数,因为拿不到索引值
        for(int i:arr){
            System.out.print(i+" ");
        }
    }
}

可变参数

概念

可以达到传0个或者多个同类型变量的目的
其实可变参数本质上还是一个数组
就使用数组的方式去遍历可变参数

语法

方法名(参数类型...变量)

注意:
可变参数只能放到形参列表的最后
可变参数只能有一个

使用

  public class _09VariableParameter {
    public static void main(String[] args){
        System.out.println("Hello World!");
        //可以通过传数组的方式达到一次多个参数的目的
        add(1,2,3,44);
    }
    //可变参数
    static void add(int...param){//传入可变参数
        System.out.println(param);//[I@15db9742
        for(int i:param){
            System.out.println(i);
        }
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,755评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,369评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,799评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,910评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,096评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,159评论 3 411
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,917评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,360评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,673评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,814评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,509评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,156评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,123评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,641评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,728评论 2 351

推荐阅读更多精彩内容

  • 05.01_Java语言基础(数组概述和定义格式说明)(了解) A:为什么要有数组(容器)为了存储同种数据类型的多...
    苦笑男神阅读 618评论 0 0
  • 第四天 数组【悟空教程】 第04天 Java基础 第1章数组 1.1数组概念 软件的基本功能是处理数据,而在处理数...
    Java帮帮阅读 1,589评论 0 9
  • 1. 数组的概念 数组就是可以存放一组相同 数据类型 数据** 的数据结构 数组是一种引用类型 2. 数组的声明/...
    larQ阅读 391评论 0 0
  • 一、基础知识:1、JVM、JRE和JDK的区别:JVM(Java Virtual Machine):java虚拟机...
    杀小贼阅读 2,371评论 0 4
  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
    Jenaral阅读 2,739评论 2 9