본문 바로가기

STUDY/Java

[JAVA] 정렬, 익명클래스

 

01 배열 정렬

1. 오름차순 정렬

- 가나다... ABC... 순

- 오름차순 정렬이 default

- java.util 패키지 > Arrays 클래스 > parallel ~ 메소드 (static)

package com.test;

import java.util.Arrays;

public class ArraySort {
	public static void main(String[] args) {
		String [] name = {"A", "C", "B", "F", "G", "Z", "H", "J"};
		
		for(String k : name) {
			System.out.print(k + "  ");
		}
		System.out.println();
		System.out.println("=======오름차순 정렬=======");
		
		//오름차순
		Arrays.parallelSort(name);
		for(String k : name) {
			System.out.print(k + "  ");
		}
	}
}
 

[결과화면]


 

2. 내림차순 정렬

- 하타파... ZYXW... 순

- java.util 패키지 > Collections 클래스 > reverseOrder() 메소드 (static)

package com.test;

import java.util.Arrays;
import java.util.Collections;

public class ArraySort {
	public static void main(String[] args) {
		String [] name = {"A", "C", "B", "F", "G", "Z", "H", "J"};
		
		for(String k : name) {
			System.out.print(k + "  ");
		}
		System.out.println();
		System.out.println("=======내림차순 정렬=======");
		
		//내림차순
		Arrays.sort(name, Collections.reverseOrder());
		for(String k : name) {
			System.out.print(k + "  ");
		}
	}
}
 

[결과화면]


 

02 Compare 클래스 정렬

1. Compare<T>

- java.lang 패키지 > Compare<T> 인터페이스 > compareTo 추상메소드

 

2. 오름차순 정렬 (이름)

 
package com.sort;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;

class Data implements Comparable<Data>{
	String name;
	int score;
	
	public Data(String name, int score) {
		super();
		this.name = name;
		this.score = score;
	}
	
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getScore() {
		return score;
	}

	public void setScore(int score) {
		this.score = score;
	}

	@Override
	public int compareTo(Data t) {
		return name.compareTo(t.name);
	}
	
}
public class Sample {

	public static void main(String[] args) throws FileNotFoundException {
		ArrayList<Data> alist = new ArrayList<Data>();
		FileReader fr = new FileReader("c:/java_test/score.txt");
		BufferedReader br = new BufferedReader(fr);
		
		while(true) {
			try {
				String str = br.readLine();
				if(str==null)
					break;
				String name=str.substring(0,3);
				int score=Integer.parseInt(str.substring(3));
				
				alist.add(new Data(name, score));
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		Collections.sort(alist);
		System.out.println("이름\t점수\t");
		for(Data k : alist) {
			System.out.println(k.getName() + "\t" + k.getScore());
		}
	}
}

① 10행: Comparable<T>에서 T에 클래스 사용 가능

② 36행: Comparable는 인터페이스로 추상메소드만 가지고 있기 때문에 Override 필수

③ 38행: 순서대로 name의 데이터들을 가져와 하나씩 비교 후 위치를 바꿔 정렬

① 45행: ArrayList, FileReader, BufferedReader 사용법

[결과화면]


 

3. 내림차순 정렬 (이름)

@Override
public int compareTo(Data t) {
	return t.name.compareTo(name);
}
 

① Override한 부분만 수정 (name.compareTo(t.name) -> t.name.compareTo(name))

 

[결과화면]

 


 

4. 오름차순 정렬 (점수)

@Override
public int compareTo(Data t) {
	if(score < t.score)
		return -1;
	return 0;
}

[결과화면]


5. 내림차순 정렬 (점수)

@Override
public int compareTo(Data t) {
	if(score > t.score)
		return -1;
	return 0;
}
 

[결과화면]


 

03 익명 클래스

- 추상 메소드를 한번만 사용할 경우 익명 클래스 사용 > 상속을 안해도 괜찮음

package com.test;

abstract class Sample{
	abstract void out();
}

public class Anonymous {

	public static void main(String[] args) {
		Sample ss = new Sample() {

			@Override
			void out() {
				System.out.println("익명 클래스");
			}
		};
		ss.out();
	}
}
 

Sample이라는 추상클래스

Anonymous 클래스

① 3행: 추상 클래스를 상속받아야만 Anonymus에서 객체를 만들어 사용할 수 있음

② 10행: 하지만 "실행을 한번만 시킬 경우" 상속을 하지 않아도 추상 클래스에서 객체를 만들어 오버라이딩 가능

* 추상 클래스는 객체를 만들지 못한다? > new를 이용해 객체를 만들기 어려울 뿐 만들 수 있음

 

[결과화면]


 

 

 

'STUDY > Java' 카테고리의 다른 글

[JAVA] Thread, 스레드  (0) 2021.11.05
[JAVA] 예외처리  (0) 2021.11.05
[JAVA] 데이터 타입 - 기본타입, 참조타입  (0) 2021.11.05
[JAVA] 추상 클래스, 인터페이스  (0) 2021.11.05
[JAVA] 상속과 다형성  (0) 2021.11.05