리스트(List)
리스트는 배열과 비슷한 자바의 자료형으로 배열보다 편리한 기능을 많이 가지고 있다.
리스트와 배열의 가장 큰 차이는 배열은 크기가 정해져 있지만 리스트는 크기가 정해져 있지 않고 dynamic하다.
예를 들어 배열의 크기를 10개로 정했다면 10개 이상의 값을 담을 수 없다.
하지만 리스트는 크기가 정해져 있지 않아 원하는 만큼의 값을 담을 수 있다.
이렇게 동적으로 자료형의 갯수가 변하는 상황이라면 List를 사용해야 한다.
ArrayList
List 자료형 중 가장 간단한 형태의 자료형인 ArrayList 이다.
- add :
ArrayList 객체에 add라는 메서드를 이용하여 variable 을 삽입한다.
원하는 인덱스에 삽입을 원할 시 첫번째 argument에 삽입할 위치에 대한 인덱스 숫자를 넘겨준다. - get :
ArrayList 객체 내의 특정 인덱스를 추출할 때 사용한다. - size :
size 메서드는 ArrayList 객체 내의 저장된 variable 갯수를 return 한다. - contains :
contains 메서드는 ArrayList 객체 내에 해당 항목이 있는지 구분하여 boolean 으로 return 한다.(true, false) - remove :
remove 메서드에는 2가지 방식이 있다. (이름은 같지만 parameter 값이 다르다. / like a method overloading
- remove(객체)
: ArrayList에서 객체에 해당되는 항목을 삭제하고 삭제한 결과를 boolean 으로 return 한다. - remove(인덱스)
: 해당 인덱스의 항목을 삭제하고 삭제된 항목을 return 한다. (like a pop in stack)
- remove(객체)
import java.util.ArrayList;
public class TestClass{
public static void main(String[] args) {
/* add */
ArrayList pitches = new ArrayList();
pitches.add("138");
pitches.add("129");
pitches.add("142");
/* get */
System.out.println(pitches.get(1));
/* size */
System.out.println(pitches.size());
/* contains */
System.out.println(pitches.contains("142"));
/* remove */
// 1. remove(object)
System.out.println(pitches.remove("129")); // true
// 2. remove(index)
System.out.println(pitches.remove(0)); // 138
}
}
제네릭스 (Generics)
제네릭스(Generics)는 자바 J2SE 5.0 이후에 도입된 개념이다.
ArrayList<String> pitches = new ArrayList<String>();
보통 뒷 부분의 자료형은 굳이 적지 않아도 의미가 명확하기 때문에 다음의 표기법을 권장한다.
ArrayList<String> pitches = new ArrayList<>();
* 만약 앞 뒤에 모두 Data type이 입력되어 있을 경우 인텔리제이와 같은 IDE에서는 경고메시지를 출력한다.
형 변환 과정에서 잘못된 형변환으로 인한 오류가 발생할 가능성이 있기 때문에 제네릭스를 사용한다.
제네릭스로 자료형을 선언하기만 하면 그 이후로는 자료형에 대한 형 변환 과정이 필요 없다.
이미 컴파일러가 pitches에는 반드시 String 자료형만 추가 되어야 함을 알기 때문이다.
이렇게 제네릭스를 이용하면 형 변환에 의한 불필요한 코딩과 잘못된 형변환에 의한 runtime 오류를 방지할 수 있다.
public static void main(String[] args) {
// ArrayList pitcches = new ArrayList(); // Generics 미사용
ArrayList<String> pitches = new ArrayList<>(3); // Generics 사용
pitches.add("138");
pitches.add("129");
// String one = (String) pitches.get(0); // Generice 미사용시 형변환 필요
String one = pitches.get(0);
// String two = (String) pitches.get(1); // Generice 미사용시 형변환 필요
String two = pitches.get(1);
}
** 다양한 방법으로 ArrayList 생성하기
import java.util.ArrayList;
import java.util.Arrays; // 기존 문자열 배열이 존재할 경우 사용
public class TestClass{
public static void main(String[] args) {
String[] data = {"138", "129", "142"}; // data 문자열 배열이 존재
ArrayList<String> pitches = new ArrayList<>(Arrays.asList(data));
// ArrayList<String> pitches = new ArrayList<>(Arrays.asList("138", "129", "142")); 직접 상수 입력 가능
System.out.println(pitches); // [138, 129, 142]
}
}
String.join
앞에서 "138", "129", "142" 의 요소로 이루어진 ArrayList에 대해 각 요소를 ( , ) 로 구분하여 하나의 문자열로 만들기
import java.util.ArrayList;
import java.util.Arrays; // 기존 문자열 배열이 존재할 경우 사용
public class TestClass{
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
}
}
다음과 같이 반복문을 활용하여 루프를 돌며 콤마를 더한 뒤 마지막 콤마까지 제거하는 방법은 까다롭다.
하지만 String.join 을 사용하면 다음처럼 매우 간단하게 처리할 수 있다.
import java.util.ArrayList;
import java.util.Arrays; // 기존 문자열 배열이 존재할 경우 사용
public class TestClass{
public static void main(String[] args) {
ArrayList<String> pitches = new ArrayList<>(Arrays.asList("138", "129", "142"));
String result = String.join(",", pitches); // String.join 추가
System.out.println(result); // 138, 129, 142
}
}
리스트 정렬(Sort)
sort 메서드에서는 정렬기준을 parameter로 전달해야 한다.
- Ascending - Comparator.naturalOrder()
- Descending - Comparator.reverseOrder()
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator; // Sort
public class TestClass{
public static void main(String[] args) {
ArrayList<String> pitches = new ArrayList<>(Arrays.asList("138", "129", "142"));
pitches.sort(Comparator.naturalOrder());
// pitches.sort(Comparator.reverseOrder());
System.out.println(pitches); // 129, 138, 142
}
}
'Language > Java' 카테고리의 다른 글
Java - Set (0) | 2023.03.25 |
---|---|
Java - Map (0) | 2023.03.25 |
Java - Array (0) | 2023.03.25 |
Java 자료형 - StringBuffer (0) | 2023.03.25 |
Java 자료형 - number, boolean, char, String (0) | 2023.03.24 |