
sorting : 정렬
sorting할 때, array의 데이터 타입
int[] char[] long[] double[] 등의 primitive array는 그대로 사용 가능함.
class로 지정된 array(위 예제의 String[] Member[] 같은 array)는 Comparable interface를 implement 해야함.
// main
int[] scores = { 99, 94, 44, 97, 98 };
printScoresInfo(scores);
System.out.println("----------------------");
		
Arrays.sort(scores);
printScoresInfo(scores);
System.out.println("----------------------");
String[] names = { "홍길동", "박동수", "김민수" };
Arrays.sort(names);
printNamesInfo(names);public static void printScoresInfo(int[] scores) {
	for (int i = 0; i < scores.length; i++) {
		System.out.print(scores[i] + " ");
	}
	System.out.println();
}
public static void printNamesInfo(String[] names) {
	for (int i = 0; i < names.length; i++) {
		System.out.print(names[i] + " ");
	}
	System.out.println();
}
int compareValue = name.compareTo(o.name);		//오름차순
int compareValue = -name.compareTo(o.name);		//내림차순
int compareValue = o.name.compareTo(this.name);	//내림차순-> A.compareTo(B)의 연산 결과가 양수이면 A B 순서를 바꿈.
A.compareTo(B)일 때, return 값이 양의 정수, 0, 음의 정수 3가지임
Arrays.sort 오름차순으로 정렬시키기 
A < B 이면, 음수를 return함, Arrays.sort가 A B의 순서를 그대로 유지함.
A = B 이면, 0를 return함, Arrays.sort가 A B의 순서를 그대로 유지함.
A > B 이면, 양수를 return함, Arrays.sort가 A B의 순서를 B A로 바꿈.
앞뒤에 있는 원소를 비교해 앞에 원소값이 클 때, 둘의 순서를 바꿈.
Arrays.sort 내림차순으로 정렬시키기
A < B 이면, 양수를 return함, Arrays.sort가 A B의 순서를 B A로 바꿈.
A = B 이면, 0를 return함, Arrays.sort가 A B의 순서를 그대로 유지함.
A > B 이면, 음수를 return함, Arrays.sort가 A B의 순서를 그대로 유지함.
앞뒤에 있는 원소를 비교해 뒤에 원소값이 클 때, 둘의 순서를 바꿈.
public int compareTo(Member o) {
	int compareValue = name.compareTo(o.name);		//오름차순
	int compareValue = -name.compareTo(o.name);		//내림차순
	int compareValue = o.name.compareTo(this.name);	//내림차순2
	return compareValue;
};// main
Member[] members = { new Member("홍길동"), new Member("박동수"), new Member("김민수") };
Arrays.sort(members);
printMembersInfo(members);
public static void printMembersInfo(Member[] members) {
	for (int i = 0; i < members.length; i++) {
		System.out.print(members[i].name + " ");
	}
	System.out.println();
}오름차순 출력
 내림차순 출력
내림차순 출력 내림차순2 출력
내림차순2 출력
언박싱(Unboxing)이란?
: 포장(wrapping)된 객체에서 기본 타입의 값을 얻어내는 과정
.기본 타입명 + Value(); 형식num = obj.byteValue();박싱(Boxing)이란?
: 기본 타입의 값을 객체로 만드는 과정
생성자를 이용하는 방법
ex)
기본타입으로 값을 주는 경우Byte obj = new Byte(10);
문자열(String)로 값을 주는 경우Byte obj = new Byte("10");
//boxing
Double obj1 = new Double(100.3);
Double obj2 = new Double("200.45");
Double obj3 = Double.valueOf("300.12");
//unboxing
double d1 = obj1.doubleValue();
double d2 = obj2.doubleValue();
double d3 = obj3.doubleValue();
		
System.out.println(d1);	// 100.3 출력
System.out.println(d2);	// 200.45 출력
System.out.println(d3);	// 300.12 출력valueOf() 메소드를 이용하는 방법
ex)
기본타입으로 값을 주는 경우Integer obj = Integer.valueOf(10);
문자열(String)로 값을 주는 경우Integer obj = Integer.valueOf("10");
//boxing
Integer obj1 = new Integer(100);
Integer obj2 = new Integer("200");
Integer obj3 = Integer.valueOf("300");
//unboxing
int i1 = obj1.intValue();
int i2 = obj2.intValue();
int i3 = obj3.intValue();
	
System.out.println(i1);	// 100 출력
System.out.println(i2);	// 200 출력
System.out.println(i3);	// 300 출력자동 박싱(Auto Boxing)
자동 언박싱(Auto UnBoxing)
// 포장 클래스 타입(Integer)인 obj에 기본값인 100이 대입됨--> auto boxing
Integer obj = 100; 
System.out.println(obj.intValue());		//100 출력
System.out.println(obj);				//100 출력
// 기본타입(int)인 i에  포장 객체(obj)가 대입됨--> auto unboxing
int i = obj;
System.out.println(i);					//100 출력
		
int result = obj + 100; // auto unboxing
System.out.println(result);				//200 출력Double obj2 = 100.23; // auto boxing
System.out.println(obj2.doubleValue());	//100.23 출력
System.out.println(obj2);				//100.23 출력
		
