Govern/Eclipse SE -설치,문장,배열

07-14(수) 배열, Arrays API

Mary's log 2021. 7. 14. 10:27

※ 개인적인 개발 수업 정리글입니다. 꾸준히 정리할 예정이고 틀린 부분이 있다면 언제든지 댓글 환영입니다.


5장. 배열

-같은 타입의 데이터가 여러개면, 여러개의 변수가 필요함. int 변수가 100개라든가..

-대량 데이터 관리는 보통 변수로 하기 어려워서, '배열'이랑 '컬렉션' 사용

-타입 자체는 뭐든 가능하지만(String,int..) , 같은 데이터 타입으로만? 배열 저장가능?

-하나의 배열명으로 여러 데이터 관리 가능

-객체도 배열로 관리 가능


1. 배열 선언

  데이터형 [ ] 배열명 ;      [ ]가 뒤로 가도 됨

 ex)   int   [ ]  num  ;       int타입의 num이라는 변수를 배열로 만들거다.

 

2. 배열 생성

    배열명 = new 데이터형[크기] ;  

ex )  numnew     int     [3]  ;    num에 새로운 int 배열방을 3개 넣어준다.

 

==>int값을 담을 수 있는 방이 3개 만들어짐. 아직 초기화 안해서 int의 초기값인 0으로 저장.
      방이름이 인덱스 0번부터 붙음. 0부터니까 마지막 인덱스 : 그 배열 크기-1
      배열num은 값들이 있는 방을 갖고 있는 "참조변수"인거임. 값을 직접 지닌게 아님!!!
에러메시지: ArrayIndexOutOfBoundsException =>인덱스 크기 넘어섰다는거임

 

3.  배열 초기화

ex)    num [0] = 1   배열num의 인덱스0번방에 int 1값으로 초기화함;


 

① new 키워드 사용  - 지정된 크기만큼 [배열선언&배열생성] 필수!! &배열초기화

② 리터럴 이용        - 지정된 값의 개수만큼 자동으로 배열크기 설정. [배열선언&생성&초기화] 한꺼번에

③ new 키워드와 리터럴 혼합 - 배열선언과 생성 코드를 분리하여 작업가능.

 

 

① new 키워드 사용

 

 


 for each문 

이미 선언&생성&초기화된 배열을 두고,

새로운 인덱스 변수 선언&초기화;

for each문으로 i에 배열"값" 부여해줌

 

-배열 안에 배열 넣기 =>           num2방의 값 = num방의 값

 

 


잠시, 책 95쪽으로 감 ■ 파라미터로 배열 전송

┌멤버변수┐

 

┌기본형 데이터 int, double 등등  Call by Value 

change1 함수에, num1의 값을 가져간다는거임.

 

 

┌참조형 데이터 String, 배열 등등  Call by reference  ┐

change2 함수에, num2의 주소를 가져간다는거임.

    근데 그냥 주소라서, 호출되는건! n[2]=90;으로 돌아온다는거임

ㄴmain함수에 있는게 먼저 출력이 되는게 맞고, 멤버변수의 함수내용을 ★호출★하는거라, 호출됐을때부터 함수에 해당되는게 전부 뜸

 

-배열의 인덱스 넣으면 값을 넣는거임  ==>머선 말이고..


 

 

책85쪽 예제

 

책87,88쪽 예제

 

② 리터럴 이용                       :    데이터형 [ ] 배열명 = { 값, 값2, 값3, ... }

③ new 키워드와 리터럴 혼합  :      [] 안에 크기지정NONONO!!!

 

< new키워드, ②리터럴,new키워드 리터럴혼합 = 다 합침 >
 마지막엔 foreach말고 기존에 for로 써서 출력하는것도, 까먹지 않게 다시 해보기


arrays라는 라이브러리가 지원되고 있음. arrays 임포트

필요한 java 유틸리티 한번에 임포트 시키기 : ctrl키 +shift키 + O

책232쪽

 Arrays API 

-[ '배열'의 정렬,최대값,최소값,배열복사,특정값으로 채우기,값출력 ]을 손쉽게 처리가능하게함.

메서드명 설명
Arrays.copyOf( 배열명, 배열.length ); 배열을 복사하여 반환
Arrays.fill( 배열명, 전부 넣을 값 ); 특정값으로 배열을 채움, start와 end 지정 가능
Arrays.equals( a, b ); 배열값이 동일한지 비교하여 boolean 으로 반환
Arrays.sort( 배열명 ); 배열을 정렬해서 반환, 기본은 오름차순이고 Comparator
인터페이스를 사용하여 사용자 클래스도 정렬가능.
Arrays.toString() for문 대신에 사용 가능한 배열 출력 방법
Arrays.binarySearch( 배열명, 값 ) 특정 배열 요소의 인덱스 반환
Arrays.asList( 값1,값2,값3 ... ); List list = Arrays.asList( 값1, 값2, 값3, ... );
//문자열 데이터를 지정해서, list에 저장

 


프로젝트 04Day  ArrayTest3

[기본형 데이터=xxx] xxx=10 정해진 데이터를 함수에 전달하는거라, 값의 복사 = Call by Value

[참조형 데이터=num] num은 주소값을 저장하는지라, 배열의 주소가 전달 =Call by Reference

 

 ArrayTest6 Arrays API - Arrays.sort(변수) ,    .binarySearch(변수, "찾을값")

 

 

ArrayTest6 Arrays API -  .fill( 변수, 전부넣을값 ) ,   .copyOf ( 변수, 길이)

 

 


System.arraycopy 

 

int [] source = { 1,2,3,4,5,6 };

int [] destination = { 10,9,8,7,6,5,4,3,2,1 };

 

System.arraycopy( source, 0,       destination, 0,            source.length );

            ①배열source[0]부터, ③destination[0]에 넣는다, ②source의 길이만큼


main(String [] args) 함수에서의 배열 사용

-자바 어플리케이션이 실행될때, JVM은 String배열을 만들어서 main함수의 파라미터에 전달가능.

 

//java ArrayTest 7 aa bb cc
//ArrayTest7.java파일 오른쪽 클릭->Run as->Run Configurations...
//ArrayTest7.java 클릭->Argument->ProgramAruments
//->aa bb cc dd->적용하고 닫기
//4개의 문자열을 받아서 출력하면 나옴

 

 


 

■ 이차원 배열  ArrayTest8.java

┌ 이차원배열-정방형

이 코드가 있으면 비정방향 배열이어도 알 수 있음

그니까 꼭 외워야함

 

 ArrayTest9.java

┌ 이차원배열-비정방형