二维数组的遍历以及四种拷贝方式

原创 2018年04月15日 13:25:07

例:数组的倒置以及合并

public class TestDemo1 {
    //反转数组
    public static void reverse(int[] array){
        for(int i =0;i<array.length/2;i++){
            int tmp = array[i];
            array[i] = array[array.length-1-i];
            array[array.length-1-i] = tmp;
        }
    }
    //合并数组
    public static void merge(int[] array1,int[] array2){
        int[] array3 = new int[array1.length+array2.length];
        for(int i = 0;i < array1.length;i++){
            array3[i] = array1[i];
        }

        for(int j = 0;j < array2.length;j++){
            array3[array1.length+j] = array2[j];
        }

        for(int k = 0;k < array3.length;k++){
            System.out.print(array3[k]+" ");
        }
        System.out.println();

    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int[] array = {12,34,21,22,4,6,81,2,1};
        int[] array2 = {5,8,10};
        reverse(array);
        merge(array,array2);
    }
}

运行结果如下:
这里写图片描述

二分查找例题

public class TestDemo1 {

    public static int Search(int[] array,int val){
        int low = 0;
        int high = array.length-1;
        while(low<=high){
            //int mid = (low+high)/2;
            //int mid = low+(high-low)/2;
            int mid = (low+high)>>>1;   //下标
            if(array[mid]>val){
                high = mid - 1;
            }else if(array[mid]<val){
                low = mid + 1;
            }else{
                return mid;
            }
        }
        return -(low+1);//源码中为-(low+1)   查找数据的插入点位置
    }
    public static void main(String[] args) {
        int[] array = {12,34,21,22,4,6,81,2,1};
        Arrays.sort(array);
        System.out.println(Arrays.toString(array));
        int index = Arrays.binarySearch(array,12);
        System.out.println(index);
        //binarySearch  二分查找
    }

}

运行结果如下:
这里写图片描述

二维数组的遍历

基本类型

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

引用类型

public static void show2(TestArray[][] Array)
    {
        for (int i = 0; i < Array.length; i++) {
            for (int j = 0; j < Array[i].length; j++) {
                System.out.print(Array[i][j].getA()+"  ");
            }
            System.out.println();
        }
    }

二维数组的创建

public class TestDemo2 {
    public static void show1(int[][] array){
        for(int i = 0;i<array.length;i++){
            for(int j = 0;j<array[i].length;j++){
                System.out.println(array[i][j]+" ");
            }
            System.out.println();
        }
    }

    public static void show2(int[][] array){
        for(int[] brr: array){
            for(int i:brr){
                System.out.print(i+" ");
            }
            System.out.println();
        }
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int[][] array = new int[2][3];
        array[0][0] = 100;
        int[][] array2 = {{1,2,3},{4,5,6}};
        int[][] array3 = new int[][]{{1,2,3},{4,5,6}};
        show2(array);
        System.out.println("========");
        show2(array2);
        System.out.println("========");
        show2(array3);
        System.out.println("========");
        //不规则数组
        int[][] array4 = new int[2][];
        array4[0] = new int[3];
        array4[1] = new int[2];
        array4[0][0] = 100;
        show2(array4);
        //System.out.println(array4[0][0]);
        //int[][] array5 = new int[][3];   //格式错误
        }
}

这里写图片描述

拷贝方式

(1)for循环

基本类型

public class TestDemo3 {

    public static void show1(int[][] array){
        for(int i = 0;i<array.length;i++){
            for(int j = 0;j<array[i].length;j++){
                System.out.print(array[i][j]+" ");
            }
            System.out.println();
        }
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int[][] array = {{1,2,3},{4,5,6}};
        int[][] array2 = new int[2][3];
        //for循环拷贝
        for (int i = 0; i < array.length; i++) {         
            for (int j = 0; j < array[i].length; j++) {
                array2[i][j] = array[i][j];
            }
        }
        show1(array);
        System.out.println("========");
        show1(array2);
        array2[0][0] = 100;
        System.out.println("====改变后====");
        show1(array);
        System.out.println("========");
        show1(array2);
        }
}

这里写图片描述
引用类型

class TestArray{
    private int a=10;