double d = obj2; // auto unboxing
System.out.println(d);					//100.23 출력
		
double dResult = obj2 + 12.3; // auto unboxing
System.out.println(dResult);			//112.53 출력Wrapper class의 인스턴스의 값을 비교하는 방법 
1. primitive 타입으로 변환 후 비교하기.
A.equals(B) 메소드 사용하기.Integer obj1 = 300;	// auto boxing
Integer obj2 = 300;
// obj1과 obj2는 각각 다른 힙메모리에 인스턴스를 갖음
System.out.println("obj1 == obj2 : " + (obj1 == obj2));	// false
System.out.println("unboxing 후 (obj1 == obj2) : " + (obj1.intValue() == obj2.intValue())); // true
// unboxing하면 object의 값 추출
System.out.println("obj.equals(obj2) : " + (obj1.equals(obj2))); // true
// A.equals(B)을 이용해 A와 B의 인스턴스 값 비교
Math.random()은 난수를 발생시키는 메소드임.
Random class로 Random 객체를 생성해 난수 값을 받을 수 있음.
int[] selectNum = new int[6];
Random random = new Random();
//		Random random = new Random(2); 
// Random(seed) Random생성자에 seed값을 정해주면 같은 난수가 나옴
		
System.out.println("선택번호 : ");
for (int i = 0; i < 6; i++) {
	selectNum[i] = random.nextInt(45) +1; // 1 ~ 44사이 난수 정수값
	System.out.print(selectNum[i]+ " ");
}
System.out.println();
		
int[] winNum  = new int[6];
random = new Random();
//		random = new Random(2);
		
System.out.println("당첨번호 : ");
for (int i = 0; i < 6; i++) {
	winNum[i] = random.nextInt(45) +1;
	System.out.print(winNum[i]+ " ");
}
System.out.println();
난수 출력
Random(seed) Random생성자에 seed값을 정해주면 같은 난수가 나옴
int[] selectNum = new int[6];
Random random = new Random(2); 
// Random(seed) : seed값을 정해주면 같은 난수가 나옴
		
System.out.println("선택번호 : ");
for (int i = 0; i < 6; i++) {
	selectNum[i] = random.nextInt(45) +1; // 1 ~ 44사이 난수 정수값
	System.out.print(selectNum[i]+ " ");
}
System.out.println();
		
int[] winNum  = new int[6];
random = new Random(2);
// Random(seed) : seed값을 정해주면 같은 난수가 나옴
		
System.out.println("당첨번호 : ");
for (int i = 0; i < 6; i++) {
	winNum[i] = random.nextInt(45) +1;
	System.out.print(winNum[i]+ " ");
}
System.out.println();
Calendar 클래스는 static field들을 갖고 있음.

빼기 : minus + 변수(long) 형태로 작성
더하기 : plus + 변수(long) 형태로 작성
ex)
minusYears(10) -> '현재연도'에서 10년 빼기
plusYears(10) -> '현재연도'에서 10년 더하기

//캘린더를 `getInstance()`로 받아옴.
Calendar now = Calendar.getInstance();
//++현재 날짜값 받아오기.++
int year = now.get(Calendar.YEAR);
int month = now.get(Calendar.MONTH) + 1;	
// get(Calendar.MONTH)는 0 ~ 11
int day = now.get(Calendar.DAY_OF_MONTH);
int week = now.get(Calendar.DAY_OF_WEEK);//++요일 값 switch로 받기++
String strWeek = null;
switch (week) {
case Calendar.MONDAY:
	strWeek = "월";
	break;	
case Calendar.TUESDAY:
	strWeek = "화";
	break;
case Calendar.WEDNESDAY:
	strWeek = "수";
	break;
case Calendar.THURSDAY:
	strWeek = "목";
	break;
case Calendar.FRIDAY:
	strWeek = "금";
	break;
case Calendar.SATURDAY:
	strWeek = "토";
	break;
case Calendar.SUNDAY:
	strWeek = "일";
	break;
}System.out.println(year + "년 " + month + "월 " + day + "일 " + strWeek + "요일");int hour = now.get(Calendar.HOUR);
int minute = now.get(Calendar.MINUTE);
int second = now.get(Calendar.SECOND);
System.out.println(hour + "시 " + minute + "분 " + second + "초");
SimpleDateFormat class 사용하기
"yyyy년 MM월 dd일 hh시 mm분 ss초" 형식 사용Date date = new Date();
		
String strNow = date.toString();
System.out.println(strNow);
System.out.println(date);
		
		
SimpleDateFormat sdf = new SimpleDateFormat("YYYY년 MM월 DD일 hh시 mm분 ss초");
// MM은 month , mm은 minute
		
String strNow2 = sdf.format(date);
System.out.println(strNow2);
제네릭(Generic)이란?
Class ArrayList<E>에서 <E> 이부분이 제네릭(generic)
public class Box<T> {
	private T t;
    public T get() { return t}
    p
}<T> : (T;template)
Box<T> 전체가 데이터 타입이면서 클래스명으로 간주함.Product<T, M> 형식
: Generic 타입으로 T와 M을 사용하겠다는 의미(generic multi type)