java数组

一.数组的基本概念

1.数组介绍

数组可以存放多个同一类型的数据。数组也是一种数据类型,是引用类型。
可以看成是相同类型元素的一个集合。在内存中是一段连续的空间。
即:数(数据)组(一组)就是一组数据

public static void main(String[] args) {
        double[] hens = {1,2,3,4,5,6,};
        double totalweight = 0;
        for (int i = 0; i <hens.length ; i++) {
            totalweight += hens[i];
        }
    }
  //  1. double[] 表示 是 double 类型的数组, 数组名 hens
  //  2. {1,2,3,4,5,6,}表示数组的值/元素,依次表示数组的第几个元素
  //  3.  我们可以通过 hens[下标] 来访问数组的元素
  //  4. 数组下标是从 0 开始编号的比如第一个元素就是 hens[0],第 2 个元素就是 hens[1] , 依次类推
  //  5. 通过 for 就可以循环的访问 数组的元素/值

2.数组的创建和初始化

数组的定义:数据类型[ ] 数组名 = new 数据类型[大小]
例:int[ ] a = new int [5]; //创建了一个数组,名字为a,存放了5个int
数组的引用:数组名[下标/索引/index ]
数组的创建:两种动态分配方式

  1. double scores[] = new double[5];
  2. 先声明数组,再 new 分配空间
    double scores[] ; //声明数组,这时 scores 是 null
    scores = new double[5]; // 分配内存空间,可以存放数据

数组的初始化:

  1. 静态初始化:在创建数组时不直接指定数据元素个数,而直接将具体的数据内容进行指定
int[] a = {1,2,3,4};
  1. 动态初始化:在创建数组时,直接指定数组中元素的个数
int[] a = new int[4];

注意事项

1. 数组中的元素可以是任何数据类型,包括基本类型和引用类型,但是不能混用。
2. 数组创建后,如果没有赋值,有默认值 int 0,short 0, byte 0, long 0, float 0.0,double 0.0,char \u0000,boolean false,String null
3. 数组的下标是从 0 开始的。
4. 数组下标必须在指定范围内使用,否则报:下标越界异常。
5. 数组属引用类型,数组型数据是对象(object)
6. 静态初始化虽然没有指定数组的长度,编译器在编译时会根据{}中元素个数来确定数组的长度。

3.遍历数组

int[]array = new int[]{10, 20, 30, 40, 50}; 
for(int i = 0; i < array.length; i++){ 
   System.out.println(array[i]); 
}
//1.在数组中可以通过 数组对象.length 来获取数组的长度
//2.另一种for-each遍历数组
int[] array = {1, 2, 3}; 
for (int x : array) { 
  System.out.println(x); 
}

4.数组赋值机制

null空引用

int[] arr = null; 
System.out.println(arr[0]); 
// 执行结果 
//Exception in thread "main" java.lang.NullPointerException at Test.main(Test.java:6)
//null 在 Java 中表示 "空引用" , 也就是一个不指向对象的引用.

赋值机制

int[] arr1 = {1,2,3,};
int[] arr2 = arr1;
arr2[0] = 10;

在这里插入图片描述

二.一些方法

Java 中提供了 java.util.Arrays 包, 其中包含了一些操作数组的常用方法. import
java.util.Arrays;

1.打印数组Arrays.toString()

使用Arrays中的的toString方法可以来打印数组中的数据

int[] intArray = { 1, 2, 3, 4, 5, 6, 7 };
System.out.println(Arrays.toString(intArray));
//打印结果:[1, 2, 3, 4, 5, 6, 7]
//这个方法是用来将数组转换成String类型输出的
//传入的参数可以是boolean,byte,char,double,float,int,long,Object,short类型的数组。

2.数组填充Arrays.fill()

使用Arrays中的的fill方法可以来填充数组数据

int[] arr = new int[5];//新建一个大小为5的数组
Arrays.fill(arr, 2,4,6);//给第2位(0开始)到第4位(不包括)赋值6
System.out.println(Arrays.toString(arr));
//1.方法参数是数组下标
//2.数组下标从0开始
//3.第二个参数指起始元素下标(包括该下标)
//4.第三个参数指结束下标(不包括该下标)
Arrays.fill(arr,4);//给所有值赋值4
System.out.println(Arrays.toString(arr));
打印结果:[0, 0, 6, 6, 0]
         [4, 4, 4, 4, 4]

3. 比较数组元素是否相等Arrays.equals()

int[] arr1 = {1,2,3};
int[] arr2 = {1,2,3};
System.out.println(Arrays.equals(arr1,arr2));
打印结果:true
//如果是arr1.equals(arr2),则返回false,因为equals比较的是两个对象的地址,不是里面的数,而Arrays.equals重写了equals,所以,这里能比较元素是否相等。

4. 数组拷贝

copyOf方法完成数组的拷贝
int[] arr = {10,20,30,40,50};
int[] newArr = Arrays.copyOf(arr, 3);
System.out.println("newArr: " + Arrays.toString(newArr));
//输出:[10, 20, 30] (截取arr数组的3个元素赋值给新数组arr1)
newArr = Arrays.copyOf(arr, arr.length);
System.out.println("newArr: " + Arrays.toString(newArr));
//输出:[10, 20, 30, 40, 50]
1.arr和newArr引用的不是同一个数组
2.copyOf方法在进行数组拷贝时,创建了一个新的数组


copyOfRange拷贝数组某个范围
int []arr = {10,20,30,40,50};
int []newArr = Arrays.copyOfRange(arr,1,3);
System.out.print(Arrays.toString(newArr));
//输出:[20, 30] (从第1位(0开始)截取到第3位(不包括))


int[] array = {1,2,3,4,5};
int[] copy = array.clone();//clone():产生对象的一个副本
System.out.println(Arrays.toString(array));
System.out.println("=====================");
System.out.println(Arrays.toString(copy));
打印结果:
[1, 2, 3, 4, 5]
=====================
[1, 2, 3, 4, 5]


int[] array = {1,2,3,4,5};
int[] copy = new int[array.length];
        /**
         * 1、是你要拷贝的数组
         * 2、你要从这个数组的哪个下标开始拷贝
         * 3、你要拷贝到哪个数组
         * 4、你要拷贝到这个数组的哪个位置开始
         * 5、你要拷贝多大
         */
System.arraycopy(array,0,copy,0,array.length);
System.out.println(Arrays.toString(array));
System.out.println("=====================");
System.out.println(Arrays.toString(copy));

5.数组排序Array.sort()

1.数字排序
int[] intArray = new int[] { 4, 1, 3, -23 };
Arrays.sort(intArray);
//输出: [-23, 1, 3, 4]
2.字符串排序,先大写后小写
String[] strArray = new String[] { “z”, “a”,C};
Arrays.sort(strArray);
//输出: [C, a, z]

6.二分查找法找指定元素的索引值Arrays.binarySearch()

查找有序数组

int[] arr = {10,20,30,40,50};
System.out.println(Arrays.binarySearch(arr, 30));
//输出:2 (下标索引值从0开始)
int[] arr = {10,20,30,40,50};
System.out.println(Arrays.binarySearch(arr, 36));
//输出:-4 (找不到元素,返回-x,从-1开始数,如题,返回-4)
int []arr = {10,20,30,40,50};
System.out.println(Arrays.binarySearch(arr, 0,3,30));
//输出:2 (从0到3位(不包括)找30,找到了,在第2位,返回2)
int []arr = {10,20,30,40,50};
System.out.println(Arrays.binarySearch(arr, 0,3,40));
//输出:-4 (从0到3位(不包括)找40,找不到,从-1开始数,返回-4)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值