夯实Java基础(一)----数组

一、数组的定义

数组(Array):多个相同类型的数据按照一定的顺序排列的集合。(数据容器)

1、数组的基本特性:

①、数组是引用数据类型,元素可以是任何数据类型,每个数据元素存放一个数据,可通过索引访问数据元素、赋值取出等。下标从0开始。

②、创建数组时会在内存开辟一整块连续的空间,而数组的引用则是这块连续空间的首地址。所以一旦初始化完成,数组在内存所占用的空间就被固定,所以数组长度不可变。

2、数组的声明与初始化

①、声明

元素的数据类型[] 数组的名称;
int[] age;

②、初始化

(1)、静态初始化:定义数组的同时分配内存并赋值,只给顶元素值,不指定数组长度

数据类型[] 数组名 = {元素1,元素2,元素3...};
int[] array={1,2,3...}

(2)、动态初始化:只指定数组长度,由系统分配元素初始值(默认值)

数据类型 [ ]  数组名称 = new 数据类型 [数组长度]
int[] array=new int[10];

(3)、错误写法:

//未指定数组长度
int [] arr1=new int[];
//数组前面[]不能写长度
int [5] arr2=new int[5];
//静态初始化不能写长度
int [] arr3=new int[3]{1,2,3};

3、数组元素访问与遍历

①、访问数组元素并赋值

//声明一个长度为3的数组
int[] arr=new int[3];
//给arr第1个元素赋值1
arr[0]=1;
//给arr第2个元素赋值2
arr[1]=2;
//给arr第3个元素赋值3
arr[2]=3;

长度(length)为3的数组,下标为arr[0]、arr[1]、arr[2]

②、数组的遍历

数组的长度:数组名.length

数组的索引范围:[0,length-1]

//声明一个元素为1,2,3的int型数组
int[] arr=new int[]{1,2,3};
//遍历arr数组
for (int i = 0; i < arr.length; i++) {
     System.out.println(arr[i]);
}
// 使用增强for循环foreach进行遍历
for (int i : arr) {
      System.out.println(i);
}
//使用Arrays.toSting(数组名)进行遍历
System.out.println(Arrays.toString(arr));

4、数组的内存图分析

public static void main(String[] args) {
    int[] arr = new int[3];
    int[] arr2 = new int[2];
    System.out.println(arr);
    System.out.println(arr2);
}

5、数组的使用

①、冒泡排序

public class ArrayTest {
    public static void main(String[] args) {
        int[] arr=new int[]{56,12,32,98,78,45,-45,3,55,-16};
        for (int i = 0; i < arr.length; i++) {
            for (int j=0;j<arr.length-1-i;j++){
                if (arr[j]>arr[j+1]){
                    int temp=arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=temp;
                }
            }
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+"\t");
        }
    }
}

②、查找

public class ArrayTest {
    public static void main(String[] args) {
        String[] str=new String[]{"AA","BB","CC","DD","EE","FF","GG"};
        String dest="BB";
        boolean isFlag=true;
        for (int i = 0; i < str.length; i++) {
            if (dest.equals(str[i])){
                System.out.println("找到了元素,位置在"+(i+1));
                isFlag=false;
                break;
            }
        }
        if (isFlag) {
            System.out.println("对不起,没有找到");
        }
    }
}

③、数组反转

public class ArrayTest {
    public static void main(String[] args) {
        String[] str=new String[]{"AA","BB","CC","DD","EE","FF","GG"};
        System.out.println("反转前:");
        for (int i = 0; i < str.length; i++) {
            System.out.print(str[i]+"\t");
        }
        for(int i=0;i<str.length/2;i++){
            String temp=str[i];
            str[i]=str[str.length-i-1];
            str[str.length-i-1]=temp;
        }
        System.out.println();
        System.out.println("反转后:");
        for (int i = 0; i < str.length; i++) {
            System.out.print(str[i]+"\t");
        }
    }
}

6、数组的工具类

java.util.Arrays工具类

  • static int binarySearch(int[] a, int key) :要求数组有序,在数组中查找key是否存在,如果存在返回第一次找到的下标,不存在返回负数
  • static int[] copyOf(int[] original, int newLength) :根据original原数组复制一个长度为newLength的新数组,并返回新数组
  • static int[] copyOfRange(int[] original, int from, int to) :复制original原数组的[from,to)构成新数组,并返回新数组
  • static boolean equals(int[] a, int[] a2) :比较两个数组的长度、元素是否完全相同
  • static void fill(int[] a, int val) :用val填充整个a数组
  • static void fill(int[] a, int fromIndex, int toIndex, int val):将a数组[fromIndex,toIndex)部分填充为val
  • static void sort(int[] a) :将a数组按照从小到大进行排序
  • static void sort(int[] a, int fromIndex, int toIndex) :将a数组的[fromIndex, toIndex)部分按照升序排列
  • static String toString(int[] a) :把a数组的元素,拼接为一个字符串,形式为:[元素1,元素2,元素3。。。]
import java.util.Arrays;
import java.util.Random;

public class Test {
    public static void main(String[] args) {
        int[] arr = new int[5];
        //1、打印数组,输出地址值
        System.out.println(arr); // [I@2ac1fdc4
        //2、toString;数组内容转为字符串
        System.out.println("arr数组初始状态:" + Arrays.toString(arr));
        //3、fill 数组填充3
        Arrays.fill(arr, 3);
        System.out.println("arr数组现在状态:" + Arrays.toString(arr));
        //赋值操作
        Random rand = new Random();
        for (int i = 0; i < arr.length; i++) {
            arr[i] = rand.nextInt(100);//赋值为100以内的随机整数
        }
        System.out.println("arr数组现在状态:" + Arrays.toString(arr));
        //4、copyOf 复制一个长度为10的新数组
        int[] arr2 = Arrays.copyOf(arr, 10);
        System.out.println("新数组:" + Arrays.toString(arr2));
        //5、equals
        System.out.println("两个数组的比较结果:" + Arrays.equals(arr, arr2));
        //6、sort 排序,从小到大
        Arrays.sort(arr);
        System.out.println("arr数组现在状态:" + Arrays.toString(arr));
    }
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值