1. 컬렉션이란 ?
   자료구조가 내장되어있는 자바 클래스로 자바에서 제공하는 "자료구조*를 담당하는 프레임워크*"이다.
    
  * >자료구조란 ?
    방대한 데이터들을 효율적, 구조적으로 관리(조회,정렬,추가,수정,삭제)하기위한 개념
    
 *  >프레임워크란 ?
  데이터나 기능들을 보다 쉽게 사용할 수 있도록 제공하는 틀 
   
 컬렉션이란  => 방대한 데이터들을 효율적으로 관리할 수 있는 기능들이 이미 내장되어있는 클래스!
   
  2. 배열과 컬렉션의 차이점 (배열의 단점 vs 컬렉션의 장점)
  > 배열 
  - 크기에 대한 제약이 많음(배열생성시 크기지정 필수 , 한번 지정된 크기 변경불가) 
  - 중간위치에 추가하거나 삭제하는 경우 값을 뒤로 또는 앞으로 땡겨주는 작업을 코드로 구현 
  - 한 타입의 데이터만 저장가능 
   
  > 컬렉션
  - 크기에 대한 제약이 없음 (크기지정 안해도됨, 알아서 크기 변경됨)
  - 중간위치에 추가하거나 삭제하는 경우 값을 땡겨주는 알고리즘을 구현할 필요 없음 
     이미 메소드로 제공하고 있기때문에 메소드 호출만으로 간단하게 처리 가능 
  - 여러타입의 데이터 저장가능
   
  3. 컬렉션 종류 
  인터페이스 분류 : Collection - List / Set 계열 
 ┌>List계열 :✔ArrayList✔, LinkedList, Vector
 | - 데이터(value)만 저장 가능 
 | - 순서유지하고 저장(index의 개념 있음) 
 | - 중복된 데이터 허용 
 | 
└>Set계열 :HashSet, TreeSet
  - 데이터(value)만 저장 가능 
   - 순서 유지되지 않음 
   - 중복된 데이터 허용 안됨
 ---------------------------------------------------------------
>Map계열 :HashMap,HashTable,TreeMap,Properties    
   - 키(key)와 데이터(value)를 함께 저장
   - 순서 유지되지 않음 
   - value는 중복될 수 있으나 key는 중복 허용안됨   

✅ List계열의 ArrayList
//ArrayList 이용 - 객체 생성과 동일하게 생성 

ArrayList list = new ArrayList(3);//크기지정 할수도 있고 안할수도있음

1. add (E e) : 리스트의 끝에 전달된 데이터를 추가시켜주는 메소드
E : Element - 리스트에 담길 데이터들(요소) 로 언제든지 변할 수 있는 자료형 

list.add(new Music("Good Bye","박효신"));
list.add(new Music("이 밤","양다일"));
list.add(new Music("잊혀지다","정키"));
list.add("끝");
//컬렉션장점1. 크기의 제약이 없음 
//컬렉션장점3. 여러타입 보관가능
System.out.println(list);

1출력결과 )
[Music [title=Good Bye, artist=박효신], Music [title=이 밤, artist=양다일], Music [title=잊혀지다, artist=정키], 끝]

2. add(int index, E e) : 해당인덱스 위체에 데이터를 추가시켜주는 메소드 

list.add(1,new Music("진심이 담긴 노래","케이시"));
//장점2. 중간위치에 데이터 추가시 복잡한 알고리즘 구현할 필요없음 
System.out.println(list);

2출력결과 )
[Music [title=Good Bye, artist=박효신], Music [title=진심이 담긴 노래, artist=케이시], Music [title=이 밤, artist=양다일], Music [title=잊혀지다, artist=정키], 끝]

3. remove(int index): 해당 인덱스위치의 데이터 삭제시켜주는 메소드 

list.remove(1);
System.out.println(list);

3출력결과)
[Music [title=Good Bye, artist=박효신], Music [title=이 밤, artist=양다일], Music [title=잊혀지다, artist=정키], 끝]

4. set(int index, E e): 해당 인덱스위치에 데이터를 새로 전달된 e로 변경시켜주는 메소드

list.set(0,new Music("술이 달다","에픽하이"));
System.out.println(list);

4출력결과)
[Music [title=술이 달다, artist=에픽하이], Music [title=이 밤, artist=양다일], Music [title=잊혀지다, artist=정키], 끝]

//5. size() : 리스트의 사이즈 반환시켜주는 메소드 (배열과 비교하면 length같은 느낌)

System.out.println("리스트의 사이즈 : "+ list.size());
System.out.println("리스트의 마지막 인덱스 수: "+ (list.size()-1)); //3번인덱스 까지 있음

5출력결과)

리스트의 사이즈 : 4
리스트의 마지막 인덱스 수: 3

6. get(int index) : E(반환형 Object) -> 해당 인덱스 위치의 객체를 반환시켜주는 메소드

Music m = (Music)list.get(0);
String s = (String)list.get(3);// 변수에 대입할때는 강제형변환 
System.out.println(m);
System.out.println(s);
System.out.println(list.get(1)); // 바로 출력시에는 강제형변환 필요없음 
System.out.println(((Music)list.get(1)).getTitle());

6출력결과)
Music [title=술이 달다, artist=에픽하이]

Music [title=이 밤, artist=양다일]
이 밤

7. subList(int index1, int index2) :List(반환형 List) 기존의 리스트에서 일부 추출해서 새로운 List로 반환해주는 메소드 

List sub = list.subList(0, 2); //시작인덱스 <=   < 끝인덱스 
System.out.println(sub);

7 출력결과)
[Music [title=술이 달다, artist=에픽하이], Music [title=이 밤, artist=양다일]]

8. addAll(Collection c) : 컬렉션을 통째로 뒤에 추가시켜주는 메소드 

list.addAll(sub);
System.out.println(list);

8출력결과)
[Music [title=술이 달다, artist=에픽하이], Music [title=이 밤, artist=양다일], Music [title=잊혀지다, artist=정키], 끝, Music [title=술이 달다, artist=에픽하이], Music [title=이 밤, artist=양다일]]

9.✔ isEmpty() : boolean -> 컬렉션이 비어있는지 묻는 메소드

System.out.println(list.isEmpty()); //false

10. clear() : 싹비워주는 메소드 

list.clear();
System.out.println(list);
System.out.println(list.isEmpty());//true

10출력결과)
[]
true

복사했습니다!