여튼 아래는 인텔리제이에서 파보다보니까 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도 그렇고 값이 추가된 것 같이 나오는데 이것저것 해봤지만 미스테리
int i = 10;
Integer iValue = i; // 바로 대입 가능Double dValue = newDouble(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();
// append()// 받아온 값을 뒤에 추가로 이어주는 메소드
buffer3.append("abc"); // 결과값 abcabc
System.out.println(buffer3);
System.out.println("buffer3의 실주소값 : " +System.identityHashCode(buffer3)); // append 추가후에도 주소값 같음// ->수정 후에도 buffer가변클래스인걸 알 수 있음
*이중 append()
// 2) append() 반환값 : Stringbuffer
buffer3.append("abc").append("def"); // 메소드 체이닝
System.out.println(buffer3); // 결과값 abcabcdef
System.out.println("abc, def 추가 후의 buffer3의 수용량 : " +buffer3.capacity()); // 수용량 단위는 character 한문자이므로 기본용량16에 abc 세글자를 +3해서 19
System.out.println("abc, def 추가 후의 buffer3에 들어있는 실제 값의 길이 : " +buffer3.length()+"\\n"); // StringBuffer 생성자에 들어간 문자열 abc 길이3
2) insert()
원하는 자리에 값 추가 시킬 수 있는 메소드
// 원하는 자리에 값 추가 시킬 수 있는 메소드buffer3.insert(2,"zzz");
System.out.println("인덱스2에 추가 후의 buffer3 : "+buffer3+"\\n"); // abzzzcabcdef
3) delete()
데이터 삭제하는 메소드
delete(int start, int end) : StringBuffer deleteCharAt(int index) : StringBuffer
// 데이터 삭제하는 메소드// delete(int start, int end) : StringBuffer // deleteCharAt(int index) : StringBuffer buffer3.delete(2, 5); // zzz 삭제. 마지막 인덱스 미포함. System.out.println("삭제 후의 buffer3 : "+buffer3); // delete(2, 5-1) // (start, end-1)buffer3.deleteCharAt(2);
System.out.println("삭제 후의 buffer3 : "+buffer3+"\\n"); //