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

参数传递

值传递

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

引用传递

对于引用类型传递的是引用地址 除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;iarr1[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(xarr[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

Arrays工具类

API使用

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

Arrays类常用方法

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

static T[]
copyOf(U[] original, int newLength, Class 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

可变参数

概念

可以达到传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);
        }
    }
}

你可能感兴趣的:(java数组详解)