List Interface 특징
- Stack과 Queue는 LinkedList를 이용하여 사용할 수 있다.
Stack
명령
- 자료 입력 : push(저장할 값)
- 자료 출력 : pop() => 자료를 꺼내온 후 꺼내온 자료를 stack에서 삭제한다.
LinkedList<String> stack = new LinkedList<>();
stack.push("갓김치");
stack.push("이듀듀");
stack.push("김추추");
stack.push("김호근");
System.out.println("현재 stack값들 : " + stack);
String data = stack.pop();
System.out.println("꺼내온 자료 : " + data);
System.out.println("꺼내온 자료 : " + stack.pop());
System.out.println("현재 stack값들 : " + stack);
stack.push("담임땜");
System.out.println("현재 stack값들 : " + stack);
System.out.println("꺼내온 자료 : " + stack.pop());
Queue
명령
- 자료 입력 : offer(저장할 값)
- 자료 출력 : poll() => 자료를 Queue에서 꺼내온 후 꺼내온 자료는 Queue에서 삭제한다.
LinkedList<String> queue = new LinkedList<>();
queue.offer("갓김치");
queue.offer("이듀듀");
queue.offer("김추추");
queue.offer("김호근");
System.out.println("현재 queue의 값 : " + queue);
String temp = queue.poll();
System.out.println("꺼내온 자료 :" + temp);
System.out.println("꺼내온 자료 :" + queue.poll());
System.out.println("현재 queue의 값 : " + queue);
if(queue.offer("담임땜")) {
System.out.println("신규 등록 자료 : 담임땜");
}
System.out.println("현재 queue의 값 :" + queue);
System.out.println("꺼내온 자료 : " + queue.poll());
참고
List 정렬
- 정렬과 관련된 interface: Comparable, Comparator
Comparator
- 정렬기준을 별도로 구현하고 싶을 때
- compare()메서드를 구현해야함
compare()메서드
- 반환값을 결정하는 방법
- 메서드가 양수를 반환하면 두 값의 순서가 바뀐다 (기본: 오름차순)
- 앞의 값이 크면 양수, 같으면 0, 앞의 값이 작으면 음수를 반환
- String 객체에는 정렬을 위해서 compareTo()메서드가 구현되어 있음
- 이 메서드의 반환값은 오름차순에 맞게 반환되도록 구현되어 있다.
- Wrapper클래스와 Date, File클래스에도 구현되어 있다.
class Desc implements Compataor<String> {
@Override
public int compare(String str1, String str2) {
return str1.compareTo(str2) * -1;
}
}
- 정렬 전: [일지매, 홍길동, 성춘향, 변학도, 이순신]
Collections.sort(list);
Collections.sort(list, new Desc());
Comparable
- 보통 객체 자체에 정렬기능을 넣기위해
- compareTo()메서드를 구현해야함
class Member implements Comparable<Member> {
private int num;
private String name;
private String tel;
@Override
public int compareTo(Member m) {
return getName().compareTo(m.getName());
}
}
class SortNumDesc implements Comparator<Member> {
@Override
public int compare(Member m1, Member m2) {
if(m1.getNum() > m2.getNum()) {
return -1;
}else if(m1.getNum() == m2.getNum()) {
return 0;
}else {
return 1;
}
return Integer.compare(m1.getNum(), m2.getNum()) * -1;
return new Integer(m1.getNum()).compareTo(m2.getNum()) * -1;
}
}
Collections.sort(memList);
Collections.sort(memList, new SortNumDesc());
참고
- T02_ListSortTest.java : Comparator 관련
- T03_ListSortTest.java
문제
- 학번, 이름, 국어점수, 영어점수, 수학점수, 총점, 등수를 멤버로 갖는 Student 클래스를 만든다.
- 생성자는 학번, 이름, 국어, 영어, 수학 점수만 매개 변수를 받아서 처리한다.
- 이 Student객체들은 List에 저장하여 관리한다.
- List에 저장한 데이터들을 학번의 오름차순으로 정렬하여 출력하는 부분과 총점의 역순으로 정렬하는 부분을 프로그램 하시오.
- 총점이 같으면 학번의 내림차순으로 정렬되도록 한다.
- 학번 정렬 기준은 Student클래스 자체에서 제공하도록 하고, 총점 정렬 기준은 외부클래스에서 제공하도록 한다.
class Student implements Comparable<Student>{
@Override
public int compareTo(Student student){
return getId().compareTo(student.getId());
}
}
class SortTotalDesc implements Comparator<Student>{
@Override
public int compare(Student s1, Student s2){
if(s1.getTotal() > s2.getTotal(){
return -1;
}else if(s1.getTotal() == s2.getTotal()){
return s1.getId().compareTo(S2.getId()) * -1;
}else{
return 1;
}
}
}
참고