객체들을 한 곳에 모아 놓고 편리하게 사용할 수 있는 환경을 제공
List<String> names = new ArrayList<String>();
names.add("현경찬");
names.add("배태웅");
names.add("양지웅");
System.out.println(names);
// 1. index를 이용한 삭제
names.remove(0);
System.out.println(names);
// 2. 값을 이용한 삭제
names.remove("송창용");
System.out.println(names);
// 3. 전부 삭제
names.clear();
System.out.println(names);
System.out.println(names.isEmpty());
// 4. 중복된 값을 삭제할 시 앞에 꺼만 삭제 됨
names.add("배태웅");
names.add("배태웅");
System.out.println(names);
names.remove("배태웅");
System.out.println(names);
// 삭제할 때 주의할 점 : 지우면서 인덱스가 바뀌기 때문에 문제 발생
// 삭제 시 리스트 크기도 바뀌고 각 원소들의 index도 바뀜
// 학생1을 다 삭제하고 싶다.
names.add("학생1");
names.add("학생1");
names.add("학생2");
System.out.println(names);
// 잘못된 예시
// for(int i=0; i<names.size(); i++) {
// if(names.get(i).equals("학생1"))
// names.remove(i);
// }
// System.out.println(names);
// 올바른 예시
for(int i=names.size()-1; i>=0; i--) {
if(names.get(i).equals("학생1"))
names.remove(i);
}
System.out.println(names);
Set 에서 중복 판단하는 방법
1. hashCode(); 일치시킨다.
2. equals() 오버라이드.
@Override
public int hashCode() {
// TODO Auto-generated method stub
return id.hashCode();
}
@Override
public boolean equals(Object obj) {
if(obj instanceof Person) {
Person other = (Person) obj;
return id.equals(other.id);
}
return false;
}
Key와 value 를 하나의 Entry로 묶어서 데이터 관리, 순서는 없으며 키에 대한 중복은 없음
빠른 속도
Map<String, String> map = new HashMap<>();
map.put("서울5반", "현경찬");
map.put("서울6반", "옥진석");
map.put("서울7반", "육예진");
map.put("서울8반", "서경덕");
System.out.println(map);
System.out.println(map.get("서울5반"));
// 똑같은 키에 새로운 값을 넣으면 대체가 됩니다.
map.put("서울6반", "송예진");
System.out.println(map); // 대체됨
System.out.println(map.containsKey("서울8반")); // true
System.out.println(map.containsValue("현경찬")); //true
맵의 순회
// 맵의 순회
// 1. keySet()
for(String key: map.keySet()) {
System.out.printf("%s: %s \n", key, map.get(key));
}
// 2. entrySet()
for(Map.Entry<String, String> entry: map.entrySet()) {
System.out.println(entry.getKey()+":"+entry.getValue());
}
// 3.
Queue<Integer> queue = new LinkedList<>();
queue.offer(10);
// queue 에다가 순차적으로 값 집어넣기
for(int i=0; i<5; i++) {
queue.offer(i);
}
// queue에서 값을 제거하기
while(!queue.isEmpty()) {
System.out.println(queue.poll());
}
Stack<Integer> stack = new Stack<>();
for(int i=0; i<5; i++) {
stack.push(i);
}
while(!stack.isEmpty()) {
System.out.println(stack.pop());
}
요소들을 특정 기준에 맞추어 오름차순 또는 내림차순으로 배치하는 것
순서를 가지는 collection들만 정렬 가능
collections의 sort()를 이용한 정렬
public interface Comparable<T> {
public int compareTo(T o);
}
객체가 comparable을 구현하고 있지 않거나 사용자 정의 알고리즘으로 정렬하려는 경우
sort(List list, Comparator<? Super T> c)
public interface Comparator<T>{
int compare(T o1, T o2);
}
comparator 인터페이스로서는 객체 생성을 못해서 불안정하지만, 밑에 구현을 서술해줌으로써 임시 설계도가 완성됨..
Collections.sort(names, new comaprator<String>(){
@Override
public int compare(String o1, String o2){
return Integer.comapre(o1.length,o2.length);
}
}
(매개변수…) → {함수 본문 내용}Collections.sort(persons, (Person o1, Person o2)->{
if(o1.name.equals(o2.name)) {
return o1.age - o2.age;
}
return o1.name.compareTo(o2.name);
});
person[j-1].compareTo(person[j])
c.compare(person[j-1],person[j])