1. 数组的三种声明方式
参考文章
先引入一篇java中数据的5种存储位置(堆与栈)
java中数据的5种存储位置(堆与栈)
数组是引用变量,看一下他的存储方式
https://blog.csdn.net/qq_42869583/article/details/84305548
public class demo1 {
public static void main(String[] args) {
//第一种 过于麻烦
int[] a = new int[3];
a[0] = 1;
a[1] = 2;
a[2] = 3;
for(int i : a){
System.out.println(i);
}
//第二种(比较常用)
String[] s = {"张三","李四","tom"};
//第三种 不常用
int[] c = new int[]{1,2,3};
}
}
2. 多维数组的遍历
public class demo1 {
public static void main(String[] args) {
//二维数组的遍历
//第一种
int[][] a = {{1,2,3},{4,5,6},{7,8,9}};
for(int i = 0; i < a.length; i++){
for(int j = 0; j < a[i].length; j++ ){
System.out.print(a[i][j]+" ");
}
System.out.println();
}
//第二种 遍历每个二维数组中的一维数组
for(int[] a1 : a){
for(int a2 : a1){
System.out.print(a2+" ");
}
System.out.println();
}
//三维数组的遍历
int[][][] b = {{{1,2},{4,5}},{{6,7},{8,9}},{{10,11},{12,13}}};
for(int i = 0; i < b.length; i++){
for(int j = 0; j < b[i].length; j++){
for(int k = 0; k < b[i][j].length; k++){
System.out.print(b[i][j][j]+" ");
}
System.out.println();
}
System.out.println();
}
}
}
3. Arrays类的常用方法总结
该类包含用于操作数组的各种方法(如排序和搜索)。 该类还包含一个静态工厂,可以将数组视为列表。
如果指定的数组引用为空,则该类中的方法都抛出一个NullPointerException ,除非另有说明。
搞清楚Array 和Arrays 是不同的 不明白开下面这个博客
https://blog.csdn.net/guo0820/article/details/51030526?utm_source=blogxgwz8
- Arrays.asList的用法
import java.util.Arrays;
import java.util.List;
public class demo1 {
public static void main(String[] args) {
/**
* 使用工具类Arrays.asList()把数组转换成集合时,
* 不能使用其修改集合相关的方法,
* 它的add/remove/clear方法会抛出UnsupportOperationException异常
* 说明:asList的返回对象是一个Arrays内部类,并没有实现集合的修改方法。
* Arrays.asList体现的是适配器模式,只是转换接口,后台的数据仍是数组。
*
*/
String[] str = {"123","456"};
List<String> list = Arrays.asList(str);
//list.add("a"); //运行时异常
for(String s : list){
System.out.println(s);
}
System.out.println(list.size());//结果为2
//
int[] a = {1,2,3,4};
System.out.println(Arrays.asList(a).size()); //结果为1
//看看引用类型
Integer[] b = {1,2,3,4};
System.out.println(Arrays.asList(b).size()); //结果为4
/*
注意这里输出的数量是1,原因是,在Arrays.asList中,该方法接受一个变长参数,
一般可看做数组参数,但是因为int[] 本身就是一个类型,所以a变量作为参数传递时,
编译器认为只传了一个变量,这个变量的类型是int数组,所以size为1。
基本类型是不能作为泛型的参数,按道理应该使用包装类型,但这里缺没有报错,
因为数组是可以泛型化的,所以转换后在list中就有一个类型为int的数组
说明编译器对Integer[] 处理不一样。Integer是可变长参数。传入过程中 asList() 方法实际是将Integer数组里的元素进行存储。
*/
}
}
- copyOf()的用法
这个方法是从原数组的起始位置开始复制,复制的长度是newlength。只能从原数组的起始位置开始复制。
参考博客:https://blog.csdn.net/just16cz/article/details/80385101
import java.util.Arrays;
public class demo1 {
public static void main(String[] args) {
int[] a = {1,23,3,5,6,7};
int[] b = null;
b = Arrays.copyOf(a,4); //只能从其实位置开始复制
for(int m : b){
System.out.print(m+" ");
}
System.out.println();
b = Arrays.copyOfRange(a,1,3); //该方法是从original数组的下标from开始复制,到下标to结束
for(int n : b){
System.out.print(n+" ");
}
}
}
- sort()方法
参考博文
https://blog.csdn.net/github_38838414/article/details/80642329
import java.util.Arrays;
public class demo1 {
public static void main(String[] args) {
int[] a = {1,23,3,5,6,7};
Arrays.sort(a);
for(int m : a){
System.out.print(m+" ");
}
}
}
源码暂时不理解 以后会更新
- Arrays.toString方法
import java.util.Arrays;
public class demo1 {
public static void main(String[] args) {
int[] a = {1,23,3,5,6,7};
System.out.println(a); //打印出数组的地址
System.out.println(Arrays.toString(a)); //打印数组中的内容
}
}
toString源码
public static String toString(int[] a) {
if (a == null)
return "null";
int iMax = a.length - 1;
if (iMax == -1)
return "[]";
StringBuilder b = new StringBuilder();
b.append('[');
for (int i = 0; ; i++) {
b.append(a[i]);
if (i == iMax)
return b.append(']').toString();
b.append(", ");
}
}