Wenn es sich um ein eindimensionales Array vom gewöhnlichen primitiven Typ handelt, können Sie es mit clone () kopieren. Wenn es sich um ein Array von Klassen handelt, können Sie durch Klonen () eine flache Kopie erstellen. Wenn es sich dann um ein zweidimensionales Array vom primitiven Typ handelt ...
Früher habe ich ein anderes zweidimensionales Array erstellt und die Werte kopiert, aber als ich die Quelle von jemandem sah, dachte ich, ich könnte sie in eine Zeile schreiben.
public static void main(String[] args) {
int[][] map = new int[3][3];
for (int y=0; y<3; y++) {
for (int x=0; x<3; x++) {
map[y][x] = x+y;
}
}
System.out.println("before");
for (int y=0; y<3; y++) {
for (int x=0; x<3; x++) {
System.out.print(map[y][x] + " ");;
}
System.out.println("");
}
int[][] nmap = map.clone();
for (int y=0; y<3; y++) {
for (int x=0; x<3; x++) {
nmap[y][x] = 4-(x+y);
}
}
System.out.println("after");
for (int y=0; y<3; y++) {
for (int x=0; x<3; x++) {
System.out.print(map[y][x] + " ");;
}
System.out.println("");
}
}
Wenn du rennst
before
0 1 2
1 2 3
2 3 4
after
4 3 2
3 2 1
2 1 0
Ich wollte clone () in nmap erstellen, aber map wurde neu geschrieben.
Versuchen Sie, den Hashwert von int [] auszugeben.
public static void main(String[] args) {
int[][] map = new int[3][3];
System.out.println("before");
for (int y=0; y<3; y++) {
System.out.println(map[y]);
}
int[][] nmap = map.clone();
System.out.println("after");
for (int y=0; y<3; y++) {
System.out.println(nmap[y]);
}
}
Wenn ausgeführt,
before
[I@15db9742
[I@6d06d69c
[I@7852e922
after
[I@15db9742
[I@6d06d69c
[I@7852e922
Es ist das gleiche. Wenn Sie sorgfältig darüber nachdenken, ist es natürlich, aber da int [] ein Referenztyp ist, handelt es sich um eine flache Kopie.
Dann klone () int [].
public static void main(String[] args) {
int[][] map = new int[3][3];
System.out.println("before");
for (int y=0; y<3; y++) {
System.out.println(map[y]);
}
int[][] nmap = new int[3][];
for (int y=0; y<3; y++) {
nmap[y] = map[y].clone();
}
System.out.println("after");
for (int y=0; y<3; y++) {
System.out.println(nmap[y]);
}
}
Wenn ausgeführt,
before
[I@15db9742
[I@6d06d69c
[I@7852e922
after
[I@4e25154f
[I@70dea4e
[I@5c647e05
Diesmal ist es gut.
Versuchen Sie clone () mit int [].
public static void main(String[] args) {
int[][] map = new int[3][3];
for (int y=0; y<3; y++) {
for (int x=0; x<3; x++) {
map[y][x] = x+y;
}
}
System.out.println("before");
for (int y=0; y<3; y++) {
for (int x=0; x<3; x++) {
System.out.print(map[y][x] + " ");;
}
System.out.println("");
}
int[][] nmap = new int[3][];
for (int y=0; y<3; y++) {
nmap[y] = map[y].clone();
}
for (int y=0; y<3; y++) {
for (int x=0; x<3; x++) {
nmap[y][x] = 4-(x+y);
}
}
System.out.println("after");
for (int y=0; y<3; y++) {
for (int x=0; x<3; x++) {
System.out.print(map[y][x] + " ");;
}
System.out.println("");
}
}
Wenn ausgeführt,
before
0 1 2
1 2 3
2 3 4
after
0 1 2
1 2 3
2 3 4
nmap ist eine Kopie der Karte.
Zweidimensionale Arrays können nicht in einer Zeile geklont () werden. Selbst wenn Sie es in die Quelle einer anderen Person schreiben, gibt es keine Garantie dafür, dass es korrekt ist.
Recommended Posts