    public int getA() {
        return a;
    }
    public void setA(int a) {
        this.a = a;
    }
}
public class TestDemo3 {
    public static void show2(TestArray[][] Array)
    {
        for (int i = 0; i < Array.length; i++) {
            for (int j = 0; j < Array[i].length; j++) {
                System.out.print(Array[i][j].getA()+"  ");
            }
            System.out.println();
        }
    }
    public static void main(String[] args) {
        TestArray[][] a = new TestArray[2][3];
        TestArray[][] b = new TestArray[2][3];
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[i].length; j++) {
                a[i][j] = new TestArray();
            }
        }

        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[i].length; j++) {
                b[i][j] = a[i][j];
            }
        }
        show2(a);
        System.out.println("========");
        show2(b);
        b[0][0].setA(1000);
        System.out.println("====改变后====");
        show2(a);
        System.out.println("========");
        show2(b);
    }
}

这里写图片描述

(2)clone方法

基本类型

public class TestDemo4 {
    public static void show1(int[][] array){
        for(int i = 0;i<array.length;i++){
            for(int j = 0;j<array[i].length;j++){
                System.out.print(array[i][j]+" ");
            }
            System.out.println();
        }
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int[][] a = {{1,2,3},{4,5,6}};
        int[][] b = new int[2][3] ;

        for (int i = 0; i < a.length; i++) {
            b[i] = a[i].clone();
        }
        show1(a);
        System.out.println("========");
        show1(b);
        b[0][0] = 100;
        System.out.println("====改变后====");
        show1(a);
        System.out.println("========");
        show1(b);
        System.out.println("========");
        int[] array3 = {1,2,3,4,5};
        int[] array4;
        System.out.println(array3);
        array4 = array3.clone();
        System.out.println(array4);
    }
}

这里写图片描述
引用类型

class TestArray2{
    private int a=10;

    public int getA() {
        return a;
    }
    public void setA(int a) {
        this.a = a;
    }
}
public class TestDemo4 {
    public static void show2(TestArray[][] Array)
    {
        for (int i = 0; i < Array.length; i++) {
            for (int j = 0; j < Array[i].length; j++) {
                System.out.print(Array[i][j].getA()+"  ");
            }
            System.out.println();
        }
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        TestArray[][] a = new TestArray[2][3];
        TestArray[][] b = new TestArray[2][3];
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[i].length; j++) {
                a[i][j] =new TestArray();
            }
        }
        for (int j = 0; j < a.length; j++) {
            b[j] = a[j].clone();
        }
        show2(a);
        System.out.println("========");
        show2(b);
        b[0][0].setA(1000);
        System.out.println("====改变后====");
        show2(a);
        System.out.println("========");
        show2(b);
    }
}

这里写图片描述

(3)System.arraycopy拷贝

基本类型

public class TestDemo6 {
    public static void show1(int[][] array){
        for(int i = 0;i<array.length;i++){
            for(int j = 0;j<array[i].length;j++){
                System.out.print(array[i][j]+" ");
            }
            System.out.println();
        }
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int[][] array = {{1,2,3},{4,5,6}};
        int[][] array2 = new int[2][3];
        for(int i = 0 ;i<array.length;i++){
            System.arraycopy(array[i], 0, array2[i], 0, array[i].length);
        }
        show1(array);
        System.out.println("======");
        show1(array2);
        array2[0][0] = 1000;
        System.out.println("====改变后====");
        show1(array);
        System.out.println("======");
        show1(array2);
    }
}

这里写图片描述
引用类型

class TestArray3{
    private int a=10;
    public int getA() {
        return a;
    }
    public void setA(int a) {
        this.a = a;
    }
}
public class TestDemo6 {
    public static void show2(TestArray3[][] Array)
    {
        for (int i = 0; i < Array.length; i++) {
            for (int j = 0; j < Array[i].length; j++) {
                System.out.print(Array[i][j].getA()+"  ");
            }
            System.out.println();
        }
    }
    public static void main1(String[] args) {
        TestArray3[][] t1 = new TestArray3[2][3];
        TestArray3[][] t2 = new TestArray3[2][3];
        for (int i = 0; i < t1.length; i++) {
            for (int j = 0; j < t1[i].length; j++) {
                t1[i][j] =new TestArray3();
            }
        }
        for(int i = 0 ;i<t1.length;i++){
            System.arraycopy(t1[i], 0, t2[i], 0, t1[i].length);
        }
        show2(t1);
        System.out.println("=======");
        show2(t2);
        t2[0][0].setA(1000);
        System.out.println("====改变后====");
        show2(t1);
        System.out.println("=======");
        show2(t2);
    }
}

这里写图片描述

(4)Arrays.copyof方法拷贝

基本类型

