数组
1.数组的拷贝
int[] arr = new int[10];
int[] ass = arr;
ass[5] = 12;
System.out.println(arr[5]); // 结果为 12
在此代码中,这两个变量实际上是共用同一个数组。这也是萌新可能会犯的误区。
如果喜欢将数组拷贝到一个新的数组中需要使用 Arrays中的 copyOf方法
int[] arr = {1,2,3,4,5,6};
int[] ass = Arrays.copyOf(arr,arr.length);
ass[2] = 100;
System.out.println(Arrays.toString(arr)); //[1, 2, 3, 4, 5, 6]
System.out.println(Arrays.toString(ass)); //[1, 2, 100, 4, 5, 6]
如果元素是数值型,那么额外的元素将被赋值为0,boolean为false。小于原始长度将只拷贝前面的值
2.数组排序
轻松简明的方法,使用Arrays类中的sort方法
int[] a = {2,1,100,3,9,0,1};
Arrays.sort(a);
System.out.println(Arrays.toString(a)); //[0, 1, 1, 2, 3, 9, 100]
这个方法使用了优化的快速排序算法。
以下是一个抽奖游戏中随机数组组合
Scanner sc = new Scanner(System.in);
System.out.println("抽取多少个数");
int k = sc.nextInt();
System.out.println("一共有多少数");
int n = sc.nextInt();
int[] arr = new int[n];
for (int i = 0; i < arr.length; i++) {
arr[i] = i + 1;
}
int[] ass = new int[k];
for (int i = 0; i < ass.length; i++) {
int r = (int) (Math.random()*n); //random方法,参数一个0到1的随机数
ass[i] = arr[r];
n--;
}
Arrays.sort(ass);
for (int i : ass) {
System.out.println(i);
}
API: java.util.Arrays
toString(元素类型[] a)方法 //返回包含a中元素的一个字符串,其中还包含一对中括号,并含有逗号分隔
copOf(元素类型[] a,int end) //返回一个于a相同的一个数组,其长度为end。end如果大于a.langth(),结果会被0或者false填充
copOfRange(元素类型[] a,int 起始,int 终点) //和上面的类似,不过是截取其中的一段 : [)
sort(元素类型[] a) //快速排序(升序)
int binarySearch(元素类型[] a, 元素类型 v) 使用二分法查找值v,如果找到则返回相应的下标,否则返回一个负数值r,
int binarySearch(元素类型[] a,int 起始,int 终点,元素类型 v)
fill(元素类型[] a, 元素类型 v) //把所有元素都设置成v
boolean equals(元素类型[] a,元素类型[] b) //比较数组大小,下标,元素都对应相等:返回 true
3.多维数组
//创建一个二维数组
int[][] arr;
多维数组的注意事项:
在for each循环中变量语句不能自动处理二维数组中的每一个元素。它会循环处理行,而这些行本身就是一维数组。要想访问所有元素需要使用两个嵌套循环
int[][] arr = new int[2][2];
for (int[] ints : arr) {
for (int anInt : ints) {
System.out.println(anInt);
}
}
//打印结果:0 0 0 0
for (int[] ints : arr) {
System.out.println(ints);
}
//打印结果:[I@5b480cf9 [I@6f496d9f //十六进制的哈希码值
提示:要想快速打印一个二维数组的数据元素列表可以调用Arrays类中的deepToString()方法
System.out.ptintln(Arrays.deepToString(arr))