scone-lemon
[디버깅 과목평가 대비] Serializable, Comparable, Comparator 코드정리 본문
ETC./싸피 이모저모 (2021~2022)
[디버깅 과목평가 대비] Serializable, Comparable, Comparator 코드정리
lemon-scone 2021. 8. 23. 01:10Serializable
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);
}
}
}