整列
7977 ワード
たんれつ
生成:資料型[]変数名=new資料型[個数];
呼び出し:変数名[インデックス]
インデックス:0から、連続==数量-1
跳んでいないところ(0)から何回か踊ります
Javaにはポインタの概念がないので、配列をオブジェクトとして印刷します.(ヒップ領域を使用)=タイルオブジェクト
したがって、比較値ではなく、比較参照-->場合によっては、希望の結果が出るかもしれません.浅い放射線
funcメソッドは転送配列されている. 深放射(1) 深放射(2) セクションのみをコピーします. アレイの深い複製(3,Arrays class) アレイを完全にコピーします.copyOf Arrays.copyOfRange パッケージによる
同じパッケージ:クラス名は を省略しました
java.langパッケージ-パッケージ名の詳細は説明しません(省略可能)
複数のアレイ
:配列 temp配列を作成する必要のない重複文 toString()出力 を使用を変更します.
配列=参照変数=オブジェクトへのアドレス値=>初期化=>値を指定しない場合はデフォルトnullに初期化
複数配列-配列されたアドレスがあります.配列が作成されていない場合は、オブジェクトが存在しないため、アドレス値はnullです.そこにどんな数字を書いた瞬間も、その住所を指すからです.(0でも)
element size=オブジェクトが作成されていません-->指向性のないアドレス=null
複数のアレイの特性
生成:資料型[]変数名=new資料型[個数];
呼び出し:変数名[インデックス]
インデックス:0から、連続==数量-1
跳んでいないところ(0)から何回か踊ります
package com.bit.day06;
public class Ex01 {
public static void main(String[] args) {
/* su[0]=1;
su[1]=3;
su[2]=5;
su[3]=7;
su[4]=9;
*/
// int su[] = new int[]{1,3,5,7,9};
int[] su={1,3,5,7,9}; //경우에 따라 허용하는 문법
for(int i=0; i<5; i++){
System.out.println(su[i]);
}
}
}
su=ポインタとしての役割を果たす.参照変数です.(住所を参照)Javaにはポインタの概念がないので、配列をオブジェクトとして印刷します.(ヒップ領域を使用)=タイルオブジェクト
したがって、比較値ではなく、比較参照-->場合によっては、希望の結果が出るかもしれません.
package com.bit.day06;
public class Ex02 {
public static void main(String[] args) {
int[] arr1=new int[]{1,3,5,7}; //배열 객체 생성
int[] arr2=new int[]{1,3,5,7}; //다른 배열 객체 생성
int[] arr3={1,3,5,7}; //또 하나의 배열 객체 생성
int[] arr4=arr1; //배열의 얕은 복사
arr1[0]=2;
System.out.println(arr1==arr2); //참조변수형이기 때문에 false
System.out.println(arr1==arr3); //똑같이 false
System.out.println(arr1==arr4); //true 출력
for(int i=0; i<arr4.length; i++){
System.out.println(arr4[i]); //동일 객체이기 때문에 2,3,5,7 출력
}
}
}
配列オブジェクトfuncメソッドは転送配列されている.
package com.bit.day06;
public class Ex03 {
public static void func(int[] arr2){
for(int i=0; i<arr2.length; i++){
arr2[i]+=1;
}
}
public static void main(String[] args) {
int[] arr1={2,4,6,8};
System.out.println("before...");
for(int i=0; i<arr1.length; i++){
System.out.print(arr1[i]+" "); //2 4 6 8 출력
}
System.out.println();
func(arr1); //스택에 메인 위에 func 메소드 쌓임, 배열을 전달 = 복사. 메인에서 선언한 arr1은 지역변수.
// 여기서 얕은 복사가 일어남
System.out.println("after...");
for(int i=0; i<arr1.length; i++){
System.out.print(arr1[i]+" ");
}
System.out.println(); //3 5 7 9 출력
}
}
package com.bit.day06;
public class Ex04 { //깊은 복사
public static void main(String[] args) {
int[] arr1={1,3,5,7};
int[] arr2;
arr2=new int[4];
for(int i=0; i<arr1.length; i++){
arr2[i]=arr1[i];
}
arr1[0]=1234; //arr2의 원소는 바뀌지 않는다.
for(int i=0; i<arr2.length; i++){
System.out.print(arr2[i]+" ");
}
}
}
package com.bit.day06;
public class Ex05 {
public static void main(String[] args){
int[] arr1={2,4,6,8,10};
int[] arr2=new int[5];
// 깊은복사기능을 제공 arraycopy메소드
// arraycopy(원본,원본시작 index, 복사될 결과물, 결과물 시작 index, 시작시점으로부터 몇개)
System.arraycopy(arr1, 0, arr2, 0, 5); //인자를 전달하는 것은 얕은복사.
for(int i=0; i<arr2.length; i++){
System.out.println(arr2[i]+" ");
}
}
}
arraycompyメソッドを使用して、package com.bit.day06;
public class Ex05 {
public static void main(String[] args){
int[] arr1={11,22,33,44};
int[] arr2={1,2,3,4,5,6,7,8,9};
System.arraycopy(arr1, 0, arr2, 2, 4); //기능 : 깊은 복사를 수행한다.
for(int i=0; i<arr2.length; i++){
System.out.print(arr2[i]+" ");
}
}
}
package com.bit.day06;
public class Ex06 {
public static void main(String[] args){
int[] arr1={1,3,5,7,9};
int[] arr2;
arr2=java.util.Arrays.copyOf(arr1, 5); //Arrays는 클래스. java.util이라는 패키지 안에 있는 것이다.
for(int i=0; i<arr2.length; i++){
System.out.println(arr2[i]+" ");
}
}
}
package com.bit.day06;
import javax.tools.JavaCompiler;
public class Ex06 {
public static void main(String[] args){
int[] arr1={1,3,5,7,9};
int[] arr2;
arr2=java.util.Arrays.copyOf(arr1, 5);
/* for(int i=0; i<arr2.length; i++){
System.out.println(arr2[i]+" ");
}
*/
//반복문을 돌리지 않아도 볼 수 있음.
System.out.println(java.util.Arrays.toString(arr2)); //[1,3,4,7,9] 출력
}
}
package com.bit.day06;
import javax.tools.JavaCompiler;
public class Ex06 {
public static void main(String[] args){
int[] arr1={1,3,5,7,9};
int[] arr2;
int[] arr3={11,22,33,44,55,66,77,88,99};
arr2=java.util.Arrays.copyOf(arr1, 5);
arr3=java.util.Arrays.copyOfRange(arr1, 1, 4); // 3,5,7 출력
System.out.println(java.util.Arrays.toString(arr3));
}
}
同じパッケージ:クラス名は
package com.bit.day06;
public class Ex07 {
public static void func(int[] arr1){
System.out.println("call Ex07 func()...");
}
public static void main(String[] args) {
int[] arr={};
Ex07.func(arr); //숨겨져있는 클래스명
}
}
他のパッケージのクラス関数を使用する場合package com.bit.day06.pm;
public class Ex01 {
public static void func(int[] arr){
System.out.println("call Ex01 func()...");
}
public static void main(String[] args) {
int[] arr={};
com.bit.day06.Ex07.func(arr); //다른 패키지의 클래스
}
}
String、Systemなどのクラスにもパッケージが存在する.java.langパッケージ-パッケージ名の詳細は説明しません(省略可能)
複数のアレイ
:配列
package com.bit.day07;
public class Ex01 {
public static void main(String[] args) {
int[] su1=new int[]{1,2,3};
int[] su2=new int[]{4,5,6};
int[] su3=new int[]{7,8,9};
//다중배열
//자료형[][] 변수명 = new 자료형[size][value의 size];
int[][] su4=new int[4][3];
su4[0]=su1;
su4[1]=su2;
su4[2]=su3;
su4[3]=new int[]{10,11,12};
for(int i=0; i<su4.length; i++){ //su4는 4개의 배열을 담고있다. => su4.length=4
int[] temp=su4[i];
for(int j=0; j<temp.length; j++){ //temp.length = value의 size
System.out.print(temp[j]+"\t");
}
System.out.println();
}
}
}
for(int i=0; i<su4.length; i++){
for(int j=0; j<su4[i].length; j++){
System.out.print(su4[i][j]+"\t");
}
System.out.println();
}
public class Ex02 {
public static void main(String[] args) {
int[][] arr1=new int[][]{
new int[]{1,2,3},
new int[]{4,5,6},
new int[]{7,8,9}
};
int[][] arr2={{1,2,3},{4,5,6},{7,8,9}};
//이상하게 출력됨. 제일 바깥쪽만 풀어서 보여준 것이다. for문이라면 바깥쪽 for문만 출력해준 것과 같다.
System.out.println(java.util.Arrays.toString(arr1));
}
}
出力が正しいことを確認するには、int[][] arr2={{1,2,3},{4,5,6},{7,8,9}};
for(int i=0; i<arr2.length; i++){
System.out.println(java.util.Arrays.toString(arr2[i]));
}
}
配列=参照変数=オブジェクトへのアドレス値=>初期化=>値を指定しない場合はデフォルトnullに初期化
複数配列-配列されたアドレスがあります.配列が作成されていない場合は、オブジェクトが存在しないため、アドレス値はnullです.そこにどんな数字を書いた瞬間も、その住所を指すからです.(0でも)
element size=オブジェクトが作成されていません-->指向性のないアドレス=null
複数のアレイの特性
public class Ex04 {
public static void main(String[] args) {
int[][] arr1=new int[3][2]; //만들어놓고 밑에서 치환해버리니까 필요없는 객체가 생긴다--> [3][] 로 바꿀 수 있다.--> null값으로 바뀌는 것
//그러나 arr1[1]을 없애고 싶을 경우,[3][]이면 null오류가 뜨기 때문에 일단 default값 0을 주는 것이 좋다 -->[3][2]형태.
//즉, 밑에서 값을 줘버릴 경우엔 없는 것이 효율적. 선언을 해놓고 특정 부분만 바꿔서 출력하고 싶다면 있는 것이 문제 없다.
arr1[0]=new int[]{1,2};
arr1[1]=new int[]{6,7,8,9}; // int 배열만 들어가면 되니까 배열의 사이즈가 2라는 보장이 없다.
arr1[2]=new int[]{1,2,3};
for(int i=0; i<arr1.length; i++){
int[] temp=arr1[i];
for(int j=0; j<temp.length; j++){
System.out.print(temp[j]+"\t");
}
System.out.println();
}
}
}
Reference
この問題について(整列), 我々は、より多くの情報をここで見つけました https://velog.io/@jinkyung/배열テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol