14_컬렉션(Collection - List의 메소드)
E --> Element : 제네릭 (E == Object) == 다형성에 의해서 모든 자식 들어갈 수 있음
1. add(E e) : 해당 리스트의 끝에 전달된 e 를 추가시켜 주는 메소드
[ 표현법 ] 객체명.메소드명();
package com.kh.chap01.list.part01.arrayList.run;
import java.util.ArrayList;
import java.util.List;
import com.kh.chap01.list.part01.arrayList.model.vo.Music;
public class ListRun {
public static void main(String[] args) {
// 기존의 배열을 쓸 경우 => 배열을 쓸 준비 (배열 선언 후 할당)
// 컬렉션을 쓸 경우 => 컬렉션을 쓸 준비 (컬렉션 객체 생성)
// ArrayList 클래스의 객체 생성
// ArrayList list = new ArrayList(); // 기본 생성자로 생성할 경우 내부적으로 크기 10짜리인 배열이 만들어짐
ArrayList list = new ArrayList(3); // 매개변수생성자로 생성할 경우 내부적으로 크기 3짜리인 배열이 만들어짐
System.out.println(list); // [] : 안에 아무것도 없는 상태 (비어 있다)
list.add(new Music("넥스트레벨", "에스파")); // arr[0] = new Music("넥스트레벨", "에스파"); 와 같은 꼴
list.add(new Music("필마이리듬", "레드벨벳")); // arr[1] = new Music("필마이리듬", "레드벨벳"); 와 같은 꼴
list.add(new Music("톰보이", "아이들")); // arr[2] = new Music("톰보이", "아이들"); 와 같은 꼴
list.add("끝"); // arr[3] = "끝"; 과 같은 꼴 => 배열에서는 불가능했던 일!
System.out.println(list);
// 순서가 유지되면서 값 추가 (각 index에 들어 있는 꼴)
// 크기에 제약이 없음
// 다양한 타입의 값을 추가 가능
}
// 출력물
[Music [title=넥스트레벨, artist=에스파], Music [title=필마이리듬, artist=레드벨벳], Music [title=톰보이, artist=아이들], 끝]
2. add(int index, E e) : 리스트에 전달되는 index 자리에 전달되는 e를 추가시켜 주는 메소드
해당 인덱스 다음 값들을 알아서 뒤로 한 칸씩 밀어 주는 역할 또한 알아서 해 줌
list.add(1, new Music("던던댄스", "오마이걸"));
System.out.println(list);
// 출력물
[Music [title=넥스트레벨, artist=에스파], Music [title=던던댄스, artist=오마이걸], Music [title=필마이리듬, artist=레드벨벳], Music [title=톰보이, artist=아이들], 끝]
3. set(int index, E e) : 리스트에 해당 index의 값을 전달되는 e로 변경시켜 주는 메소드
list.set(0, new Music("사계", "태연")); // arr[0] = new Music("사계", "태연"); 와 같은 꼴
System.out.println(list);
// 출력물
Music [title=사계, artist=태연], Music [title=던던댄스, artist=오마이걸], Music [title=필마이리듬, artist=레드벨벳], Music [title=톰보이, artist=아이들], 끝]
4. remove(int index) : 리스트에 해당 index 자리의 값을 삭제시켜 주는 메소드
삭제 후 기존의 값들을 앞으로 한 칸씩 당겨 주는 역할도 같이 해 줌
list.remove(1);
System.out.println(list);
// 출력물
[Music [title=사계, artist=태연], Music [title=필마이리듬, artist=레드벨벳], Music [title=톰보이, artist=아이들], 끝]
5. size() : 리스트에 담겨 있는 데이터의 수를 반환하는 메소드
System.out.println("list에 담긴 데이터 수 : " + list.size());
System.out.println("list의 마지막 인덱스 : " + (list.size() - 1));
// 출력물
list에 담긴 데이터 수 : 4
list의 마지막 인덱스 : 3
6. get(int index) : E => 리스트에 해당 index 위치의 데이터를 반환해 주는 메소드
// Object obj = list.get(0);
// Music m = (Music)list.get(0); // 다형성에 의한 DownCasting
// System.out.println(m);
System.out.println(list.get(0)); // 오버라이딩 시 형변환 굳이 필요 없음
System.out.println(((Music)(list.get(0))).getTitle());
System.out.println("=====================================");
// 0번 ~ 마지막 인덱스까지의 데이터를 출력
// for문
for(int i=0; i<list.size(); i++)
System.out.println(list.get(i));
System.out.println("=====================================");
// 향상된 for문 : for each문 => 배열뿐만 아니라 컬렉션에도 활용 가능!
// for(값을받아줄변수선언문 : 배열명또는컬렉션명)
for(Object o : list)
System.out.println(o);
System.out.println("=====================================");
// 출력물
Music [title=사계, artist=태연]
사계
=====================================
Music [title=사계, artist=태연]
Music [title=필마이리듬, artist=레드벨벳]
Music [title=톰보이, artist=아이들]
끝
=====================================
Music [title=사계, artist=태연]
Music [title=필마이리듬, artist=레드벨벳]
Music [title=톰보이, artist=아이들]
끝
7. subList(int beginIndex, int endIndex) : 해당 리스트에 beginIndex 자리에서부터 endIndex - 1 자리까지의 값을
새로운 리스트로 부분적으로 뽑아서 반환 (List 타입 반환)
List sub = list.subList(0, 2); // 0 <= 추출할인덱스범위 < 2
// => List<Object>
System.out.println(sub);
System.out.println("=====================================");
// 출력물
[Music [title=사계, artist=태연], Music [title=필마이리듬, artist=레드벨벳]]
=====================================
8. addAll(Collection c) : 해당 리스트에 다른 컬렉션에 있는 데이터들을 통째로 추가시켜 주는 메소드
list.addAll(sub);
System.out.println(list);
System.out.println("=====================================");
// 출력물
[Music [title=사계, artist=태연], Music [title=필마이리듬, artist=레드벨벳], Music [title=톰보이, artist=아이들], 끝, Music [title=사계, artist=태연], Music [title=필마이리듬, artist=레드벨벳]]
=====================================
9. isEmpty() : 해당 리스트가 비어 있으면(size() == 0) true, 비어 있지 않다면 (size() != 0) false 를 반환해 주는 메소드
System.out.println("해당 리스트가 비어 있습니까? : " + list.isEmpty());
// 출력물
해당 리스트가 비어 있습니까?: false
10. clear() : 해당 리스트를 싹 비워 주는 메소드
list.clear();
System.out.println(list);
System.out.println("해당 리스트가 비어 있습니까? : " + list.isEmpty());
// 출력물
[]
해당 리스트가 비어 있습니까? : true
* 제네릭 (Generic)
<> 안에 어떤 타입을 선언해 주어 해당 컬렉션이 사용할 객체의 타입을 고정시켜 주는 개념
내가 다룰 객체의 타입을 미리 명시하여 내가 사용하고 싶은 데이터 타입만 사용할 수 있게 해 주는 효과
=> 마치 배열처럼 같은 자료형의 값들만 담겠다.
별도의 제네릭 제시 없이 컬렉션 객체를 생성하면 (E == Object)
ArrayList list = new ArrayList();
내부적으로
ArrayList<Object> list = new ArrayList<>();
=> 그래서 아무 자료형이나 다 받아쳐 줄 수 있었던 것!
별도의 제네릭 제시를 해서 컬렉션 객체를 생성하면 (E == Music)
ArrayList<Music> list = new ArrayList<>();
* 제네릭을 설정하는 이유
1. 명시한 타입의 객체만 저장 가능하도록 타입의 제한을 두기 위해
2. 컬렉션에 저장된 객체를 꺼내서 사용할 때 매번 형변환 하는 절차를 없애기 위해
* 제네릭 설정 시 주의할 점
컬렉션에는 객체 타입만 들어갈 수 있기 때문에 기본 자료형으로 설정은 불가!!
예) ArrayList<int> list = new ArrayList<>(); // 불가
ArrayList<Integer> list = new ArrayList<>(); // 가능 => E == Integer
[ 표현법 ]
컬렉션명<자료형> 객체명 = new 컬렉션명<>();
=> new 구문에 있는 제네릭 설정 부분에는 자료형 생략 가능 (JDK 8버전부터 가능한 문법)
package com.kh.chap01.list.part01.arrayList.run;
import java.util.ArrayList;
import java.util.List;
import com.kh.chap01.list.part01.arrayList.model.vo.Music;
public class GenericListRun {
public static void main(String[] args) {
ArrayList<Music> list = new ArrayList<>(3);
System.out.println(list); // 비어 있는 상태
}
}
// 출력물
[]
E --> Element : 제네릭 (E == Music)
1. add(E e)
순서가 유지되면서 값 추가 (각 index 에 들어 있는 꼴)
크기에 제약 없음
다양한 타입의 값을 넣을 수 없음 => 제네릭 설정을 했기 때문
list.add(new Music("넥스트레벨", "에스파"));
list.add(new Music("필마이리듬", "레드벨벳"));
// list.add("끝"); => Music의 객체가 아니므로 add 불가함
System.out.println(list);
}
// 출력물
[Music [title=넥스트레벨, artist=에스파], Music [title=필마이리듬, artist=레드벨벳]]
2. add(int index, E e)
// list.add(1, "끝"); => Music 타입의 객체가 아니기 때문에 안 됨
list.add(1, new Music("던던댄스", "오마이걸"));
System.out.println(list);
// 출력물
Music [title=넥스트레벨, artist=에스파], Music [title=던던댄스, artist=오마이걸], Music [title=필마이리듬, artist=레드벨벳]]
3. set(int index, E e)
// list.set(0, "사계");
list.set(0, new Music("사계", "태연"));
System.out.println(list);
// 출력물
[Music [title=사계, artist=태연], Music [title=던던댄스, artist=오마이걸], Music [title=필마이리듬, artist=레드벨벳]]
4. remove(int index)
list.remove(1);
System.out.println(list);
// 출력물
[Music [title=사계, artist=태연], Music [title=필마이리듬, artist=레드벨벳]]
5. size()
System.out.println("리스트에 담긴 데이터 수 : " + list.size());
System.out.println("리스트의 마지막 인덱스 : " + (list.size() - 1));
// 출력물
리스트에 담긴 데이터 수 : 2
리스트의 마지막 인덱스 : 1
6. get(int index) : Music 타입 반환
제네릭이 아닐 때는 다형성에 의한 DownCasting으로 인해 강제 형변환 해 줘야 했지만,
Object obj = list.get(0);
Music m = (Music)list.get(0);
제네릭 설정 후에는 다형성에 의한 UpCasting으로 인해 자동 형변환되어 굳이 형변환 할 필요 없음
Object obj = list.get(0);
Music m = list.get(0);
// Object obj = list.get(0); // 다형성에 의해서 UpCasting
Music m = list.get(0);
System.out.println(m);
System.out.println(list.get(0));
System.out.println(list.get(0).getTitle());
System.out.println("=====================================");
// 0번 ~ 마지막 인덱스까지의 데이터를 출력
// for문
for(int i=0; i<list.size(); i++)
System.out.println(list.get(i));
System.out.println("=====================================");
// 향상된 for문
// for(값을받아줄선언문 : 배열명또는컬렉션명)
for(Music music : list)
System.out.println(music);
System.out.println("=====================================");
// 출력물
Music [title=사계, artist=태연]
Music [title=사계, artist=태연]
사계
=====================================
Music [title=사계, artist=태연]
Music [title=필마이리듬, artist=레드벨벳]
=====================================
Music [title=사계, artist=태연]
Music [title=필마이리듬, artist=레드벨벳]
=====================================
7. subList(int beginIndex, int endIndex)
List<Music> sub = list.subList(0, 1);
System.out.println(sub);
System.out.println("=====================================");
// 출력물
[Music [title=사계, artist=태연]]
=====================================
8. addAll(Collection c)
list.addAll(sub);
System.out.println(list);
System.out.println("=====================================");
// 출력물
[Music [title=사계, artist=태연], Music [title=필마이리듬, artist=레드벨벳], Music [title=사계, artist=태연]]
=====================================
9. isEmpty()
System.out.println("해당 리스트가 비어 있습니까? : " + list.isEmpty());
// 출력물
해당 리스트가 비어 있습니까? : false
10. clear()
list.clear();
System.out.println(list);
System.out.println("해당 리스트가 비어 있습니까? : " + list.isEmpty());
// 출력물
[]
해당 리스트가 비어 있습니까? : true