여튼 아래는 인텔리제이에서 파보다보니까 cursor가 나오게 됐고 "기준점"정도로 이해하면 될 것 같다
1.listIterator(int index) : iterator를 사용할 컬렉션의 해당 인덱스번호부터 값을 가져온다
// 해당 변수의 1번 인덱스부터 받아오기
ListIterator<Student> li2 = al.listIterator(1);
2.hasNext()는 while문으로 한번 돌리고 나면 기준점이 끝으로 가있어 다시 돌려도 의미x
while(li.hasNext()){
System.out.print(li.next()+" "); // a(0점) a(1점) a(2점) a(3점) a(4점)
}
// hasNext() 두번째 돌리면 처음부터 다시 가는게 아니라 이미 끝에 있기에 의미없음
while(li.hasNext()){
System.out.print(li.next()+" "); // 출력x
}
3.출력x던 hasNext()를 hasPrevious()를 쓰면 다시 출력이 된다
// hasNext() 두번째 돌리면 처음부터 다시 가는게 아니라 이미 끝에 있기에 의미없음
while(li.hasNext()){
System.out.print(li.next()+" "); // 출력x
}
System.out.println();
while(li.hasPrevious()){
System.out.print(li.previous()+" "); // a(4점) a(3점) a(2점) a(1점) a(0점)
}
System.out.println();
// hasPrevious()로 앞으로 돌렸기에 기준점이 앞으로 와있어 hasNext() 다시 작동
while(li.hasNext()){
System.out.print(li.next()+" "); // a(0점) a(1점) a(2점) a(3점) a(4점)
}
원데이터인 ArrayList인 al에 add하면 추가값이 잘 나오는데 ListIterator인 li2에 add하면 값이 while+hasNext()에서 안나온다. 근데 디버깅하면 안에 size도 그렇고 값이 추가된 것 같이 나오는데 이것저것 해봤지만 미스테리
클래스 자체가 자료형으로 사용가능하기에 래퍼클래스도 자료형으로도 사용 가능하고, 그 안에 메소드도 활용가능
기본 자료형(primitive)
- 자료형 사용 o, 메소드 사용x
참조 자료형(non-primitive, reference type)
(Wrapper Class = 참조형)
-자료형 사용 o, 메소드 사용 o
기본 자료형
Wrapper Class
boolean
Boolean
char
Character
byte
Byte
int
Integer
short
Short
long
Long
float
Float
double
Double
boxing vs unBoxing
기본자료형 vs Wrapper클래스
boxing : 기본자료형 → wrapper클래스로 변환(객체화)
unBoxing : wrapper클래스 → 기본자료형으로 변환
객체에 저장되어 있는 데이터를 기본형 데이터로 꺼내는 작업
Wrapper클래스가 박스
안에 메소드,필드 등 담아두기에 박스
반대로 박스(객체)에 저장되어 있는 데이터를 기본형 데이터로 꺼내는 작업이 언박싱
// boxing
int num1 = 10;
Integer integer1 = new Integer(**num1**); // num1 자체를 래퍼클래스로 전환 -> boxing
// unBoxing
int num2 = integer1.**intValue();** // num2 : 래퍼클래스를 기본자료형 int로 변환 -> unBoxing
// boxing
int i = 10;
Integer iValue1 = new Integer(i);
Integer iValue2 = new Integer(123);
double d = 1.123;
Double dValue1 = new Double(d);
Double dValue2 = new Double(5.323);
// unBoxing
Integer iValue = new Integer(4578);
int i = iValue.intValue();
Double dValue = new Double(44.241);
double d = dValue.doubleValue();
autoBoxing, autoUnBoxing
JDK1.5버젼부터 지원
자동으로 박싱,언박싱
기본 타입과 Wrapper클래스 타입 간의 변환이 자동으로 이루어진다
(바로 대입적용이 가능케됨)
// 자동박싱,언박싱. 바로 대입적용이 가능케됨
Integer integer2 = num1; // autoBoxing
int num3 = integer2; // autoUnBoxing
int i = 10;
Integer iValue = i; // 바로 대입 가능
Double dValue = new Double(3.14);
double d = dValue; // 바로 대입 가능
1)String을 기본 자료형으로 바꾸기
parsing(파싱)
기본자료형에서 래퍼클래스로 변환하기 위해 많이 사용하는게 파싱(parsing)
parsing : 문자열을 기본 자료형으로 변환하는 것
변환가능한 같은 형태이여야한다
ex) 숫자면 숫자끼리. 문자열 "1"을 int 1로 변환 가능
int i = Integer.parseInt("10");
double d = Double.parseDouble("홍길동");
// 에러메시지 : java.lang.NumberFormatException: For input string: "홍길동"
// 파싱할 자료형의 형태를 지니지 않아서 나는 에러
short s = Short.parseShort("10 "); // 잦은 실수 요인 : 공백 조심
float f = Float.parseFloat(" 10");
boolean b = Boolean.parseBoolean("true");
byte by = Byte.parseByte("10");
Long l = Long.parseLong("10");
// 캐릭터 래퍼클래스에는 파싱기능 존재x -> chatAt()로 대체
byte b = Byte.parseByte("1");
short s = Short.parseShort("2");
int i = Integer.parseInt("3");
long l = Long.parseLong("4");
float f = Float.parseFloat("0.1");
double d = Double.parseDouble("0.2");
boolean bool = Boolean.parseBoolean("true");
char c = "abc".charAt(0);
2)primitive type(기본 자료형)을 String으로 바꾸기
String str1 = i + ""; // 방법1. 가장 쉬운 변환.대중적 사용
String str2 = String.valueOf(s); // 방법2
String str3 = Byte.valueOf(by).toString(); // 방법3
String b = Byte.valueOf((byte)1).toString();
String s = Short.valueOf((short)2).toString();
String i = Integer.valueOf(3).toString();
String l = Long.valueOf(4L).toString();
String f = Float.valueOf(0.1f).toString();
String d = Double.valueOf(0.2).toString();
String bool = Boolean.valueOf(true).toString();
String ch = Character.valueOf('a').toString();