java 배우기/TIL

24.06.20 내일배움캠프_Java 6기 TIL

checkuu 2024. 6. 20. 17:39

오늘 한일

  • 알고리즘 1문제
  • SQL 2문제
  • 데일리 리스트를 위한 자료 공부

 

배열

집합을 숫자나 문자열만으로 표현하기는 쉽지않은데 이럴때 배열 (array)를 사용한다.

배열은 자료형 바로옆에 [ ] 기호를 붙인다.

int[] odds = {1, 3, 5, 7, 9};

String[] weeks = {"월", "화", "수", "목", "금", "토", "일"};

 

배열의 길이 설정하기

배열의 길이를 먼저 설정한 뒤 배열변수를 생성하고 그값을 나중에 대입하는 방법이 있다.

String[] weeks = new String[7];
weeks[0] = "월"; 
weeks[1] = "화";
weeks[2] = "수"; 
weeks[3] = "목";
weeks[4] = "금"; 
weeks[5] = "토"; 
weeks[6] = "일";

단, 초깃값 없이 배열 변수를 만들 때에는 7과같은 숫잣값을 넣어 길이를 정해 줘야한다.

그렇지 않으면 오류가 발생한다.

 

배열값에 접근하기

목요일에 해당하는 값을 얻으려면 인덱스를 이용한다

String[] weeks = {"월", "화", "수", "목", "금", "토", "일"}; 
System.out.println(weeks[3]);

목

 

배열의 길이 구하기

배열은 보통 for문과 함께 사용한다.

for 문에 배열을 사용할 때에는 배열의 길이를 알아야 한다.

왜냐하면 배열의 길이만큼 for 문을 반복하기 때문이다. 이때, 배열 길이는 length를 사용하면 된다.

String[] weeks = {"월", "화", "수", "목", "금", "토", "일"}; 
for (int i = 0; i < weeks.length; i++) { 
System.out.println(weeks[i]); 
}

월
화
수
목
금
토
일

 

리스트

리스트와 배열의 가장 큰 차이점은, 배열은 크기가 정해져 있지만 리스트는 변한다는 데 있다.

프로그래밍을 할 때에는 저장할 값의 크기를 알 수 있는 경우도 있지만 명확하지 않을 때도 있다.

그러므로 자료형의 개수가 계속 변하는 상황이라면 리스트를 사용해야 한다.

 

Arraylist

 

add

ArrayListdml add 메서드를 사용하면 요솟값을 추가 할 수 있다.

야구선수가 공을 총 3번 던졌는데 각각 시속 138,129,142 였다면 다음과 같이 코드를 작성 할 수 있다.

import java.util.ArrayList;

public class Sample { 
public static void main(String[] args) {
ArrayList pitches = new ArrayList();
pitches.add("138"); 
pitches.add("129"); 
pitches.add("142"); 
} 
}

ArrayList를 사용하려면 import java.util.ArrayList와 같은 import 문을 작성해야 한다.

이때, import 문은 다른 패키지나 클래스를 현재 코드에서 사용하기 위해 선언하는 문장이다.

그리고 Java.util 패키지는 자바가 기본적으로 제공하는 패키지이다.

 

add 메서드를 이용해 투구 속도를 저장 후 첫번째 위치에 133이라는 투구속도를 추가하고싶다면

다음과 같이 삽입할 위치를 파라미터로 넘겨 주어야한다.

pitches.add(0, "133"); // 첫번째 위치에 133 삽입.

 

get

ArrayList의 get 메서드를 사용하면 특정 인덱스의 값을 추출할 수 있다.

앞의 예제에서 야구선수의 두 번째 투구 속도를 출력하고 싶다면 다음과 같이 코드를 작성해야 한다.

import java.util.ArrayList;

public class Sample { 
public static void main(String[] args) {
ArrayList pitches = new ArrayList(); 
pitches.add("138");
pitches.add("129"); 
pitches.add("142"); 
System.out.println(pitches.get(1)); 
} 
}
129

 

size

size 메소드는 ArrayList의 요소의 개수를 리턴한다. 다음 코드를 실행하면 pitches에 담긴 요소의 개수가 출력된다.

(... 생략 ...) System.out.println(pitches.size());

(... 생략 ...) 
System.out.println(pitches.size());
3

 

contains

contains 메서드는 리스트 안에 해당 항목이 있는지 판별해 그 결과를 boolean으로 리턴한다.

pitches 객체는 142를 포함하고 있으므로 true가 출력된다.

(... 생략 ...) 
System.out.println(pitches.contains("142"));
true

 

remove

