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 출력
언박싱(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)