JAVA 一维数组

                                            一维数组

一维数组: 100个整型
2个整型
1.相同数据类型的集合
2.一块连续内存
100 * 4 =400字节
一:一维数组的定义:
1)int [ ] arr = {1,2,3}; [1] [2] [3] //3
2)int[ ] arr = new int[ ]{1,2,3};
3)int[ ] arr = new int[3];//[0][0][0] 类型的默认值
一位数组的内存分布:
引用变量:栈和堆
数据访问:arr[0]=99;
arr[1]=100;
int 下标
二:遍历:
1) for(int index = 0;index < arr.length; i++)
// {System.out.println(arr[index]);}
2) foreach:
for(int value : arr){ 迭代器
System.out.println(value);
}
3) System.out.println(Arrays.toString(arr));
例:
有三个格子分别为1,2,3;
1.将第二个格子值改为100
2.遍历打印:1 2 3
3.尝试打印 arr[3]会出现什么现象
会出现下标越界异常ArrayIndexOutOfBoundsException
4.在原数组内容上添加一个元素 4
得到预期结果: 1 2 3 4
1.

public class TestDemo {
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        int[] arr={1,2,3};
        arr[1]=100;
        System.out.println(Arrays.toString(arr));
    }
}

在这里插入图片描述
4.

public class TestDemo {
    public static int[] addValue(int[] arr,int value){
        arr = Arrays.copyOf(arr,arr.length+1);
        arr[arr.length-1]=value;
        return arr;
    }
    public static void main(String[] args) {
        int[] arr = {1,2,3};
        arr = addValue(arr,4);
        System.out.println(Arrays.toString(arr));
    }
}

![在这里插入图片描述](https://img-blog.csdnimg.cn/20190602213344123.png

例二: 有一个数组{1,2,3,4,5},将其输出并使奇数在前,偶数在后
思路一:开辟一个新内存
public class TestDemo {
    public static void main(String[] args){
        Scanner scanner =new Scanner(System.in);
        int[] arr = {1,2,3,4,5,6};
        int[ ] brr = new int[arr.length];
        int i=0;//遍历原数组
        int left=0,right=brr.length-1;
        for(;i<arr.length;i++){
            if(arr[i]%2==1){//奇数
                brr[left++]=arr[i];
            }else{
                brr[right--]=arr[i];
            }
        }
        System.out.println(Arrays.toString(brr));
    }
}

思路二:无需开辟新内存,直接对原数组操作

public class TestDemo {
    public static void main(String[] args){
        Scanner scanner =new Scanner(System.in);
        int[] arr = {1,2,3,4,5,6};
        int i=0,j=arr.length-1;
       while(i+1<j){
           while(i < j && arr[i]%2 == 1){//i下标所在值是奇数i++
               i++;
           }
           while(i < j && arr[j]%2==0){
               j--;
           }
           //i标记偶数 j标记奇数  奇数偶数互换
           int temp = arr[i];
           arr [i]=arr[j];
           arr[j]=temp;
       }
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];
2.int[] brr=arr.clone();
3.brr= Arrays.copyOf(arr,arr.length);
4…System.arraycopy(arr,0,brr,0,arr.length);
此四种皆为深拷贝

四:
扩容: arr=Arrays.copyOf(arr,arr.length+1);
缩容: arr=Arrays.copyOf(arr,arr.length- 1);

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值