一维数组变二维数组 java 二维数组变成一维数组java_java二维数组遍历后转为一维数组


一 数组的定义

数组是相同类型数据的有序集合。

数组描述的是相同类型的若干个数据,按照一定的先 后次序排列组合而成。其中,每一个数据称作一个元素,每个元素可以通过一个索引(下标) 来访问它们。数组的四个基本特点:

1.长度是确定的。数组一旦被创建,它的大小就是不可以改变的。

2. 其元素的类型必须是相同类型,不允许出现混合类型。

3. 数组类型可以是任何数据类型,包括基本类型和引用类型。

4. 数组变量属于引用类型,数组也是对象。

理解点:


数组也是对象,数组中的每个元素相当于该对象的成员变量


二 数组的初始化

1.数组声明

基本语法


type


注意事项:

1.声明的时候并没有实例化任何对象,只有在实例化数组对象时,JVM 才分配空间,这时 才与长度有关

2.声明一个数组的时候并没有数组真正被创建。

3.构造一个数组,必须指定长度。

示例:创建基本类型一维数组


public class Test {
public static void main(String args[ ]) {
  int[ ] numm1 = null; // 声明数组;
  numm1 = new int[10]; // 给数组分配空间;
  for (int i = 0; i < 10; i++) {
  numm1[i] = 2 * i + 1;
  //给数组元素赋值;数组是对象,数组中的元素就是对象的属性
  System.out.println(s[i]);
   }
  }
}


示例:创建基本类型一维数组


class Student{
  private int age;
  private int id;
  public Man(int id,int age) {
    super();
    this.age = age;
    this.id = id;
  }
}
public class AllStudent{
public static void main(String[ ] args) {
    Student[ ] students; //声明引用类型数组;
    students= new Student[10]; //给引用类型数组分配空间;
    Student s1 = new Student(1,11);
    Student s2 = new Student(2,22);
    students[0]=m1;//给引用类型数组元素赋值;
    students[1]=m2;//给引用类型数组元素赋值;
  }
}


2.数组初始化

数组的初始化方式总共有三种:静态初始化、动态初始化、默认初始化。

静态初始化

除了用 new 关键字来产生数组以外,还可以直接在定义数组的同时就为数组元素分配 空间并赋值。


int [ ] a = { 1, 2, 3 };// 静态初始化基本类型数组;
Stud[ ] stu = { new Stud(1, 1), new Stud(2, 2) };
    // 静态初始化引用类型数组;


动态初始化

数组定义与为数组元素分配空间并赋值的操作分开进行。


int[ ] a1 = new int[2];//动态初始化数组,先分配空间;
a1[0]=1;//给数组元素赋值;
a1[1]=2;//给数组元素赋值;


默认初始化

数组是引用类型,它的元素相当于类的实例变量,

因此数组一经分配空间,其中的每个 元素也被按照实例变量同样的方式被隐式初始化。


int a2[ ] = new int[2]; // 默认值:0,0
boolean[ ] b = new boolean[2]; // 默认值:false,false
String[ ] s = new String[2]; // 默认值:null, null


二 数组的常见操作(遍历 , 拷贝)

数组创建后,我们经常需要对数组做两种最常见的操作:

遍历、拷贝

遍历

指的就是“通过循环遍历数组的所有元素”。

拷贝

指的是将某个数组的内容拷贝到另一个数组中。

1.数组的遍历

数组元素下标的合法区间:[0, length-1]。我们可以通过下标来遍历数组中的元素,遍历时可以读取元素的值或者修改元素的值。

1.1普通for循环遍历 idea快捷键:itar


public class Test {
public static void main(String[ ] args) {
    int[ ] a = new int[4];
    //初始化数组元素的值
    for(int i=0;i<a.length;i++){
    a[i] = 100*i;
}
//读取元素的值
for(int i=0;i<a.length;i++){
    System.out.println(a[i]);
    }
}


执行结果

100

200

300

400

1.2增强for循环遍历(for-each循环) idea快捷键iter

增强 for 循环 for-each 是 JDK1.5 新增加的功能,专门用于读取数组或集合中所有的元 素,即对数组进行遍历。

一般用于读取元素值遍历过程中不能修改数组中的某元素的值,仅用于遍历,不涉及有关索引(下标)的操作


public class Test {
public static void main(String[ ] args) {
String[ ] ss = { "aa", "bbb", "ccc", "ddd" };
    for (String temp : ss) {
    System.out.println(temp);
    }
  }
}


执行结果:

aa

bbb

ccc

ddd

1.数组的拷贝-arraycopy

System 类里也包含了一个 static void arraycopy(object src,int srcpos,object dest, int destpos,int length)方法,该方法可以将 src 数组里的元素值赋给 dest 数组 的元素,其中 srcpos 指定从 src 数组的第几个元素开始赋值,length 参数指定将 src 数组 的多少个元素赋给 dest 数组的元素。

static void arraycopy(object src,int srcpos,object dest, int destpos,int length)

参数解释

object src : 起始数组

int srcpos : 拷贝起始元素位置

object dest : 目标数组

int destpos : 黏贴拷贝元素起始位置

int length : 拷贝总长度


public class Test {
public static void main(String args[ ]) {
    String[ ] s = {"赵","钱","孙","李","周"};
    String[ ] sBak = new String[6];
System.arraycopy(s,0,sBak,0,s.length);
      for (int i = 0; i < sBak.length; i++) {
      System.out.print(sBak[i]+ "t");
      }
    }
}