Java_关于数组的小结

Java_关于数组的小结

1 数组的初始化(三种)
1.1 一维数组
数组在Java中是一个对象,属于引用类型,数组实例是使用new操作符创建的。

int[] array1 = new int[5];
int[] array2 = new int[]{1,2,3,4,5};
int[] array3 = {1,2,3,4,5};

1.2 二维数组

int[][] array4 = new int[3][3];
int[][] array5 = new int[][]{{1,2,3},{4,5,6},{7,8,9}};
int[][] array6 ={{1,2,3},{4,5},{7,8}};

2 数组的遍历打印(两种)
2.1 普通循环,例:for循环

for(int[] arr:array){
    for(int val :arr){
        System.out.println(val+" ");
    }
}

2.2 for each方法

for(int i = 0;i<array.length;i++){
    for(int j = 0;j<array[i].length;j++){
        System.out.println(array[i][j]);
    }
}

3 数组的拷贝(三种)

//方式一:clone方式
int[] arr1 = arr.clone();

//方式二:Arrays.copyof(可应用于缩容与扩容)
int[] array = Arrays.copyOf(arr, arr.length+2);

//方式三:System.arrayCopyof(提倡使用) 
//此为native方法,直接运行在本地操作系统上,速度快
int[] arr3 = new int[arr.length];
System.arraycopy(arr1, 0, arr3, 0, arr.length);

4 常用的Arrays类

//1.toString() 打印数组
System.out.println(Arrays.toString(array));
System.out.println(Arrays.deepToString(array));//对二维数组打印

//2.sort() 数组内元素排序.
Arrays.sort(array);

//3.fill() 填充同一元素或复制同一引用.
Arrays.fill(array, 5);

//4.binarySearch();二分查找,找array中元素为3的下标
Arrays.binarySearch(array, 3);

//5.equals() 
//比较基本数据类型,如果两个值相同,则结果为true
//而在比较引用时,如果引用指向内存中的同一对象,结果为true
Arrays.equals(array1, array2);//故此结果为false;

//6.binarySearch:数组元素的定位查找
//find的值为查询的数字在数组中的下标
int find;
find = Arrays.binarySearch(array,8);

5 数组的练习(扩容和缩容)

//1.请把下面数组中的数字56全部删掉,并对数组进行缩容,打印最终的数组元素
        int[] array1 = new int[]{12,4,56,7,56,21,56,56,89,62,41};
        int[] array2 = new int[array1.length];
        int j = 0;
        int num = 0;
        for(int i = 0;i<array1.length;i++){
            if(array1[i] != 56){
                    array2[j] = array1[i];
                    j++;
            }
            else{num++;}
        }
        int[] array3 = Arrays.copyOf(array2, array2.length-num);//缩容
        System.out.println("原数组:"+Arrays.toString(array1));
        System.out.println("删除指定元素:"+Arrays.toString(array2));
        System.out.println("缩容:"+Arrays.toString(array3));

        //2.随机0-100之间的整形元素100个放到数组中,请删除数组中所有重复的元素,只保留一个该重复数字即可,打印最终的数组
        //(1)随机生成数组
        int array4[] = new int[100];
        for(int i = 0;i<100;i++){
            array4[i] = (int)(Math.random()*100);
        }
        System.out.println("原数组:"+Arrays.toString(array4));
        //(2)找出重复的数字并将其赋为111
        int num1 = 0;
        for(int i = 0;i<100;i++){
            for(int m = i+1;m<array4.length-i-1;m++){
                if(array4[i] == 111){break;}
                else if(array4[i] == array4[m]){
                    array4[m] = 111;
                    num1++;
                }
            }
        }
        System.out.println("重复的替代:"+Arrays.toString(array4)+"\n"+"重复个数:"+num1);
        //(3)按照第一道题的方法将111删除
        int[] array5 = new int[array4.length];
        int j1 = 0;
        for(int i = 0;i<array4.length;i++){
            if(array4[i] != 111){
                    array5[j1] = array4[i];
                    j1++;
            }
        }
        int[] array6 = Arrays.copyOf(array5, array5.length-num1);
        System.out.println("删除111:"+Arrays.toString(array5));
        System.out.println("缩容:"+Arrays.toString(array6));

6 数组的应用(实现顺序栈)

class SqeStack{
    private static final int NULL = 0;
    private int[] stack;
    private int top;
    private boolean flase;

    //开辟空间
    public SqeStack(){
        this(10);
    }
    public SqeStack(int size){
        this.stack = new int[size];
        top = 0;
    }
    //入栈
    public void push(int val){
        this.stack[this.top++] = val;
    }
    //出栈
    public void pop(){
        if (empty())
            return;
        this.top--;
    }
    //获取栈顶元素
    public int top(){
        return this.stack[this.top-1];
    }
    //判空
    public boolean empty(){
        return this.top == 0;
    }
    //判满
    public boolean full(){
        return this.top == this.stack.length;
    }
    //扩容2倍
    public void resize(){
        this.stack = Arrays.copyOf(this.stack, this.stack.length*2);
    }
    //打印
    public  void show(){
        System.out.println(Arrays.toString(this.stack));
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值