TODO: 컬렉션 프레임워크 : ArrayList ( * )
//대표적 종류 : ArrayList, LinkedList , Vector
// List 는 배열을 향상시킨 자료구조
// 1) 컬렉션 프레임워크 뜻 : 자바의 자료구조와 같음,
// => 자료구조(data structure) : 데이터를 사용하기 쉽게 미리 만들어 놓은 코딩
// => ArrayList : 배열을 사용하기 쉽게 만들어 놓은 객체
// 장점 : 1) 함수를 이용해서 간편해서 조작 가능
// 2) 고전적 배열 : 방을 미리 예약을 해놓아야함 => new int[6];
// => ArrayList 는 추가시 자동으로 방을 만들어 줌
// String[] value = {"Java", "Sql", "Spring"}; // 고전적인 배열
// System.out.println(value[0]);
// 사용법 : 1) List<배열자료형> 변수 = new ArrayList<>();
// 추가하기 : 2) : 변수.add(값);
List list = new ArrayList<>();
list.add("Java");
list.add("Sql");
list.add("Spring");
// 출력하기 : 3) System.out.println(변수); // 배열 값 전체 출력
System.out.println(list); // [Java, Sql, Spring]
// 가져오기 : 4) 인덱스번호 : 0 : 변수.get(방번호)
System.out.println(list.get(0)); // 0번 값 출력 : Java
// 수정하기 : 5) 0번방 값 수정 : Java -> 자바 : 변수.set(방번호, 값);
list.set(0, "자바");
System.out.println(list.get(0)); // 자바
// 삭제하기 : 6) 0번방 삭제 : 변수.remove(방번호)
list.remove(0); // 0번 값 삭제
System.out.println(list); // 전체 출력 : [Sql, Spring];
//// 간단연습 : JSP 값을 list 에 추가하시고, 전체 출력하세요
list.add("JSP");
System.out.println(list);
//배열의 길이(크기, 개수) : 변수.size();
for (int i = 0; i < 3; i++) {
System.out.println(list.get(i));
}
// TODO: List - 자식클래스 , Vector (멀티쓰레드 환경 : 실무에 사용빈도 거의 없음)
// => 쓰레드 : 프로그램 안에 독립적으로 실행되는 것 (여러개가 있을 수 있음)
List list = new Vector<>();
// 객체 추가(생성) : ArrayList, Vector - .add(값)
// 사용법 : 객체명 변수 = new 생성자함수();
list.add(new Board("제목", "내용", "작성자")); // 객체배열 (1건(1행))
list.add(new Board("제목2", "내용2", "작성자2")); // 객체배열 (1건(2행))
list.add(new Board("제목3", "내용3", "작성자3")); // 객체배열 (1건(3행))
list.add(new Board("제목4", "내용4", "작성자4")); // 객체배열 (1건(4행))
list.add(new Board("제목5", "내용5", "작성자5")); // 객체배열 (1건(5행))
System.out.println(list); // 배열 전체 출력
// 삭제 : .remove(인덱스번호(방번호)), 2, 3 삭제
// [제목, 제목2, 제목3, 제목4, 제목5]
// List 특징 : 중간에 삭제등의 이유로 공간이 생기면 뒤에 있는 값이 자동으로 땡겨짐
list.remove(2); // 방번호 2번 삭제 [제목, 제목2, 제목4, 제목5]
list.remove(3); // 방번호 3번 삭제 [제목, 제목2, 제목4]
System.out.println(list); // 다시 출력
}
}
// TODO: List 자식 : LinkedList (*)
// 왜 사용? 속도차이
// 구분 l 순차적 추가/삭제 l 중간에 추가/삭제
//어레이리스트 : 빠름 느림
// 링크드리스트 : 느림 빠름
List list = new ArrayList<>();
List list2 = new LinkedList<>();
//실행 속도 측정: 1) 시작 시간 측정
// 2) 실행 : 반복문
// 3) 종료 시간 측정 : 종료시간 - 시작시간 = 실행시간
// long start = System.nanoTime();
//
// // 1)ArrayList 안에 중간에 값을 추가
//
// for (int i = 0; i < 10000; i++) {
// list.add(0, i+""); // 중간에 값 추가
// }
//
// long end = System.nanoTime();
// System.out.println("ArrayList :" + (end - start));
//
//
long start = System.nanoTime();
// 1)ArrayList 안에 중간에 값을 추가
long start2 = System.nanoTime();
for (int i = 0; i < 10000; i++) {
list2.add(0, i+""); // 중간에 값 추가
}
long end2 = System.nanoTime();
System.out.println("LinkedList :" + (end2 - start2));
// TODO: 1) Wrapper 클래스 / 박싱/언박싱 예제
// 기본 자료형 : int(정수), double(실수), boolean(참/거짓) long(정수)...
// => 객체 자료형 : Integer(정수), Double(실수), Boolean(참/거짓),Long(정수)
// 기본자료형 대신 객체자료형을 사용해야함
// 예) List<객체자료형> 변수 = new ArrayList<>();
Integer a = 100; // 정수 -> 객체자료형 넣음 : 박싱(Boxing)
System.out.println(a); // 100 (정상)
int b = a; // 객체자료형 -> 기본자료형(정수) : 언박싱(UnBoxing)
System.out.println(b); // 100 (정상)
}
}
// TODO: 복습 - 1) List : 향상된 배열, 인터페이스 (자식 : ArrayList, 등)
// 2) Set : 집합을 구현한 배열, 인터페이스(자식 : HashSet 등)
// 집합 특징 : 1) 순서가 없음(인덱스번호가 없음)
// 2) 중복된 데이터가 안들어감 : {a,b,c,c,c} => {a,b,c}
Set set = new HashSet<>();
// TODO: 집합에 추가 : .add(값)
// 활용 : 중복제거용 사용 - 예) 배열의 결과에서 중복을 제거해서 출력?
set.add("Java");
set.add("Java");
set.add("Sql");
set.add("Sql");
set.add("Spring");
System.out.println(set); // 전체 출력 : [Java, Sql, Spring]
// TODO: 집합의 크기(길이) : .size()
System.out.println(set.size()); // 3
// TODO: 집합의 값 삭제
set.remove("Java");
System.out.println(set); // 전체 출력 []
// TODO: HashTable 알아보기(참고: Map 자료구조의 자식클래스)
// 활용 : 멀티쓰레드 환경에서 사용 (쓰레드 : 프로그램 안에서 독립적으로 실행되는것)
Map<String, String> map = new Hashtable<>();
// 값 추가 : .put(키, 값)
map.put("spring", "봄");
map.put("summer", "여름");
System.out.println(map); // 전체 출력
// TODO: Map 에 Student 객체 넣어서 출력하기
Map<String, Student> map = new HashMap<>();
// 객체 넣기 : .put(키, 값(객체생성));
map.put("홍길동", new Student(1, "홍길동"));
map.put("장길산", new Student(2, "장길산"));
// 출력
System.out.println(map); // 전체 출력