2-1(2) List (인터페이스)
List (인터페이스)
- 특징
: 순서(인덱스)가 존재하는 데이터의 집합
: 데이터가 중복되어도 저장이 가능하다 (순서가 다르면 중복저장 가능함)
List 를 구현하고 있는 클래스
- Stack, Vector, LinkedList, ArryaList 등
List 정렬
- 정렬과 관련된 interface는 Comparable과 Comparator 이렇게 두가지가 있다
Comparable => compareTo() 구현
- 보통 객체 자체에 정렬기능을 넣기 위해서
- int compareTo(T o) : 현재객체(this)와 대상객체(o)의 순서를 비교한다.
- 결과값
: 양수 (현재객체가 대상객체보다 순서값이 작은 경우)
: 음수 (현재객체가 대상객체보다 순서값이 큰 경우)
: 0 (현재객체가 대상객체보다 순서값이 동일한 경우)
Comparator => compare() 구현
- 정렬기준을 별도로 구현하고 싶을 때
- 정렬방식을 결정하는 class는 Comparator라는 인터페이스를 구현해야 한다.
- 이 Comparator인터페이스의 compare()라는 메서드를 재정의 하여 구현하면 된다.
-
compare()메서드의 반환값을 결정하는 방법
: 이 메서드가 양수를 반환하면 두 값의 순서가 바뀐다.(오름차순이 기본임)
-
오름차순 정렬일 경우...
: 앞의 값이 크면 양수, 같으면 0, 앞의 값이 작으면 음수를 반환하도록 한다.
-
String객체에는 정렬을 위해서 compareTo()메서드가 구현되어 있는데 이 메서드의 반환값은 오름차순에 맞게 반환되도록 구현되어 있다.
(Wrapper클래스와 Date, File클래스에도 구현되어 있다.)
- 정렬은 Collection.sort()메서드를 이용하여 정렬한다
: 순서(인덱스)가 존재하는 데이터의 집합
: 데이터가 중복되어도 저장이 가능하다 (순서가 다르면 중복저장 가능함)
- Stack, Vector, LinkedList, ArryaList 등
List 정렬
- 정렬과 관련된 interface는 Comparable과 Comparator 이렇게 두가지가 있다
Comparable => compareTo() 구현
- 보통 객체 자체에 정렬기능을 넣기 위해서
- int compareTo(T o) : 현재객체(this)와 대상객체(o)의 순서를 비교한다.
- 결과값
: 양수 (현재객체가 대상객체보다 순서값이 작은 경우)
: 음수 (현재객체가 대상객체보다 순서값이 큰 경우)
: 0 (현재객체가 대상객체보다 순서값이 동일한 경우)
Comparator => compare() 구현
- 정렬기준을 별도로 구현하고 싶을 때
- 정렬방식을 결정하는 class는 Comparator라는 인터페이스를 구현해야 한다.
- 이 Comparator인터페이스의 compare()라는 메서드를 재정의 하여 구현하면 된다.
-
compare()메서드의 반환값을 결정하는 방법
: 이 메서드가 양수를 반환하면 두 값의 순서가 바뀐다.(오름차순이 기본임)
-
오름차순 정렬일 경우...
: 앞의 값이 크면 양수, 같으면 0, 앞의 값이 작으면 음수를 반환하도록 한다.
-
String객체에는 정렬을 위해서 compareTo()메서드가 구현되어 있는데 이 메서드의 반환값은 오름차순에 맞게 반환되도록 구현되어 있다.
(Wrapper클래스와 Date, File클래스에도 구현되어 있다.)
- 정렬은 Collection.sort()메서드를 이용하여 정렬한다
: 양수 (현재객체가 대상객체보다 순서값이 작은 경우)
: 음수 (현재객체가 대상객체보다 순서값이 큰 경우)
: 0 (현재객체가 대상객체보다 순서값이 동일한 경우)
compare()메서드의 반환값을 결정하는 방법
: 이 메서드가 양수를 반환하면 두 값의 순서가 바뀐다.(오름차순이 기본임)
오름차순 정렬일 경우...
: 앞의 값이 크면 양수, 같으면 0, 앞의 값이 작으면 음수를 반환하도록 한다.
String객체에는 정렬을 위해서 compareTo()메서드가 구현되어 있는데 이 메서드의 반환값은 오름차순에 맞게 반환되도록 구현되어 있다.
(Wrapper클래스와 Date, File클래스에도 구현되어 있다.)
(ex)
class Desc implements Comparator<String>{ //Comparator<String> 을 꼭 implements 해야한다.
@Override
public int compare(String str1, String str2) {
return str1.compareTo(str2) * 1; // 기본적으로 오름차순(양수)으로 구현되어 있다
// return str1.compareTo(str2) * -1;// 내림차순 (음수)
}
}
public class T02_ListSortTest {//20.09.14
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("일지매"); //Comparable -> compareTo()구현되어 있음
list.add("홍길동");
list.add("성춘향");
list.add("변학도");
list.add("이순신");
System.out.println("1. 정렬 전 : "+list); // [일지매, 홍길동, 성춘향, 변학도, 이순신]
//정렬은 Collection.sort()메서드를 이용하여 정렬한다.
//기본적으로 '오름차순 정렬'을 수행한다.
//정렬방식을 변경하려면 정렬방식을 결정하는 객체를 만들어서
//Collection.sort()메서드에 변수로 넘겨주면 된다.
Collections.sort(list); // 오름차순으로 정렬하기
System.out.println("2. 정렬 후 :" + list); //[변학도, 성춘향, 이순신, 일지매, 홍길동]
Collections.shuffle(list); // 데이터를 섞어준다.
System.out.println("자료 섞기 후 : "+ list);
//정렬방식을 결정하는 객체(정렬자)를 이용하여 정렬하기
Collections.sort(list, new Desc());
System.out.println("정렬 후 :" + list); // 오름차순
}
}
(ex2)
/**
* 회원의 정보를 저장할 클래스
* (회원이름을 기준으로 오름차순 정렬이 될 수 있는 클래스 만들기)
*/
class Member implements Comparable<Member>{
private int num; // 번호
private String name; //이름
private String te1;
@Override
public String toString() {
return "Member [num=" + num + ", name=" + name + ", te1=" + te1 + "]";
}
/**
* 이름을 기준으로 오름차순 정렬이 되도록 설정한다.
*/
@Override
public int compareTo(Member mem) {
return getName().compareTo(mem.getName());
}
}
/**
* 정렬 기준의 외부 선언을 위해서는 Comparator인터페이스를 구현하면 된다.
* (Member객체의 번호(num)의 내림차순으로 정렬하기)
*/
class SortNumDesc implements Comparator<Member>{ //외부 정렬 기준을 이용한 정렬하기 클래스
@Override
public int compare(Member mem1, Member mem2) {
/*
if(mem1.getNum() > mem2.getNum()) { // 내림차순 -> 음수 리턴;
return -1; // 음수 리턴;
}else if(mem1.getNum() == mem2.getNum()) {
return 0;
}
return 1; // 위가 모두 아닐때 양수 리턴;
}*/
// Wrapper클래스에서 제공하는 메서드를 이용하는 방법1
/*return Integer
* .compare(mem1.getNum(), mem2.getNum()) * -1;
*/
// Wrapper클래스에서 제공하는 메서드를 이용하는 방법2
return new Integer(mem1.getNum())
.compareTo(mem2.getNum()) * -1;
}
}
public class T03_ListSrotTest { // 20200914
public static void main(String[] args) {
List<Member> memList = new ArrayList<Member>();
memList.add(new Member(1, "홍길동", "010-1111-1111"));
memList.add(new Member(5, "변학도", "010-2222-2222"));
memList.add(new Member(9, "성춘향", "010-3333-3333"));
memList.add(new Member(3, "이순신", "010-4444-4444"));
memList.add(new Member(6, "강감찬", "010-5555-5555"));
memList.add(new Member(2, "일지매", "010-6666-6666"));
System.out.println("정렬전 : " );
for(Member mem : memList) {
System.out.println(mem);
}
System.out.println("------------------------------------");
Collections.sort(memList); // 정렬하기
System.out.println("이름의 오름차순으로 정렬 후:");
for(Member mem : memList) {
System.out.println(mem);
}
System.out.println("--------------------------------");
//외부 정렬 기준을 이용한 정렬하기
Collections.sort(memList, new SortNumDesc());
System.out.println("번호의 내림차순으로 정렬 후:");
for(Member mem : memList) {
System.out.println(mem);
}
}
}
Author And Source
이 문제에 관하여(2-1(2) List (인터페이스)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@zhyun1220/List-인터페이스저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)