본문 바로가기
2022-2/자바

[자바] ArrayList<클래스> 형의 정렬방법

by 철없는민물장어 2022. 12. 12.
728x90
반응형

일반적으로는 

collections.sort(arraylist)를 하면 되지만

어레이리스트가 어떠한 클래스 객체를 담는다면..

정렬을 어떻게 해야할까?

Collections.sort에서 자동완성을 시켜보면

sort(List<T> list)가 있고

sort(List<T> list, Comparator<? super T> c) 가 있다.

 

여기서 아래의 저 기괴한 Comparator를 사용해야 한다.

 

class MyComparator implements Comparator<Goods>{
	@Override
	public int compare(Goods a,Goods b){
		if(a.getPrice()>b.getPrice()) return 1;
		if(a.getPrice()<b.getPrice()) return -1;
		return 0;
	}
}

Comparator를 구현해야한다.

compare메소드 하나만 구현하면 된다.

a,b를 비교해서 a가 크면 1, b가 크면 -1, 같으면 0을 반환하면 된다.

 

이렇게 잘 작성 한 후

Collections.sort(goods_list, new MyComparator());

이렇게 sort메소드의 두번째 인자로 아까 만든 MyComparator객체를 생성해서 넣어주면 된다.

 

.

.

.

근데..

compare메소드에서 비교하는거 구현할 때..

int같은 자료형이면 상관이 없는데... String이면 어떡하지?

사전순으로 비교하고싶은데..우짤까

 

class UserComparator implements Comparator<Goods>{
	@Override
	public int compare(Goods g1, Goods g2) {
		// 단어 길이가 같을 경우
		if(g1.getId().length() == g2.getId().length()) {
			return g1.getId().compareTo(g2.getId());	// 사전 순 정렬
		}
		// 그 외의 경우
		else {
			return g1.getId().length() - g2.getId().length();
		}}
}

여기서 id는 String이다.

이렇게 작성해서 사용하면 사전순으로 정렬할 수 있다.

 

역순정렬 하는 방법

Collections.sort(goods_list, new MyComparator().reversed());

Comparator.reversed()를 붙여서 사용함.

728x90
반응형

'2022-2 > 자바' 카테고리의 다른 글

[자바] 제네릭과 컬렉션  (0) 2022.12.18
[자바] 네트워크  (0) 2022.12.17
[자바] 멀티스레드, synchronized  (0) 2022.12.01
[자바] Vector  (0) 2022.12.01
자바 Exception/Generic <T>  (0) 2022.11.24

댓글