5/24일, [Java 문법 종합반] 2주차 : 배열, 켈렛션

2023. 5. 24. 21:46개발자 공부/Java

배열 

- 선언 : 한번에 많은 양의 데이터를 다루거나 계산할때 사용합니다.

 1) 타입 [ ] 변수;  -> ex) int [ ] intArray;

 2) 타입 변수 [ ]; -> ex) int intArray [ ];

- 생성 : 배열는 참조형 변수들처럼 new 명령을 통해서 생성하며, 대괄호 [ ] 안에 크기를 지정해 줍니다. '

            순번은 0부터 시작하기 때문에 8개 사이즈의 분류통이라면 0번~7번까지 있습니다.

            추가로, 배열은 생성될때 각 타입별 초기값으로 초기화 되어 채워집니다.

             (ex, int {0}, boolean {false}, String {null} 

- 순회 : 배열 안에 담겨있는 변수들을 하나씩 꺼내서 사용하는 것

 

- 초기화 

 

 - 복사 

얕은 복사 : 주소값만 복사되고 실제 값은 1개로 유지되는 걸 얕은복사라고 한다. 

깊은 복사 : for 문 또는 여러 메서드를 사용하여 실제 값을 가지고 있는 배열의 기본형 값을 꺼내서 복사한다. 

 

- String 배열

// 문자(char/1byte), 문자열 (string)
// String = char [ ]

// 기본형 변수 vs 촴ㅁ조형 변수
// 1. 기본형 변수는 '소문자로 시작함' 반면, 참조형은 '대문자로 시작함'
//   - Wrapper class에서 기본형 변수를 감싸줄 때 (boxing), int -> Integer
// 2. 기본형 변수는 값 자체를 저장, 참조형 변수는 별도의 값을 저장 후 그 주소를 저장함 (=주소형 변수)

// char < String (훨씬더!) -> String이 가지고 있는 기능이 너무 많아서
// Wrapper class와도 상당히 비슷! -> 기본형 변수가 기능이 제한 -> 다양한 기능을 제고하는 Wrapper를 감싸으로써, 추가 
   기능을 더함
//String 기능 활용 예시
String str = "ABCD";
// (1) lenght
int strlenght = str.length();
System.out.println(strlenght);
//(2) charAt (int index)
char strChar = str.charAt(1);
System.out.println(strChar);
// (3) substring (int formIdx, int toIdx)
String strsub = str.substring(0,3);
System.out.println(strsub);

// (4) equals(Sstring str) : 어떠한 String이 다른 String 과 같은지 물어볼때 사용
String newStr = "ABCD";
boolean strEqual = newStr.equals(str);
System.out.println(strEqual);

// (5) toCharArray() : String -> char[] 변환
char[] strCharArray = str.toCharArray();
System.out.println(strCharArray);

// (6) 반대로 char [] -> String -> char 변환
char[] charArray = {'A','b','c'};
String charArrayString = new String(charArray);
System.out.println(charArrayString);


}

}

● 다차원 배열

-선언 : 2차원 배열을 선언할때는 1차원 배열에 대괄호를 하나더 추가해주면 됩니다. 

           int [ ] [ ] array

           int  array [ ] [ ]

          int [ ] array [ ] 

- 초기화 

1) 중괄호를 사용해 선언과 동시에 최기화 합니다. 

   ex) int [ ] [ ] array = {

          {1,2,3},

          {4,5,6}

          }; 

2) 선언 / 생성 이후 반복문을 통해 초기화를 합니다.  

package week02.array;

public class arr06 {
public static void main(String[] args) {
// 반복문을 통한 초기화
int[ ][ ] array = new int[2][3]; // array라는 변수를 2차원 배열로 최초 선언

for (int i = 0; i < array.length; i++) { // [2] 번에 관해 반복
for (int j = 0; j < array[i].length; j++) { // [3] 번에 관해 반복
System.out.println("출력값 ==>" + i+ "," + j);
array [i][j] = 0; // i, j 는 위 노란색 네모박스 안에있는 숫자를 의미하며 인덱스 라고 부릅니다.
}
}
}
}

 