public class TestDemo7 {
    public static void show1(int[][] array){
        for(int i = 0;i<array.length;i++){
            for(int j = 0;j<array[i].length;j++){
                System.out.print(array[i][j]+" ");
            }
            System.out.println();
        }
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int[][] array = {{1,2,3},{4,5,6}};
        int[][] array2 = new int[2][3];
        array2 = Arrays.copyOf(array,array2.length);
        show1(array);
        System.out.println("=========");
        show1(array2);
        array2[0][0] = 1000;
        System.out.println("=====改变后哦====");
        show1(array);
        System.out.println("=========");
        show1(array2);
    }
}

这里写图片描述
引用类型

class TestArray4{
    private int a=10;
    public int getA() {
        return a;
    }
    public void setA(int a) {
        this.a = a;
    }
}
public class TestDemo7 {
    public static void show2(TestArray4[][] Array)
    {
        for (int i = 0; i < Array.length; i++) {
            for (int j = 0; j < Array[i].length; j++) {
                System.out.print(Array[i][j].getA()+"  ");
            }
            System.out.println();
        }
    }
    public static void main(String[] args) {
        TestArray4[][] t1 = new TestArray4[2][3];
        TestArray4[][] t2 = new TestArray4[2][3];
        for (int i = 0; i < t1.length; i++) {
            for (int j = 0; j < t1[i].length; j++) {
                t1[i][j] =new TestArray4();
            }
        }
        t2 = Arrays.copyOf(t1, t1.length);
        show2(t1);
        System.out.println("=========");
        show2(t2);
        System.out.println("=====改变后哦====");
        t2[0][0].setA(100);
        show2(t1);
        System.out.println("=========");
        show2(t2);
    }
}

这里写图片描述

二叉树的四种遍历方式

1、前序遍历 前序遍历即先遍历完左子树,再访问父节点,最后遍历完右子树public class T1 { static class Node { int val; ...
  • gu_solo
  • gu_solo
  • 2016-09-14 12:32:51
  • 1270

List遍历四种方式

package com.zkpk.collection; import java.util.ArrayList; import java.util.Iterator; import java.util...
  • woshiermingerming
  • woshiermingerming
  • 2016-09-06 13:13:59
  • 307

二维数组遍历最佳方法

二维数组遍历最佳方法,代码如下 package 629niuniu.com; public class Test6 { public static void main(String[] arg...
  • zxs123csdn
  • zxs123csdn
  • 2017-08-08 09:34:01
  • 201

第八讲 数组的定义与四种赋值方式、遍历和内存分析

导读 关于Java数组,它是一种数据的容器。但这种容器是有规定,不同数据类型的容器,会存储不同的数据。 整数有int类型的数据—— 注意:数组的元素是怎么确定位置的呢,对,就是从0开始的...
  • u013003505
  • u013003505
  • 2017-12-06 10:51:56
  • 128

二维数组更快的遍历方式

代码常数怎么才能小一点呢~ 先安利一下 BulaBulaCHN的整洁即是正义 怀念他教我卡常的日子 泪 之后啊 我就来说一个小东西 还是转的。。。来自二维数组不同遍历方法效率比较 ...
  • BlackJack_
  • BlackJack_
  • 2017-10-10 18:39:24
  • 418

二叉树四种遍历方式

/* 二叉树的四种遍历方式 */ #include #include using namespace std; // 二叉树节点的定义 class TreeNode{ public: ...
  • jobbofhe
  • jobbofhe
  • 2016-07-08 22:27:35
  • 1110

遍历HashMap的四种方式

转载:http://www.cnblogs.com/gywbg/archive/2012/04/20/2459415.htmlimport java.util.ArrayList;import jav...
  • lcg910978041
  • lcg910978041
  • 2016-07-25 10:47:00
  • 165

怎样用指针遍历二维数组

如:a[3][4]是一个二维数组, 怎么定义一个指针p,使得它能替代数组名a? 比如对于访问一个元素,如果用数组名,可以这样:*(*(a+i)+j) 怎么定义然后赋值使得p 也可以这样取数据:*(*(...
  • u010078590
  • u010078590
  • 2015-12-10 09:51:56
  • 164

二叉树的四种遍历遍历以及查找拷贝

#include&amp;lt;iostream&amp;gt; #include&amp;lt;queue&amp;gt; using namespace std; class Node//创建节...
  • Tangbincheng
  • Tangbincheng
  • 2018-04-08 17:24:47
  • 4

Java容器---遍历Collection,Set的三种方法

Java容器----对Collection三种遍历的方法 Collection方法总结(数字图标标记为重点方法) 添加          boolean add(E e)          boo...
  • bestxianfeng163
  • bestxianfeng163
  • 2017-08-08 18:48:45
  • 193
收藏助手
不良信息举报
您举报文章:二维数组的遍历以及四种拷贝方式
举报原因:
原因补充:

(最多只允许输入30个字)