리스트는 배열과 비슷한 자바의 자료형으로 배열보다 편리한 기능을 많이 가지고 있다.
List 자료형 중 가장 간단한 형태의 자료형인 ArrayList에 대해서 알아보면
import java.util.ArrayList;
public class Practice {
public static void main(String[] args) {
ArrayList pitches = new ArrayList();
pitches.add("138");
pitches.add("129");
pitches.add("142");
}
}
pitches.add(0,"133"); //첫번째 위치에 133 삽입;
pitches.add(1,"133");
ArrayList<String>pitches = new ArrayList<>():
처럼 객체를 포함하는 자료형도 어떤 객체를 포함하는지에 대해서 명확하게 표현할 것을 권고하고 있다.인텔리제이에서 위와 같이 코딩하면 명확한 타입을 명시하라는 warning이라고 표시될겁니다.
이 부분은 잠시 뒤에 자세하게 공부해보자.
박찬호 선수의 2번째 투구 스피드를 출력하고 싶다면 다음과 같이 한다.
System.out.println(pitches.get(1));
- ArrayList의 get 메서드를 이용하면 특정 인덱스의 값을 추출할 수 있다.
size메서드는 ArrayList의 개수를 리턴한다.
System.out.println(pitches.size());
contains메서드는 리스트 안에 해당 항목이 있는지를 판별하여 그 결과를 boolean으로 리턴한다.
System.out.println(ptiches.contains("142"); //true
remove 메서드에는 2가지 방식이 있다.(이름은 갖지만 입력파라미터가 다르다.)=오버로딩
1. remove(객체)
2. remove(인스턴스)
첫번째 remove(객체)의 경우는 리스트에서 객체에 해당되는 항목을 삭제하고 사제한 결과(true,false)를 리턴한다.
System.out.println(pitches.remove("129")); //true
두번째 remove(인스턴스) 의 경우에는 해당 인덱스의 항목을 상제하고 삭제된 항목을 리턴한다.
System.out.println(pitches.remove(0)):138
pitches의 첫번째 항목은 "138" 이므로 "138"이 삭제된 후 "138"를 리턴한다.
제네릭스(Generics) 자바 J2SE 5.0 이후에 도입된 개념이다.
여기서는 재네릭스를 사용하는 방법에 대해서만 다룬다.
ArrayList<String>pitches = new ArrayList<String>();
ArrayList<String> pitches = new ArrayList<>(); //선호하는 방식
ArrayList pitches = new ArrayList();
ArrayList<String>pitches = new ArrayList<String>();
이 두개 코드의 차이점은 ArrayList라는 자료형 타입 옆에 과 같은 문구가 있느냐 없느냐의 차이다.
위에서 사용한 첫번째 코드의 이라는 제네릭스 표현식은 "ArrayList 안에 담을 수 있는 자료형은 String 타입 뿐이다." 라는 것을 의미한다.
(여기서 제네릭스의 타입으로 String 자료형만을 예로 들었지만 , , 등 어떤 자료형도 사용할 수 있다.)
즉, 제네릭스를 이용하면 좀 더 명확한 타입체크가 가능해진다.이것은 코드를 작성할 때도 몇가지 이득을 준다.
우선 제네릭스를 사용하지 않은 경우를 생각해 보자.
import java.util.ArrayList;
public class Practice2 {
public static void main(String[] args) {
ArrayList pitches = new ArrayList();
pitches.add("138");
pitches.add("129");
String one = (String) pitches.get(0);
String two = (String) pitches.get(1);
}
}
import java.util.ArrayList;
//제네릭스를 썻을 때
public class Practice3 {
public static void main(String[] args) {
ArrayList<String> pitches = new ArrayList<>();
pitches.add("138");
pitches.add("129");
String one = pitches.get(0); // 형 변환이 필요없다.
String two = pitches.get(1); // 형 변환이 필요없다.
}
}
다음처럼 이미 데이터가 존재할 경우에는 보다 편하게 ArrayList를 생성할 수있다.
import java.util.ArrayList;
import java.util.Arrays;
//이미 대열베이터가 존재할 경우 쉽게 ArrayList 생성할수 있음.
public class Practice4 {
public static void main(String[] args) {
String[] data ={"138","129","142"}; //이미 투구수의 배열이 있다.
ArrayList<String> arrayList = new ArrayList<>(Arrays.asList(data));
System.out.println(arrayList);
System.out.println(arrayList.get(2));
}
}
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);
}
}
앞에서 "138", "129", "142" 의 요소로 이루어진 ArrayList를 만들어 보았다. 그렇다면 이렇게 만들어진 ArrayList의 각 요소를 콤마(",")로 구분하여 다음과 같은 하나의 문자열로 만들 수 있는 방법이 있을까?
import java.util.Arrays;
import java.util.ArrayList;
public class Practice5 {
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.substring(0, result.length() -1); // 마지막 콤마는 제거한다.
System.out.println(result); // 138,129,142 출력
}
}
위 예는 pitches를 갯수만큼 루프를 돌면서 뒤에 콤마를 더하고 최종적으로 마지막 콤마를 제거하는 방법이다. 위 예에서도 볼 수 있듯이 리스트의 각각의 요소 사이에 구분자를 끼워넣어 하나의 문자열로 만드는 것은 꽤 까다로운 일이다.
하지만 String.join을 사용하면 다음처럼 매우 간단하게 처리할 수 있다.
import java.util.ArrayList;
import java.util.Arrays;
public class Practice6 {
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"의 요소로 이루어진 ArrayList를 순서대로 정렬해 보자. 순서대로 정렬하기 위해서는 다음처럼 리스트의 sort 메소드를 사용해야 한다.
class Practice7 {
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()
sort 메서드로 정렬후에 pitches를 출력하면 오름차순으로 정렬되어 출력하는 것을 확인할 수 있다.