【Java基础】数组及其操作

数组

数组是保存同一类型数据的定长容器对象

数组元素的索引下表从0开始

声明数组

int[] anArray;

数组的类型type[] 和数组的名称

声明实际上并不创建数组; 它只是告诉编译器该变量将包含指定类型的数组。

也可以把括号放在数组名字后面: int anArray[];(不推荐)

创建数组

关键字 :new

anArray = new int[10];

创建并初始化数组

int[] anArray2 = { 
    100, 200, 300,
    400, 500, 600, 
    700, 800, 900, 1000
};

返回匿名数组

return new int[]{1,1,1}

为数组赋值

anArray[0] = 100; 
anArray[1] = 200; 
anArray[2] = 300; 

访问数组

System.out.println("Element 1 at index 0: " + anArray[0]);

数组长度

数组的长度是arr.length

注意区别于字符串的s.length()

打印数组

直接输出数组,得到的是其地址,底层调用了Object的toString()

   System.out.println(new int[]{1,2,3});//[I@1b6d3586

因此我们可以遍历数组进行打印

想要把数组转换成字符串,可以使用Arrays.toString()

多维数组

String[][] names = {
            {"Mr. ", "Mrs. ", "Ms. "},
            {"Smith", "Jones"}
        };

复制数组

方法:System.arraycopy

public static void arraycopy(Object src, int srcPos,
                             Object dest, int destPos, int length)

两个 Object 参数指定要复制的数组和要复制到的数组。

三个 int 参数指定源数组中的起始位置、目标数组中的起始位置以及要复制的数组元素的数量。

class ArrayCopyDemo {
    public static void main(String[] args) {
        String[] copyFrom = {
            "Affogato", "Americano", "Cappuccino", "Corretto", "Cortado",   
            "Doppio", "Espresso", "Frappucino", "Freddo", "Lungo", "Macchiato",      
            "Marocchino", "Ristretto" };
        
        String[] copyTo = new String[7];
        System.arraycopy(copyFrom, 2, copyTo, 0, 7);
        for (String coffee : copyTo) {
            System.out.print(coffee + " ");           
        }
    }
}

起别名

请注意,数组名表示的是整个数组——如果我们将一个数组变量赋予另一个变量,那么两个变 量将会指向同一个数组。例如以下这段代码:
int[] a = new int[N]; … a[i] = 1234; … int[] b = a; … b[i] = 5678; // a[i] 的值也会变成 5678 这种情况叫做起别名,有时可能会导致难以察觉的问题。如果你是想将数组复制一份,那么应该声明、 创建并初始化一个新的数组,然后将原数组中的元素值挨个复制到新数组

数组的操作

java.util

复制数组

copyOfRange

和arraycopy不同之处在于,使用 copyOfRange 方法不需要在调用方法之前创建目标数组,因为目标数组由方法返回:

copyOfRange 方法的第二个参数是要复制的范围的初始索引(包括),而第三个参数是要复制的范围的最终索引(不包括)。


class ArrayCopyOfDemo {
    public static void main(String[] args) {
        String[] copyFrom = {
            "Affogato", "Americano", "Cappuccino", "Corretto", "Cortado",   
            "Doppio", "Espresso", "Frappucino", "Freddo", "Lungo", "Macchiato",      
            "Marocchino", "Ristretto" };
        
        String[] copyTo = java.util.Arrays.copyOfRange(copyFrom, 2, 9);        
        for (String coffee : copyTo) {
            System.out.print(coffee + " ");           
        }            
    }
}
搜索索引

在数组中搜索特定值以获取放置该数组的索引(binarySearch 方法)。

System.out.println(Arrays.binarySearch(names,"Lungo"));//9
比较

比较两个数组以确定它们是否相等(equals 方法)。

System.out.println(java.util.Arrays.equals(array,array2));//true
System.out.println(array.equals(array2));//true
填充

填充数组以在每个索引处放置特定值(fill 方法)。

排序

将数组按升序排序。这可以使用sort方法顺序完成,也可以使用 javase8中引入的 parallelSort 方法并发完成。

在多处理机系统上,大型数组的parallelSort排序比sort排序要快。

 Arrays.sort(nums);
toString

将数组转换为字符串。toString 方法将数组的每个元素转换为字符串,用逗号分隔元素,然后用中括号包围元素。

public class Test {
    public static void main(String[] args) {
        String[] names = {
                "Affogato", "Americano", "Cappuccino"};
        System.out.println(names.toString());//[Ljava.lang.String;@5cad8086
        System.out.println(java.util.Arrays.toString(names));//[Affogato, Americano, Cappuccino]
       
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值