ETC./싸피 이모저모 (2021~2022)

[디버깅 과목평가 대비] Serializable, Comparable, Comparator 코드정리

lemon-scone 2021. 8. 23. 01:10

Serializable

package workshop.serializeableex2;

import java.io.Serializable;

public class User implements Serializable{
	
	private String name;
	private int age;
	private double score;
	
	public User() {
		super();
	}

	public User(String name, int age, double score) {
		super();
		this.name = name;
		this.age = age;
		this.score = score;
	}
	
	public void disp() {
		System.out.println("이름 : " + name);
		System.out.println("나이 : " + age);
		System.out.println("점수 : " + score);
	}
	
}
package workshop.serializeableex2;

import java.io.FileInputStream;
import java.io.FileNotFoundException;import java.io.IOError;
import java.io.IOException;
import java.io.ObjectInputStream;

// 객체에 input
public class ObjectInputMain {
	public static void main(String[] args) {
		
		try {
			ObjectInputStream oos = new ObjectInputStream(new FileInputStream("user.txt"));
			User ob1 = (User)oos.readObject();
			User ob2 = (User)oos.readObject();
			ob1.disp();
			ob2.disp();
			oos.close();
		}
		catch(FileNotFoundException e) {
			e.printStackTrace();
		}
		catch (IOException e) {
			e.printStackTrace();
		}
		catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
}
package workshop.serializeableex2;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

// 객체를 output
public class ObjectOutputMain {
	public static void main(String[] args) {
		
		User ob1 = new User("공유", 40, 89.5);
		User ob2 = new User("김고은", 20, 73.5);
		
		try {
			ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("user.txt"));
			oos.writeObject(ob1);
			oos.writeObject(ob2);
			System.out.println("저장 되었습니다.");
			oos.close();
		}
		catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		catch (IOException e) {
			e.printStackTrace();
		}
	}

}

 

Comparable, Comparator

package workshop.comparableex2;

public class Student implements Comparable<Student>{
	
	int no;
	int score;
	
	public Student(int no, int score) {
		super();
		this.no = no;
		this.score = score;
	}
	
	public int getNo() {
		return no;
	}

	public int getScore() {
		return score;
	}

	@Override
	public int compareTo(Student o) {
		return this.no - o.no;
	}

	@Override
	public String toString() {
		return "Student [no=" + no + ", score=" + score + "]";
	}
	
}
package workshop.comparableex2;

import java.util.Arrays;

// Arrays.sort() 사용
public class S01_SortTest {
	public static void main(String[] args) {
		
		int[] arr = new int[] {4, 3, 7, 9, 10};
		String[] location = new String[] {"서울", "광주", "대전", "구미", "부울경"};
		
		System.out.println("정렬 전 : " + Arrays.toString(arr));
		Arrays.sort(arr);
		System.out.println("정렬 후 : " + Arrays.toString(arr));
		
		System.out.println("정렬 전 : " + Arrays.toString(location));
		Arrays.sort(location);
		System.out.println("정렬 후 : " + Arrays.toString(location));
		
	}
}
package workshop.comparableex2;

import java.util.Arrays;
import java.util.Comparator;

public class S02_ComparableTest {
	
	// Comparable : 정렬 수행 시 기본적으로 적용되는 정렬 기준이 되는 메서드를 정의하는 인터페이스 (compareTo() 메서드를 오버라이드하여 구현)
	// Comparator : 정렬 가능한 클래스(Comparable 인터페이스를 구현한 클래스)들의 기본 정렬 기준과 다르게 정렬 하고 싶을 때 사용하는 인터페이스
	// https://gmlwjd9405.github.io/2018/09/06/java-comparable-and-comparator.html
	
	private static class StudentComparator implements Comparator<Student>{
		@Override
		public int compare(Student o1, Student o2) {
			return o2.no - o1.no;
		}
	}
	
	private static void print(Student[] arr) {
		for (Student student : arr) {
			System.out.println(student);
		}
	}
	
	public static void main(String[] args) {
		
		Student[] arr = new Student[] {
				new Student(1,10),
				new Student(3,50),
				new Student(2,80),
				new Student(4,20)
		};
		
		System.out.println("\n정렬 전");
		print(arr);
		
		System.out.println("\n오름차순(번호)");
		Arrays.sort(arr);
		print(arr);
		
		System.out.println("\n내림차순(번호)");
		Arrays.sort(arr, new StudentComparator());
		print(arr);
		
		System.out.println("\n오름차순(점수)");
		//Arrays.sort(arr, (s1,s2)->Integer.compare(s1.score, s2.score));
		Arrays.sort(arr, new Comparator<Student>() {
			@Override
			public int compare(Student o1, Student o2) {
				return o1.score - o2.score;
			}
		});
		print(arr);
		
		System.out.println("\n내림차순(점수)");
		Arrays.sort(arr, new Comparator<Student>() {
			@Override
			public int compare(Student o1, Student o2) {
				return o2.score - o1.score;
			}
		});
		print(arr);
		
	}
	
}
package workshop.comparableex2;

import java.util.Arrays;
import java.util.Comparator;

public class S03_ComparatorTest {
	
	private static class MyComparator implements Comparator<int[]>{
		@Override
		public int compare(int[] o1, int[] o2) {
			int diff = o1[0] - o2[0];
			return diff!=0 ? diff : o2[1]-o2[1];
		}
	}
	
	private static void print(int[][] arr) {
		for (int[] i : arr) {
			System.out.println(Arrays.toString(i));
		}
	}
	
	public static void main(String[] args) {
		
		int[][] arr = new int[][] { { 1, 10 }, { 2, 50 }, { 2, 80 }, { 4, 10 }, { 1, 100 } };
		
		System.out.println("\n정렬 전");
		print(arr);
		
		System.out.println("\n정렬 후");
		Arrays.sort(arr, new MyComparator());
		print(arr);
		
	}
	
}
package workshop.comparableex2;

import java.util.Arrays;
import java.util.Comparator;

import workshop.comparableex.Student;

public class S04_ComparatorReverseTest {

	public static void main(String[] args) {
		
		Integer[] arr = new Integer[] { 4, 3, 7, 9, 10 };
		System.out.println("\n정렬 전 : " + Arrays.toString(arr));
		Arrays.sort(arr, Comparator.reverseOrder());
		System.out.println("\n정렬 후 : " + Arrays.toString(arr));
		
		String[] location = { "서울", "대전", "광주", "구미"};
		System.out.println("\n정렬 전 : " + Arrays.toString(location));
		Arrays.sort(arr, Comparator.reverseOrder());
		System.out.println("\n정렬 후 : " + Arrays.toString(location));
		
		Student[] students = new Student[] { 
				new Student(3, 50),
				new Student(2, 80),
				new Student(1, 10), 
				new Student(4, 10) 
				};
		
		System.out.println("\n정렬 전");
		for (Student student : students) {
			System.out.println(student);
		}
		
		// error : Student가 Compareable일때 가능
		System.out.println("\n정렬 후");
		Arrays.sort(arr, Comparator.reverseOrder());
		for (Student student : students) {
			System.out.println(student);
		}
		
	}
	
}