반응형
seperate refereces, same data 가능?
-Collections.revers(); 역순
-Collections.shuffle(); random
-Collections.min(); 최소
-Collections.max(); 최대 ..........................................min.mas기능 shuffle한 data에도 적용.
-Collections.sort(); 순서대로 정렬
-Collctions.copy
예)
Collections.shuffle(seatCopy); //random으로 정렬
Theatre.Seat minSeat = Collections.min(seatCopy); //min
Theatre.Seat maxSeat = Collections.max(seatCopy); //max
Collections.sort(seatCopy); // 다시 in order로 정렬
예제)
<Main Class에 입력> -Teather Class이용 출력
package com.timbuchalka;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Main {
public static void main(String[] args) {
Theatre theatre = new Theatre("Olympian", 8, 12);
List<Theatre.Seat> seatCopy = new ArrayList<>(theatre.seats); // a new list
printList(seatCopy); //in order V
seatCopy.get(1).reserve(); //index1을 InnerClass reserve
if(theatre.reserveSeat("A02")) {
System.out.println("Please pay for A02");
} else {
System.out.println("Seat already reserved");
}
Collections.shuffle(seatCopy); //random으로 정렬 v
System.out.println("Printing seatCopy");
printList(seatCopy); //출력
System.out.println("Printing theatre.seat");
printList(theatre.seats); //arraylist seats
Theatre.Seat minSeat = Collections.min(seatCopy); //min v
Theatre.Seat maxSeat = Collections.max(seatCopy); //max v
System.out.println("Min seat number is " + minSeat.getSeatNumber());
System.out.println("Max seat number is " + maxSeat.getSeatNumber());
//sortList(seatCopy);
Collections.sort(seatCopy); // 다시 in order로 정렬 v
System.out.println("Printing sorted seatCopy");
printList(seatCopy);
// Collections.copy 흔히 잘못하고 있는 것.error 발생 > 추후에 좀 더 배움.
List<Theatre.Seat> newList = new ArrayList<>(theatre.seats.size());
Collections.copy(newList, theatre.seats);
}
//method define
public static void printList(List<Theatre.Seat> list) {
for(Theatre.Seat seat : list) {
System.out.print(" " + seat.getSeatNumber());
}
System.out.println();
System.out.println("======================================================================");
}
////method define : Collections.sort의 for loop이용 예시
// public static void sortList(List<? extends Theatre.Seat> list) {
// for(int i=0; i<list.size() -1; i++) {
// for(int j=i+1; j<list.size(); j++) {
// if(list.get(i).compareTo(list.get(j)) >0) {
// Collections.swap(list, i, j);
// }
// }
// }
// }
}
//Output
D:\IT\JDK\jdk11.0.6_10\bin\java.exe "-javaagent:D:\IT\IDEA\IntelliJ IDEA Community Edition 2020.1\lib\idea_rt.jar=50453:D:\IT\IDEA\IntelliJ IDEA Community Edition 2020.1\bin" -Dfile.encoding=UTF-8 -classpath D:\IT\Java-Collections-Collections-List-Methods-Source-code\out\production\Collections com.timbuchalka.Main
A01 A02 A03 A04 A05 A06 A07 A08 A09 A10 A11 A12 B01 B02 B03 B04 B05 B06 B07 B08 B09 B10 B11 B12 C01 C02 C03 C04 C05 C06 C07 C08 C09 C10 C11 C12 D01 D02 D03 D04 D05 D06 D07 D08 D09 D10 D11 D12 E01 E02 E03 E04 E05 E06 E07 E08 E09 E10 E11 E12 F01 F02 F03 F04 F05 F06 F07 F08 F09 F10 F11 F12 G01 G02 G03 G04 G05 G06 G07 G08 G09 G10 G11 G12 H01 H02 H03 H04 H05 H06 H07 H08 H09 H10 H11 H12
======================================================================
Seat A02 reserved
Seat already reserved
Printing seatCopy // shuffle V
D05 F11 C07 D09 G08 G03 H02 H01 H04 G01 A09 E10 F01 F12 B08 F06 E04 G09 B02 B09 G11 A05 B12 D04 C12 A10 H07 A08 F08 F05 F09 G06 H12 B03 C02 B01 H10 D07 A11 E11 C04 A01 D02 C09 A12 C03 B05 G12 H11 D06 F07 G02 C08 D01 D11 H09 F10 C01 B07 B11 C06 E07 A02 E09 H03 E06 G05 H06 D08 A04 G10 E12 G07 B04 E05 A03 F02 B10 B06 H08 A07 E08 C10 D03 E03 E01 H05 F03 D10 F04 A06 G04 C11 D12 E02 C05
======================================================================
Printing theatre.seat
A01 A02 A03 A04 A05 A06 A07 A08 A09 A10 A11 A12 B01 B02 B03 B04 B05 B06 B07 B08 B09 B10 B11 B12 C01 C02 C03 C04 C05 C06 C07 C08 C09 C10 C11 C12 D01 D02 D03 D04 D05 D06 D07 D08 D09 D10 D11 D12 E01 E02 E03 E04 E05 E06 E07 E08 E09 E10 E11 E12 F01 F02 F03 F04 F05 F06 F07 F08 F09 F10 F11 F12 G01 G02 G03 G04 G05 G06 G07 G08 G09 G10 G11 G12 H01 H02 H03 H04 H05 H06 H07 H08 H09 H10 H11 H12
======================================================================
Min seat number is A01 //v
Max seat number is H12 //v
Printing sorted seatCopy //v
A01 A02 A03 A04 A05 A06 A07 A08 A09 A10 A11 A12 B01 B02 B03 B04 B05 B06 B07 B08 B09 B10 B11 B12 C01 C02 C03 C04 C05 C06 C07 C08 C09 C10 C11 C12 D01 D02 D03 D04 D05 D06 D07 D08 D09 D10 D11 D12 E01 E02 E03 E04 E05 E06 E07 E08 E09 E10 E11 E12 F01 F02 F03 F04 F05 F06 F07 F08 F09 F10 F11 F12 G01 G02 G03 G04 G05 G06 G07 G08 G09 G10 G11 G12 H01 H02 H03 H04 H05 H06 H07 H08 H09 H10 H11 H12
======================================================================
Exception in thread "main" java.lang.IndexOutOfBoundsException: Source does not fit in dest
at java.base/java.util.Collections.copy(Collections.java:561)
at com.timbuchalka.Main.main(Main.java:39) //마지막 error 분 V
Process finished with exit code 1
Theater Class.
package com.timbuchalka;
import java.util.*;
public class Theatre {
private final String theatreName;
public List<Seat> seats = new ArrayList<>();
public Theatre(String theatreName, int numRows, int seatsPerRow) {
this.theatreName = theatreName;
//constructor
int lastRow = 'A' + (numRows -1);
for (char row = 'A'; row <= lastRow; row++) {
for(int seatNum = 1; seatNum <= seatsPerRow; seatNum++) {
Seat seat = new Seat(row + String.format("%02d", seatNum));
seats.add(seat);
}
}
}
//getter
public String getTheatreName() {
return theatreName;
}
//method
// binarySearch 이용
public boolean reserveSeat(String seatNumber) {
Seat requestSeat = new Seat(seatNumber); //object define
int foundSeat = Collections.binarySearch(seats, requestSeat,null);
if(foundSeat >=0){ //index가 0 이상이면 = 좌석이 존재한다면
return seats.get(foundSeat).reserve(); //좌석존재시, innerClass reserver method실행
}else{
System.out.println("There is no seat : "+seatNumber); //좌석 아예 존재x
return false;
}
}
// for testing
public void getSeats() {
for(Seat seat : seats) {
System.out.println(seat.getSeatNumber());
}
}
//InnerClss Seat
public class Seat implements Comparable<Seat> {
private final String seatNumber;
private boolean reserved = false;
//constructor
public Seat(String seatNumber) {
this.seatNumber = seatNumber;
}
//compare Method
@Override
public int compareTo(Seat seat) {
return this.seatNumber.compareToIgnoreCase(seat.getSeatNumber());
}
//method
public boolean reserve() {
if(!this.reserved) {
this.reserved = true;
System.out.println("Seat " + seatNumber + " reserved");
return true;
} else {
return false;
}
}
public boolean cancel() {
if(this.reserved) {
this.reserved = false;
System.out.println("Reservation of seat " + seatNumber + " cancelled");
return true;
} else {
return false;
}
}
public String getSeatNumber() {
return seatNumber;
}
}