Music
public class Music {
private String title; // 노래제목
private String artist; //가수명
// 기본생성자, 매개변수생성자, getter/setter메소드, toString메소드
public Music() {}
public Music(String title, String artist) {
this.title = title;
this.artist = artist;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getArtist() {
return artist;
}
public void setArtist(String artist) {
this.artist = artist;
}
@Override
public String toString() {
return "Music [title=" + title + ", artist=" + artist + "]";
}
// Object클래스에 있는 equals(Object obj) : boolean => 두 객체의 주소값이 일치하면 true / 아니면 false 반환
// 주소값 비교가 아닌 실제 필드값들이 모두 같을 경우 true / 하나라도 틀릴 경우 false가 반환되도록 재정의
@Override
public boolean equals(Object obj) { // 주소값이 아닌 필드값으로 비교하도록 equals 오버라이딩
//return (this == obj); // Object 클래스의 equals 메소드의 내용
// this (현 객체) vs obj (전달받은 비교할 대상 객체)
// 자료형 Music Object
Music other = (Music)obj;
// this(현객체) vs other(비교할대상객체)
// this.title == other.title && this.artist == other.artist
if(this.title.contentEquals(other.title) && this.artist.equals(other.artist)){
return true;
}else {
return false;
}
}
}
Java
복사
ExamRun
public class ExamRun {
public static void main(String[] args) {
// Music 객체들만 보관 가능한 리스트 생성
ArrayList <Music> list = new ArrayList<>();
list.add(new Music("술이 달다", "에픽하이"));
list.add(new Music("이 밤", "양다일"));
list.add(new Music("GoodBye", "박효신"));
System.out.println("값 삽입 : " + list);
System.out.println(list.get(0));
list.get(1).setTitle("저 밤");
System.out.println(list.get(1));
System.out.println("=================");
System.out.println(list);
// contains(Object o) : 해당 리스트에 전달된 객체가 포함이 되어있는지 묻는 메소드 (포함 되어 있다면 true / 아니면 false 반환)
System.out.println(list.contains(new Music("술이 달다", "에픽하이")));
list.remove(1);
System.out.println("값 삭제1 : " + list);
// remove(Object o)
list.remove(new Music("술이 달다", "에픽하이"));
System.out.println("값 삭제2 : " + list);
// 문제점 : Music클래스에 equals메소드를 오버라이딩 하지 않아서 부모클래스(Object)에 있는 주소값 비교인 equals메소드가 수행됨
// new 연산자로 새로운 주소값을 갖고 있기 때문에 다른 객체로 인식하고 있음
// 조치내용 : Music클래스에 equals메소드를 오버라이딩 할꺼임!!
// 주소값 비교가 아닌 실제 담긴 필드값 비교로 필드값이 일치하면 true / 아니면 false를 반환하는 내용으로 재정의
}
}
Java
복사
ListRun
//ArrayList List = new ArrayList(); // 내부적으로 크기 10짜리인 배열이 생성됨
ArrayList<Music> list = new ArrayList<>(3); // 내부적으로 크기 3짜리인 배열이 생성됨
System.out.println(list); // 안에 아무것도 없는 상태 (비어있는 상태)
// E --> Element
// 1. add(E e) : 리스트의 맨 끝에 해당 전달되는 e를 추가시켜주는 메소드
list.add(new Music("Good Bye", "박효신"));
list.add(new Music("이 밤", "양다일"));
list.add(new Music("잊혀지다", "정키"));
//list.add("끝");
// 순서유지되면서 값 추가 (각 index에 담겨있음)
// 크기에 제약이 없음
// 다양한 타입의 값을 추가 가능
System.out.println(list);
// 2. add(int index, E e) : 리스트에 전달되는 index값 위치에 전달되는 e를 추가시켜주는 메소드
list.add(1, new Music("진심이 담긴 노래", "케이시"));
// 중간에 값 추가시 알아서 기존의 값들 뒤로 땡겨주는 작업이 내부적으로 진행됨
System.out.println(list);
// 3. set(int index, E e) : 리스트에 해당 인덱스의 값을 전달되는 e로 변경시켜주는 메소드
list.set(0, new Music("술이 달다", "에픽하이"));
System.out.println(list);
// 4. remove(int index) : 리스트에 해당 인덱스의 값을 삭제시켜주는 메소드
list.remove(1);
System.out.println(list);
// 5. size() : 리스트에 담겨있는 데이터 수 반환해주는 메소드
System.out.println("리스트에 담긴 데이터 수 : " + list.size());
System.out.println("리스트의 마지막 인덱스 : " + (list.size() - 1));
// 6. get(int index) : E => 리스트에 해당 index위치의 데이터를 반환해주는 메소드
/* 제네릭 설정 전
Music m = (Music)list.get(1); // 기본적으로 object로 반환하기 때문에 강제형변환이 필요함
System.out.println(m);
System.out.println(m.getTitle());
System.out.println(list.get(0));
System.out.println(((Music) list.get(0)).getTitle());
*/
// 제네릭 설정 후
Music m = list.get(1);
System.out.println(m);
System.out.println(m.getTitle());
System.out.println(list.get(0));
System.out.println(list.get(0).getTitle());
System.out.println("=====================");
// 0번 ~ 마지막인덱스까지의 데이터 출력
// for loop문
for(int i=0; i<list.size(); i++) {
System.out.println(list.get(i));
}
System.out.println("=====================");
// for each문
// for(Object o : list) { // 제네릭 설정 전
for (Music o : list) { // 제네릭 설정 후
System.out.println(o);
}
System.out.println("=====================");
// 7. subList(int index1, int index2) : 해당 리스트로부터 index1에서부터 index2까지의 데이터 값들을 추출해서 새로운 List로 반환시켜주는 메소드
List sub = list.subList(0, 2); // 0 <= < 2
System.out.println(sub);
//8. addAll(Collection c) : 해당 리스트에 다른 컬렉션에 있는 데이터들을 통째로 추가해주는 메소드
list.addAll(sub);
System.out.println(list);
// 9. isEmpty() : 해당 리스트가 비어있는지 묻는 메소드 (비어있으면 true/ 비어있지 않으면 false 반환)
System.out.println(list.isEmpty());
// 10. clear() : 해당리스트를 싹 비워주는 메소드
list.clear();
System.out.println(list);
System.out.println(list.isEmpty());
Java
복사


