Java——数组的拷贝

1.for循环拷贝:

        int[] array={1,2,3,4,5};
        int[] brray=new int[array.length];
        for(int i=0;i<array.length;i++) {
            brray[i]=array[i];
        }

这是基本数据类型,如果修改b[i]的值,则a[i]的值不会发生变化,所以称之为深拷贝;

	class TestArray{
    private int val=10;
    public void setVal(int val){
        this.val=val;
    }
    public int getVal(){
        return this.val;
    }
}
		 TestArray[] t1=new TestArray[4];
        t1[0]=new TestArray();
        t1[1]=new TestArray();
        t1[2]=new TestArray();
        t1[3]=new TestArray();
        TestArray[] t2=new TestArray[4];
        for(int i=0;i<t1.length;i++) {
            t2[i]=t1[i];
        }

而引用数据类型时,改变t2[i]的值,则t1[i]的值也会发生改变,即为浅拷贝;
总的来说,for循环的拷贝是 浅拷贝

2. Object.clone()拷贝:

		int[] array={1,2,3,4,5};
        int[] brray=array.clone();
class TestArray{
    private int val=10;
    public void setVal(int val){
        this.val=val;
    }
    public int getVal(){
        return this.val;
    }
}
    public static void main4(String[] args) {
        TestArray[] t1=new TestArray[4];
        t1[0]=new TestArray();
        t1[1]=new TestArray();
        t1[2]=new TestArray();
        t1[3]=new TestArray();
        TestArray[] t2=t1.clone();
        }

array.clone(),会产生一个新的数组,然后将array数组的值复制到新数组中去;
简单数据类型是深拷贝;
引用数据类型是浅拷贝,
总的来说是浅拷贝;

3. Arrays.copyOf()拷贝:

		int[] array={1,2,3,4,5};
        int[] brray=Arrays.copyOf(array,array.length);
class TestArray{
    private int val=10;
    public void setVal(int val){
        this.val=val;
    }
    public int getVal(){
        return this.val;
    }
}
 public static void main(String[] args) {
        TestArray[] t1=new TestArray[4];
        t1[0]=new TestArray();
        t1[1]=new TestArray();
        t1[2]=new TestArray();
        t1[3]=new TestArray();
        TestArray[] t2=Arrays.copyOf(t1,t1.length);
        }

同样的,Arrays.copyOf()会产生一个新数组,然后将Array数组的值复制到新数组中去,与array.clone不同的是,Arrays.copyOf()第二个参数,是定义要拷贝的长度;
简单数据类型是深拷贝;
引用数据类型是浅拷贝,
总的来说是浅拷贝;
### 4. System.arraycopy()拷贝:

        int[] array={1,2,3,4,5};
        int[] brray=new int[array.length];
        System.arraycopy(array,0,brray,0,array.length);
class TestArray{
    private int val=10;
    public void setVal(int val){
        this.val=val;
    }
    public int getVal(){
        return this.val;
    }
}
public static void main6(String[] args) {
        TestArray[] t1=new TestArray[4];
        t1[0]=new TestArray();
        t1[1]=new TestArray();
        t1[2]=new TestArray();
        t1[3]=new TestArray();
        TestArray[] t2=new TestArray[4];
        System.arraycopy(t1,0,t2,0,t1.length);
        }

System.arraycopy() 里面有四个参数:
src - 源数组。
srcPos - 源数组中的起始位置。
dest - 目标数组。
destPos - 目标数据中的起始位置。
length - 要复制的数组元素的数量
System.arrayCopy 只复制已有的数组,
简单数据类型是深拷贝;
引用数据类型是浅拷贝,
总的来说是浅拷贝。

练习题

2.2 如何排序数组并插入某个元素?

 public static void insert(int[] array,int key) {
        Arrays.sort(array);
        int index=0;
        for(int i=0;i<array.length;i++){
            if(key<array[i]){
                index=i;
                break;
            }
        }
       int[] brray=Arrays.copyOf(array,array.length+1);
        for(int j=brray.length-1;j>=index;j--){
            brray[j]=brray[j-1];
        }
        brray[index]=key;
        System.out.println(Arrays.toString(brray));
    }

2.5如何搜索数组中的最小值和最大元素?

 public static int[] maxMin(int[] array) {
        int min = array[0];
        int max = array[0];
        int[] brray = {0,0};
        for(int i = 0;i < array.length;i++) {
            if(array[i] > max) {
                max = array[i];
            } else if(array[i] < min) {
                min = array[i];
            }
        }
        brray[0] = min;
        brray[1] = max;
        return brray;
    }