remove 메서드에는 2가지 방식이 있다.

  • remove(객체)
  • remove(인덱스)

remove(객체)를 사용하면 리스트에서 객체에 해당하는 항목을 삭제한뒤 그결과로 true 또는false를 리턴한다.

(... 생략 ...) 
System.out.println(pitches.remove("129")); // 129를 리스트에서 삭제하고, true를 리턴한다.

두 번째 방식인 remove(인덱스)를 사용하면 인덱스에 해당하는 항목을 삭제한 뒤, 그 항목을 리턴한다.

(... 생략 ...) 
System.out.println(pitches.remove(0)); // pitches의 첫 번째 항목이 138이므로, 138을 삭제한 뒤 138을 리턴한다.

 

다양한 방법으로 ArrayList 만들기

import java.util.ArrayList;

public class Sample {
public static void main(String[] args) {
ArrayList<String> pitches = new ArrayList<>(); // 제네릭스를 사용한 표현 
pitches.add("138"); 
pitches.add("129"); 
pitches.add("142"); 
System.out.println(pitches); // [138, 129, 142] 출력 } }


[138, 129, 142]

이미 문자열 배열이 있다면 ArrayList를 좀더 편하게 생성할 수 있다.

import java.util.ArrayList; 
import java.util.Arrays;

public class Sample { 
public static void main(String[] args) { 
String[] data = {"138", "129", "142"}; // 이미 투구수 데이터 배열이 있다. 
ArrayList<String> pitches = new ArrayList<>(Arrays.asList(data)); 
System.out.println(pitches); // [138, 129, 142] 출력 } }


[138, 129, 142]

이처럼 java.util.Arrays 클래스의 asList 메서드를 사용하면 이미 존재하는 문자열 배열로 ArrayList를 만들 수 있다.

또는 String 배열 대신 String 자료형을 여러 개 전달하여 생성할 수도 있다.

import java.util.ArrayList; 
import java.util.Arrays;

public class Sample { 
public static void main(String[] args) { 
ArrayList<String> pitches = new ArrayList<>(Arrays.asList("138", "129", "142")); 
System.out.println(pitches); } }

 

String.join

앞에서 138,129,142 세요소로 이루어진 ArrayList를 만들었다.

각요소를 콤마(,)로 구분해서 1개의 문자열로 만드려면

import java.util.ArrayList; 
import java.util.Arrays;

public class Sample { 
public static void main(String[] args) {
ArrayList<String> pitches = new ArrayList<>(Arrays.asList("138", "129", "142")); 
String result = "";
for (int i = 0; i < pitches.size(); i++) { 
result += pitches.get(i); 
result += ","; // 콤마를 추가한다. } 
result = result.substring(0, result.length() - 1); // 마지막 콤마는 제거한다. 
System.out.println(result); // 138,129,142 출력 } }


138,129,142

for 문을 사용하여 요소 개수만큼 콤마를 더한뒤, 마지막 콤마를 제거하는 방법이다.

String.join을 사용하면 더간단하게 처리할 수 있다.

import java.util.ArrayList; 
import java.util.Arrays;

public class Sample {
public static void main(String[] args) { 
ArrayList<String> pitches = new ArrayList<>(Arrays.asList("138", "129", "142")); 
String result = String.join(",", pitches); 
System.out.println(result); // 138,129,142 출력 } }


138,129,142

String.join(”구분자” , 리스트 객체) 를 사용해 리스트의 각 요소에 구분자를 넣어 하나의 문자열로 만들 수 있다.

String.join은 문자열 배열에도 사용할 수 있다.

public class Sample { 
public static void main(String[] args) { 
String[] pitches = new String[]{"138", "129", "142"}; 
String result = String.join(",", pitches); 
System.out.println(result); // 138,129,142 출력 } }

 

리스트 정렬하기

138,129,142 세요소로 이루어진 ArrayList를 순서대로 정렬해보자

순서대로 정렬하기 위해서는 리스트의 sort 메서드를 사용한다

import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.Comparator;

public class Sample { 
public static void main(String[] args) { 
ArrayList<String> pitches = new ArrayList<>(Arrays.asList("138", "129", "142")); 
pitches.sort(Comparator.naturalOrder()); // 오름차순으로 정렬 
System.out.println(pitches); // [129, 138, 142] 출력 } }

sort 메서드에서는 정렬기준을 파라미터로 전달해야한다. 정렬 기준에는 오름차순,내림차순이 있다.

오름차순 정렬 - Comparator.naturalOrder()

내림차순 정렬 - Comparator.reverseOrder()