JAVA

JAVA Collection Framework 2

woohap 2024. 11. 25. 09:49

Collection Framework 계층 구조

Collection< E > 인터페이스 메서드 11가지

  • List와 Set 구현체에서 사용할 수 있는 부모 클래스의 메서드

add(E e) : boolean

Collection에 객체 추가
Collection이 변경되면 true 반환 

SET 사용시
객체가 Set에 존재하면 true 반환, 존재하면 false 반환 

addAll(Collection c) : boolean

Collection에 매개변수 Collection 요소들을 추가
Collection이 변경되면 true 반환 

contains(Object o) : boolean

Collection에 매개변수 객체가 존재하면 true
존재하지 않으면 false 반환 

containsAll(Collection c) : boolean

Collection에 매개변수 Collection c 원소들이 모두 존재하면 true
하나라도 존재하지 않으면 false 반환 

inEmpty() : boolean

Collection이 비어있으면 true 반환, 그렇지 않으면 false 반환 

size() : int

Collection의 길이를 반환 

remove(Object o) : boolean

Collection에서 매개변수 객체를 제거한다.
제거할 객체가 존재하면, true 반환, 그렇지 않으면 false 반환 
동일한 객체가 여러 개인 경우 맨 앞의 객체를 제거

removeAll(Collection c) : boolean

Collection에서 매개변수 Collection c 요소들을 모두 제거 
Collection이 변경되면 true 반환 
동일한 객체가 여러 개여도 하나만 추가해주면 여러 개의 객체를 모두 삭제한다. 

clear() : void

Collection의 모든 요소를 제거 

toArray() : Object[]

Collection을 Object 배열로 반환
메서드의 결과로 배열에 저장될 때, 배열의 크기가 작다면 반환되는 객수만큼 배열의 크기가 증가한다.

toArray(T[] a) : T[]

매개변수 타입 배열로 만들기 위해서 사용
Collection을 T타입 배열로 반환 

** contains, containsAll, remove, removeAll을 사용자 정의 클래스 객체에 사용하려면 
equals()를 오버라이딩하여 같음 기준을 정해줘야 한다.

List< E > 인터페이스 메서드 - 5가지

List 구현체에서 사용할 수 있는 메서드들 

add(int index,E ele) : void

특정 인덱스 위치에 객체를 추가 
** 해당 인덱스에 객체가 존재하면 해당 객체는 뒤로 밀린다.

addAll(int index, Collection c) : boolean

List의 특정 인덱스에 매개변수 Collection 요소들을 추가 
List가 변경되었다면 true 반환, 그렇지 않으면 false 반환 

set(int index, E ele) : E

List의 특정 인덱스의 객체를 변경
변경되지 건 객체를 반환 

get(int index, E ele) : E

List의 특정 인덱스 객체를 반환 

remove(int index) ; E

List의 특정 인덱스 객체를 제거 후 제거된 객체 반환 

List 모든 요소 접근 - for , for-each , iterator():Iterator< E >

1)for문

for(int i = 0 ; i < list.size() ; i++)
System.out.print(list1.get(i));

2)for-each문

for(Integer ele : list)
System.out.print(ele);

3)iterator() : Iterator< E >

Collection 프레임워크에서 표준화된 Iterator 사용 
→ Iterator를 이용해서 하나씩 꺼내서 사용하는 것이 표준 
hasNext() - 다음 요소가 있는지 확인 있으면 true , 없으면 false 반환 
next() - 화살표 다음 요소로 이동 
Iterator<Integer> iter = list.iterator();
while(iterator.hasNext())    
    System.out.print(iter.next());

List에서 모든 동일 원소 제거 시 3가지 방법

1) remove(Object o) : boolean 사용

while(list.contains(obj)){
    list.remove(obj);
}

2) removeAll(Collection< ? > c) : boolean 사용

→ 제거할 원소들을 Collection에 추가한 뒤 removeAll() 메서드를 사용하여 제거 

3) Iterator의 remove() 사용

Iterator<Student> iter = list.iterator();
while(iter.hasNext()){
    if(iter.next().equals(new Student(”lee”,1));
    iter.remove();
}

주의사항

List는 동적으로 크기를 조절하기 때문에 for문, for-each문으로 제거해서는 안 된다.
→ for문,for-each문 동작 도중 크기가 동적으로 변경되어 문제가 발생할 수 있음

Set

순서 없음 , 중복 저장 불가 
set() 메서드가 없으므로 객체를 제거 후 새로 추가해야 함 

Hash , Tree

Hash 구조를 사용할 때 사용자 정의 클래스 객체를 사용하려면 
1) 해쉬함수로 해쉬코드 비교
2) equals()로 비교 

** 즉 hashCode(), equals() 메서드를 재정의해야 한다. 
→ contains(), containsAll(), remove(), removeAll() 메서드를 사용하려면 hashCode, equals 재정의 필요

Set에서 모든 요소 접근하려면 forEach, iterator으로 접근 가능

for문은 index가 없으므로 사용할 수 없다. 

Set은 중복이 없으므로 모든 동일 원소를 제거할 필요가 없다.

→ 불필요한 것 그냥 하나만 삭제하면 된다. 
Tree 구조를 사용할 때 사용자 정의 클래스 객체를 사용하려면 

Comparable 인터페이스를 반드시 구현해야 한다.

→ compareTo() 메서드를 재정의 해줘야 함 (크기 비교 메서드) - 내가 기준을 설정 
→ equals(), hashCode() 없어도 됨 

implements Comparable<Student>
@Override
public int compareTo(Student obj){
    return thid.id - obj.id;
}

instanceof 키워드와 < ? extends E >

[instanceof 키워드]
객체 판별할 때 사용
주로 특정 클래스 타입에 작업을 수행할 때 사용 
// Student 객체 이거나 이를 상속받은 초등학생, 중학생, 고등학생 객체는 true 반환 
if( obj instanceof Student ) 
    Student stu = (Student)obj;
    System.out.println(stu.getName());
}


< ? extends E > 키워드 
E를 포함해서 E를 상속하는 모든 서브 클래스들이 올 수 있다.

'JAVA' 카테고리의 다른 글

Object 클래스의 메서드  (0) 2024.12.04
객체지향 프로그래밍 1  (0) 2024.11.27
JAVA Collection Framework 3  (0) 2024.11.26
JAVA Collection Framework 1  (0) 2024.11.24