java中的数组

数组相同类型数据的有序结合。数组描述的是相同类型的若干类型,按照一定的先后顺序排列组合而成。其中,每一个数据称作一个元素,每个元素可以通过一个索引(下标)来访问他其元素。

数组的三个基本特点:

1.长度确定,一旦被创建,大小不可改变。

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

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

数组变量属于引用类型,数组也是对象,数组中的每个元素相当于对象的成员变量。

若声明了一个长度为10的int类型的数组,内存动态如下:

public class TestArray {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int[] arr01=new int[10];  //创建一个长度为10(length)的int类型的数组,索引下标0~9
        String arr02[]=null;   //数组的声明方式
        /*逐赋值法*/
        arr01[0]=13;
        arr01[1]=16;
        arr01[2]=18;*/
        //arr01[12]=19; 
        //若超越索引下标,编译正确,运行会报错,数组越界ArrayIndexOutOfBoundsException:12
        /*循环初始化数组并读取元素值*/
        for(int i=0;i<arr01.length;i++){ 
            arr01[i]=10+i;
            System.out.println(arr01[i]);
        }
        User2[] arr03=new User2[3];
        arr03[0]=new User2(1706,"aa");
        arr03[1]=new User2(1707,"ab");
        arr03[2]=new User2(1708,"ac");
        for(int i=0;i<arr03.length;i++){ 
            System.out.println(arr03[i].getName());
        }
    }
}
class User2{
    private int id;
    private String name; 
    /*构造方法*/
    public User2(int id, String name) {
        super();
        this.id = id;
        this.name = name;
    }
    /*写get、set方法*/
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }    
}

 

数组的初始化方式有3种:静态初始化、动态初始化、默认初始化

                   foreach循环:用于读取数组元素的值,不能修改元素的值

数组的复制、删除及扩容

public class TestArrayCopy {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        testBasicCopy2();
        String s1[]={"aa","bb","cc","dd","ee"};
        String s2[]=new String[10];
        String str[]={"阿里","腾讯","美团","百度","BAT","去哪儿"};
        removeElement(str,2);
        extendRange(s1);
        System.arraycopy(s1, 2, s2, 6, 3);//将s1数组从第2个位置开始拷到s2的第6个位置
    /*Object src, int srcPos, Object dest, int destPos, int length)
      从SRC数组拷贝到dest数组;srcPos数组开始拷贝的位置.destPos目标数组位置;length代表长度
    */
        for(int i=0;i<s2.length;i++){
        System.out.println(i+":"+s2[i]);
        }
    }
    //测试从数组中删除某个元素cc(本质上还是数组的拷贝)
    public static void testBasicCopy2(){
        String s1[]={"aa","bb","cc","dd","ee"};
        //String s2[]=new String[5];
        
        System.arraycopy(s1, 3, s1, 3-1, 2);
        s1[s1.length-1]=null;
        for(int i=0;i<s1.length;i++){
            System.out.println(i+":"+s1[i]);
            }
    }
    //删除数组中指定索引位置的元素,并将原数组返回
    public static String[] removeElement(String s[],int index){
        System.arraycopy(s, index+1, s, index, s.length-index-1);
        s[s.length-1]=null;
        for(int i=0;i<s.length;i++){
            System.out.println(i+":"+s[i]);
        }
        return s;
    }
    //数组的扩容(本质上是先定义一个更大的数组,然后将原数组内容原封不动地拷贝到新数组)
    public static String[] extendRange(String[] s1){
        String ss2[]=new String[s1.length+3];
        System.arraycopy(s1, 0, ss2, 0, s1.length);
        for(String j:ss2){
            System.out.println(j);
        }
        return ss2;
    }
}

数组复制的参数解释:

Array类:JDK提供的java.util.Arrays类,包含了常用的数组操作,方便我们日常开发。包含了:排序、查找、填充、打印等操作。

打印:

 排序:

 查找:

 多维数组:可以看成以数组为元素的数组,经常使用二维数组,学习容器后,一般使用容器,二维数组用的很少。

原文地址:https://www.cnblogs.com/laurarararararara/p/11361031.html