2.6如何合并两个数组(合并到一个新的数组)?

public static void merge(int[] array,int[] brray) {
        int[] crray=new int[array.length+brray.length];
        System.arraycopy(array,0,crray,0,array.length);
        System.arraycopy(brray,0,crray,array.length,brray.length);
        System.out.println(Arrays.toString(crray));
    }

2.10:如何删除数组指定元素?

public static void delect(int[] array,int key) {
       Arrays.sort(array);
       int x= Arrays.binarySearch(array,key);
       int[] brray=Arrays.copyOf(array,array.length-1);
       for(int i=x;i<array.length-1;i++){
           brray[i]=array[i+1];
       }
       System.out.println(Arrays.toString(array));
    }

2.11: 如何从数组中查找常见的元素?

       int[] array={3,4,2,8,7,5};
       Arrays.sort(array);
       int x= Arrays.binarySearch(array,8);
       System.out.println(x);

1.将奇数放在偶数前面 大小顺序不要求

public static void paixu(int[] array){
        int i=0;
        int j=array.length-1;
        while(i<j){

            while(i<j&&array[i]%2!=0){
                i++;
            }
            while(i<j&&array[j]%2==0) {
                j--;
            }
            int tmp=array[i];
            array[i]=array[j];
            array[j]=tmp;
            continue;
        }
        System.out.println(Arrays.toString(array));

2.一个数组是有序的,给定一个key:数字 有两个数字的和加起来等于key找到这两个数字的下标。

 public static  void add(int[] array,int key){
     for(int i=0;i<array.length;i++){
         for(int j=i;j<array.length;j++){
             if(key==array[i]+array[j]) {
                 System.out.println(i);
                 System.out.println(j);
                 break;
             }
         }
         break;
     }
    }

3. 一个整形数组,除了两个数字只出现一次外,其他数字都是两次。

  public static int[] findNumberApperOnce(int[] array) {
        int a=0;
        for(int i=0;i<array.length;i++) {
            a=a^array[i];
        }
        int index=weishu(a);
        int n1=0;
        int n2=0;
        for(int i=0;i<array.length;i++) {
            if (isOne(array[i], index)) {
                n1=n1^array[i];
            }else{
                n2=n2^array[i];
            }
        }
        int[] brray={0,0};
        brray[0]=n1;
        brray[1]=n2;
        return brray;
    }
 public static int weishu(int  number) {
        int count=0;
        while((number&1)==0&&count<32){
            number=number>>>1;
            count++;
        }
        return count;
    }
public static boolean isOne(int number,int index) {
        number=number>>index;
        if((number&1)==0){
            return false;
       }
       return true;
    }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中,数组是一种用于存储多个相同类型的数据的数据结构。数组的用法包括声明、初始化、访问和遍历。 1. 声明数组:可以使用以下方式声明数组: - `int[] arr;`:声明一个整型数组 - `String[] names;`:声明一个字符串数组 - `double[] scores;`:声明一个双精度浮点数数组 2. 初始化数组:可以使用以下方式初始化数组: - `arr = new int;`:初始化一个长度为5的整型数组 - `names = new String[]{"Alice", "Bob", "Charlie"};`:初始化一个包含指定元素的字符串数组 - `scores = {98.5, 87.0, 92.5};`:简化形式的初始化数组 3. 访问数组:可以使用索引来访问数组中的元素,索引从0开始计数。例如,`arr`表示数组中的第一个元素,`names`表示数组中的第三个元素。 4. 遍历数组:可以使用循环结构来遍历数组中的所有元素。例如,可以使用for循环来遍历整型数组: ``` for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } ``` 5. 数组拷贝:可以使用`System.arraycopy()`方法或`Arrays.copyOf()`方法来进行数组拷贝操作。 6. 数组排序:可以使用`Arrays.sort()`方法对数组进行排序。 7. 不规则数组Java中也支持不规则数组,即数组中的元素可以是数组。例如,可以创建一个二维数组`int[][] array`,其中每个元素都是一个一维数组。可以通过循环嵌套来遍历和访问不规则数组中的元素。 以上是Java数组的基本用法。可以根据具体的需求和情况使用数组来存储和处理数据。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Java——数组的使用](https://blog.csdn.net/qq_59599094/article/details/127728786)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值