1. Collection
객체를 그룹 단위의 데이터로 저장하는 기본적인 자료구조들의 모음
2. 배열과 컬렉션의 비교
배열
|
컬렉션
|
크기 변경 불가
|
저장 크기 제약 없음
|
한 타입의 데이터만 저장
* 예외 object[] obArr = new Object[3]; |
여러 타입의 데이터 저장
|
추가/삭제/정렬 불편
|
추가/삭제/정렬 간단
|
3. 컬렉션 프레임워크 종류
인터페이스
|
특징
|
|
Collection
|
List
|
저장 순서 유지
중복 저장 가능 ( 크기 제약x) |
Set
|
저장 순서 유지 불가능
중복 저장 불가능 *index가 없다. |
|
Map
|
키와 값을 쌍으로 저장
키는 중복 저장 불가능 (저장순서x) (값은 중복 저장 가능) |
<E> : 제네릭으로 타입을 제한한다. (타입확인을 하기 위함)
4. List 기능
a. add(E e) : 리스트 끝에다가 지정요소를 추가한다.
b. add(index, E e) : 원하는 index에 지정요소 추가
c. remove(int index) : 원하는 index에 있는 값 삭제
d. set(int index, Student element) : 해당 인덱스 값에 지정요소 대체
e. get(int indxt) : 해당 인덱스에 있는 값 가져오기
f. contains(Object o) : 리스트에 해당 객체의 존재유무에 따라 false / true
g. clear() : 모든 객체 삭제
ArrayList<Student> list = new ArrayList<Student>(3/*수용량지정가능*/);
list.add(new Student("테스트", 0));
list.add(new Student("도대담", 60));
list.add(new Student("남나눔", 90));
// list.add("하이"); > 제네릭을 통하여 Student만 받을 수 있도록 타입을 제한했기때문에 불가
**수용량 지정은 가능하지만 List는 크기에 제약이 없기 때문에 수용량 보다 많은 값이 담긴다.
list.add(0, new Student("류라라", 100));
System.out.println("list : " + list);
//remove(int index) : E
Student s = list.remove(1);
System.out.println(s);
System.out.println("list : " + list);
//remove(Object o) : boolean
list.remove(new Student("류라라", 100));
System.out.println("list : " + list);
list.set(3, new Student("박보배", 85 ));
System.out.println("list : " + list);
Student s2 = list.get(2);
System.out.println(s2);
** remove(new 객체) 불가능 -> 주소 값 다름 -> equals, hashcode 오버라이딩 -> remove(new 객체) 가능
4. Set 기능
a. add(E e) : boolean Set의 경우에는 index가 존재하지 않기 때문에 자리를 지정해서 추가하는 메소드는 사용 불가
b. LinkedHashSet : 순서는 유지되고 중복저장이 안되는 컬렉션
c. TreeSet : 정렬
정렬을 위해서는 comparable이나 comparater가 있어야한다. String클래스는 Comparable 인터페이스(compareTo())가
이미 구현되어있기 때문에 정렬 기준이 정해져있고 정렬 기준이 정해져있는 String클래스가 TreeSet안에 들어가 있기 때문에 정렬 가능
d. Iterator() : 컬렉션에 저장된 element에 접근 할 수 있도록 한다. (한 번 읽어왔으면 더 이상 읽어올 값이 없기 때문에 한 번만 사용가능하다. )
e. hasNext() : boolean 다음 값이 있으면 true반환, 없으면 false 반환
HashSet<Dog> set = new HashSet<>();
//add(E e) : boolean
set.add(new Dog("해피", 6.8));
set.add(new Dog("뚱이", 3.3));
set.add(new Dog("밍키", 5.4));
System.out.println("set : " + set); // 순서 유지 x
set.add(new Dog("해피", 6.8)); //위에 있는 해피와는 주소값이 달라서 중복값으로 처리되지 않음
System.out.println("set : " + set); // 중복 저장 x
}
6. Map
Map< K , V >
Key 값은 equals()오버라이딩 되어있어야 중복객체 확인이 가능하다. 그렇기 때문에 키 타입은 주로 equals()와 hashcode()가 이미 오버라이딩 되어 있는 객체를 주로 이용한다. (String, Integer ...)
a. Map에 값 집어넣기 put(K key, V valus) : V
b. containsKey(Object Key) : boolean 해당 키가 존재하고 있는지 확인
containsValue(object value) : boolean 해당 값이 존재하고 있는지 확인
c. get(Object key) : V
d. keySet() : Set<K> : map에 있는 key 들을 set에 담아 반환
e. entrySet() : Set<Map.Entry<K,V>> : entry : 키와 값 / map에 있는 entry들을 set에 담아 반환
f. TreeMap : key를 기준으로 정렬해주는 map
g. getProperty(String key, String defaultValue) : key와 value를 String으로 제한
key 값이 존재하면 그 key 에 해당하는 value 값을 반환
key 값이 존재하지 않으면 defaultValue 반환
HashMap<String, Snack> map = new HashMap<>();
// hashMap 객체 생성 (키는 String 객체, 값은 Snack 객체가 들어갈 수 있는)
map.put("새우깡",new Snack("짠맛", 1500));
map.put("다이제",new Snack("단맛", 2500));
map.put("포테이토칩",new Snack("짠맛", 1500));
map.put("고소미", new Snack("고소한 맛", 1000));
System.out.println("map: " + map);
System.out.println(map.put("새우깡", new Snack("매운맛", 1500)));
System.out.println("map: " + map);
7. comparable 정렬기준 1개
comparator 그 외 추가 정렬기준
String의 경우에는 이미 comparable을 오버라이딩 하고 있기 때문에 정렬기준을 세울 때 comparator로 진행한다.
8. equals() / hachcode() 오버라이딩
클래스 비교는 그대로이고 내용비교만 해당 모델의 변수의 타입과 개수에 따라 달라진다.
@Override
public boolean equals(Object obj) {
//클래스 먼저 비교
if(this == obj) {
return true;
}
if(obj == null) {
return false;
}
//클래스 정보 비교
if(getClass() != obj.getClass()) {
return false;
}
//내용비교
Music other = (Music)obj;
if(title == null) {
if(other.title != null) {
return false;
}
} else if(!title.equals(other.title)) {
return false;
}
if(singer == null) {
if(other.singer != null); {
return false;
}
}else if(!singer.equals(other.singer)) {
return false;
}
return true;
}
@Override
public int hashCode() {
final int PRIME = 31;
int result = 1;
result = PRIME * result + (title == null? 0 : title.hashCode());
result = PRIME * result + (singer == null? 0 : singer.hashCode());
return result;
}
'back-end > JAVA' 카테고리의 다른 글
[수업-java] 14. 네트워크 (0) | 2022.08.06 |
---|---|
[수업-java] 12. IO (0) | 2022.08.06 |
[수업-java] 11. Exception (0) | 2022.08.06 |
[수업-java] 10. API (0) | 2022.08.06 |
[수업-java] 09. 상속 (0) | 2022.08.06 |