java基础-数组(举例)

数组定义及初始化

  1. 一维数组
    a.相同数据类型集合
    b.开辟一块连续内存空间(JVM:)
    new:在堆上进行开辟
//一维数组定义
int[] arr = {1,2,3};
int[] arr = new int[]{1,2,3};
int[] arr = new int[10];(存放默认值0)
  1. 二维数组
//二维数组定义
int[][] brr = {{1,2,3,4,},{5,6,7,8}};(两行四列)
int[][] brr = new int[][]{{1,2,3,4},{5,6,7,8}};
int[][] brr = new int[2][4];(类型默认值)
//其中,brr[0].length -> 列数,brr.length -> 行数
//二维数组访问形式 brr[1][2] -> 第二行第三列

一维数组遍历(打印)

  1. for循环
 forint i = 0;i<arr.length;i++{
      	//arr[i];
      }
  1. foreach语句 (迭代器)
  for(int value:arr){
     //value
     }
  1. 打印数组System.out.println(Arrays.toString(arr));

拷贝

  1. for循环拷贝
 int[] arr={1,2,3};//原始数据
 int[] brr=new int[arr.length];
 	for(int i=0;i<arr.length;i++){
 		brr[i]=arr[i];
 	}
  1. int[] brr = Arrays.copyOf(arr,arr.length);
  2. int[] brr = arr.clone();
  3. int[] brr = new int[arr.length];
    System.arraycopy(arr,0,brr,0,arr.length);

扩容

arr = Arrays.copyOf(arr,arr.length+1);

一维数组的增删查找操作

  1. 在给定的数组中插入一个元素
import java.util.Arrays;
public class Demo{
    public static int[] insertValue(int[] arr,int value) {
        if (arr == null) {
            return null;
        }
        //扩容操作
        int[] brr = new int[arr.length + 1];
        //将原始数据进行拷贝
        for (int i = 0; i < arr.length; i++) {
            brr[i] = arr[i];
        }
        arr = brr;
        int i = brr.length - 1 - 1;
        //移动数据
        for (; i >= 0 && arr[i] > value; i--) {
            arr[i + 1] = arr[i];
        }
        arr[i + 1] = value;
        return arr;
    }
    public static void main(String[] args) {
        int[] arr = {1,2,4,6};
        arr = insertValue(arr,-2);
        System.out.println(Arrays.toString(arr));
    }
}
  1. 在数组头部插入一个元素
    时间复杂度:O(n)
import java.util.Arrays;
public class Demo{
    public static int[] insertHead(int[] arr,int value){
        if(arr==null){//参数安全检查
            return null;
        }
        int srcLength = arr.length;//原始数据大小
        arr = Arrays.copyOf(arr,arr.length+1);//扩容
        for(int i = srcLength-1;i>=0;i--){
            arr[i+1]=arr[i];
        }
        arr[0]=value;
        return arr;
    }
    public static void main(String[] args) {
        int[] arr = {1,2,4,6};
        arr = insertHead(arr,9);
        System.out.println(Arrays.toString(arr));
    }
}
  1. 在数组尾部插入一个元素
import java.util.Arrays;
public class Demo{
    public static int[] insertTail(int[] arr,int value){
        if(arr==null){//参数安全检查
            return null;
        }
        int srcLength = arr.length;//原始数据大小
        arr = Arrays.copyOf(arr,arr.length+1);//扩容
        arr[srcLength]=value;
        return arr;
    }
    public static void main(String[] args) {
        int[] arr = {1,2,4,6};
        arr = insertTail(arr,-1);
        System.out.println(Arrays.toString(arr));
    }
}
  1. 在数组指定下标插入一个元素
import java.util.Arrays;
public class Demo{
    public static  int[] insertIndex(int[] arr, int index,int value){
        if(arr==null||index<0||index>=arr.length){//参数安全检查
            return null;
        }
        int srcLength = arr.length;//原始数据大小
        arr = Arrays.copyOf(arr,arr.length+1);//扩容
        for(int i =srcLength-1;i>=index;i--){
            arr[i+1] = arr[i];
        }
        arr[index]=value;
        return arr;
    }
    public static void main(String[] args) {
        int[] arr = {1,2,4,6};
        arr = insertIndex(arr,2,99);
        System.out.println(Arrays.toString(arr));
    }
}
  1. 查找并删除数组中指定元素
import java.util.Arrays;
public class Demo{
    public static  int[] removeValue(int[] arr, int value){
        if(arr==null){//参数安全检查
            return null;
        }
        int index = search(arr,value);//查找当前value在index
        int count = 0;//统计当前待删元素个数
        while (arr[arr.length-1]==value){
            arr = Arrays.copyOf(arr,arr.length-1);
        }
        while (index!=-1){
            for(int i=index;i<arr.length-1;i++){
                arr[i]=arr[i+1];
            }
            count++;
            index = search(arr,value);
        }
        arr = Arrays.copyOf(arr,arr.length-count);
        return arr;
    }

    public static int search(int[] arr, int value) {//返回下标
     if(arr==null){
         return -1;
     }
     for (int i=0;i<arr.length;i++){
         if(arr[i]==value){
             return i;
         }
     }
     return -1;
    }
    public static void main(String[] args) {
        int[] arr = {2,2,3,1,2,4,2,8,2,2};
        arr = removeValue(arr,2);
        System.out.println(Arrays.toString(arr));
    }
}
6.两数之和(求数组中和为目标值的两个数,将其输出为数组形式);
import java.util.Arrays;
public class Demo1 {
    public static int[] getSum(int[] sums,int target){
        int i = 0,j = 0;
        loop: for(;i < sums.length;i++){
            if(target-sums[i]>=0){
                for (j=0;j<sums.length;j++){
                    if(sums[j]+sums[i]==target&&i!=j){
                        break loop;
                    }
                }
            }
        }
        int[] arr = {sums[i],sums[j]};
        return arr;
    }
    public static void main(String[] args) {
        int[] sums = {7,2,1,3,18};
        int[] arr = getSum(sums,3);
        System.out.println(Arrays.toString(arr));
        }
}

二维数组实例—打印杨辉三角

public static void YangHuiTriangle(int n){//给定需要输出的行数          
      int[][] brr = new int[n][n];                             
      brr[0][0] = brr[1][0] = brr[1][1] = 1;//前两行赋值            
      for(int i = 2;i < n;i++){                                
         brr[i][0] = brr[i][i] = 1;//第 3行开始首尾为 1               
         for(int j = 1;j < i;j++){                             
             brr[i][j] = brr[i-1][j-1] + brr[i-1][j];//每行中间部分赋值
         }                                                     
      }                                                        
      for(int i = 0;i < n;i++){//按行依次打印                        
          for(int j = 0;j < n-i-1;j++){//i前面各位置输出空格            
              System.out.print("    ");                        
          }                                                    
          for(int j = 0;j<=i;j++) {//输出其他位置的数                  
              System.out.print(brr[i][j]+"      ");            
          }                                                    
          System.out.println();//每行结束换行                        
      }                                                        
}                                                              

打印结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值