- 가변배열 : 행마다 다른 길이의 배열을 저장할 수 있는 배열을 가변 배열이라고 합니다. 

package week02.array;

public class arr07 {
public static void main(String[] args) {
// 가변배열
int[][] array = new int[3][]; // 값 생략으로 가변 배열 가능, 최초로 감싸는 큰 배열은 3, 안의 작은 배열은 길이가
                                             정해지지
X
// 배열 원소마다 각기 다른 크기로 지정
array[0] = new int[2];
array[1] = new int[4];
array[2] = new int[1];

// 중괄호로 초기화를 아예 해버릴 때도 가능함!!
int [][] array2 = {
{10,20},
{10,20,30,40},
{10}
};
}
package week02.array;

public class arr08 {
//최대값 구하기
public static void main(String[] args) {
int [] arr ={3,2,1,5,1};

// 최대값의 초기화 세팅
int max = arr [0];

// 최대값 구하기 로직
for (int num: arr) {
if (num > max){
max=num;}
}

System.out.println("최대값은 =>" + max);
}
}

컬렉션 (Collection)

 : 배열 보다 다수의 참조형 데이터를 더 쉽고 효과적으로 처리할 수 있는 기능을 많이 가지고 있습니다. 

- 컬렉션 기능 : 크기 자동조정 / 추가 / 수정 / 삭제 / 반복 / 순회 / 필터 포함확인 등...

- 종류 

 List : 순서가 있는 데이터의 집합 (데이터 중복 허용)

 Queue : 빨개 처럼 한쪽에서 데이터를 넣고 반대쪽에서 데이터를 뺄 수 있는 집합

               First in First out : 먼저 들어간 순서대로 값을 조회 할 수 있다.

 Set : 순서가 없는 데이터의 집합 (데이터 중복 허용 X) - 순서없고 중복없는 배열

 Map : 순서가 없는 (Key, Value) 쌍으로 이루어진 데이터의 집합 (key값 중복 허용 안함)

 

 

HW 2주차 숙제 

 

import java.util.*;

public class W2숙제 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String CollectionName = sc.next();
String title = sc.nextLine();

switch (CollectionName){
case "List":
ArrayList<String> strList = new ArrayList<>();
while(true) {
// 한줄씩 입력 받아서 strList에 저장하게끔!
String text = sc.nextLine();
if(Objects.equals(text,"")){
break;
}
strList.add(text);
}
title = "[ List로 저장된 "+ title+ " ]";
System.out.println(title);
// strlist를 한줄로 출력
for (int i=0; i<strList.size(); i++){
int number = i+1;
System.out.println(number+ "." + strList.get(i));
}
break;
case "Map":
Map<Integer,String> strMap = new HashMap<>();
int lineNumber = 1;
while(true) {
// 한줄씩 입력 받아서 strMap에 저장하게끔!
String text = sc.nextLine();
if(Objects.equals(text,"")){
break;
}
strMap.put(lineNumber++,text);
}
title = "[ Map으로 저장된 "+ title+ " ]";
System.out.println(title);
// strlist를 한줄로 출력
for (int i=0; i<strMap.size(); i++){
int number = i+1;
System.out.println(number+ "." + strMap.get(i+1));
}
break;
case "Set":
LinkedHashSet<String> strset = new LinkedHashSet<>();
while(true) {
// 한줄씩 입력 받아서 strMap에 저장하게끔!
String text = sc.nextLine();
if(Objects.equals(text,"")){
break;
}
strset.add(text);
}
title = "[ Set으로 저장된 "+ title+ " ]";
System.out.println(title);

Iterator iterator = strset.iterator(); // Set 가진 전부를 Iterator에게 줌

// strlist를 한줄로 출력
for (int i=0; i<strset.size(); i++){
int number = i+1;
System.out.println(number+ "." + iterator.next());
}
break;
default:
System.out.println("저장할 수 없는 자료구조입니다.");




}
}
}