반응형
콜렉션(Collection)
- 여러 원소를 담을 수 있는 자료구조
- List, Set, Queue로 크게 3가지 인터페이스로 분류.
- Map은 collection 인터페이스를 상속받고 있지 않지만 collection으로 분류 한다.
[배열과의 차이점] 배열은 정적으로 메모리 할당. 콜랙션은 동적으로 메모리 할당.
콜렉션의 종류
List
- 순서가 있는 자료구조
ArrayList
- 배열을 기반으로 구현한다.
- 논리적, 물리적 저장 순서가 일치 한다.
- 삭제, 삽입 시 자료의 이동이 필요하므로 시간이 더 걸린다.
- thread safe 하지 않는다.(동기화X) ⇒ 동시에 여러 스레가 접근 가능하다.
package D04;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
public class ArrayListEx {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("java");
list.add("JDBC");
list.add("Servlet/jsp");
list.add("Spring");
list.add(3, "react");
int n = list.size();
String str = list.get(1);
for(int i=0; i<list.size(); i++) {
System.out.println(list.get(i));
}
System.out.println("-------------------");
list.remove(2);
for(int i=0; i<list.size(); i++) {
System.out.println(list.get(i));
}
}
}
LinkedList
- 자료를 노드의 포인터 부분을 이용해 서로 연결시킨다.
- 일반 배열보다 데이터 검색 속도가 느리다.
- 자료의 삽입, 삭제시 용이하다
- 연결을 위한 포인터 사용으로 저장 공간이 더필요하다.
- 인덱스 대신 현재 위치의 이전, 다음 위치를 기억한다.
Vector
- 배열과 마찬가지로 인덱스를 이용해 배열에 엑세스가 가능하다.
- thread safe 한다.(동기화O) ⇒ 한번에 하나의 스레드만 접근 가능하다.
package D04;
import java.util.Vector;
public class VectorEx {
public static void main(String[] args) {
Vector<Integer> v = new Vector<Integer>(); // 정수 값만 다루는 백터 생성
v.add(5);
v.add(4);
v.add(-1);
for(int i=0; i<v.size(); i++) { // 모든 요소의 정수 출력
int n = v.get(i);
System.out.println(n);
}
// 백터 중간에 삽입하기
v.add(2,100); // 4와 -1 사이에 정수 100삽입
for(int i=0; i<v.size(); i++) { // 모든 요소의 정수 출력
int n = v.get(i);
System.out.println(n);
}
System.out.println("백터 내의 요소 객체수 : " + v.size()); // 백터의 크기 3
System.out.println("백터의 현재 용량 : "+ v.capacity()); // 백터의 용량 10
//백터 속의 모든 정수 더하기
int sum = 0;
for(int i=0; i<v.size(); i++) {
int n = v.elementAt(i);
sum += n;
}
System.out.println("백터에 있는 정수 합 : "+sum);
}
}
Vector의 예제1
package Open;
import java.util.*;
public class Open {
Vector<Word> v = new Vector<>();
Scanner sc = new Scanner(System.in);
final int MAX_CHOICE = 4; //1~4까지 선택할수있게
int[] question = new int[MAX_CHOICE]; // 내가 입력할 숫자
Random rand = new Random(); // 랜덤 숫자 담는곳?
public void game() {
while(true) {
setChoice();
int A = rand.nextInt(4);
int Aindex = question[A];
System.out.println(v.get(Aindex).getEng()+"?");
for(int i=0; i<question.length; i++) {
System.out.print("(" + (i+1) + ")");
System.out.print(v.get(question[i]).getKor()+ " ");
}
System.out.println(">>");
int choice = sc.nextInt();
if(choice == -1) {
System.out.println("종료합니다.");
break;
}else if(choice-1 == A) {
System.out.println("정답!");
System.out.println("======================");
}else {
System.out.println("오답!");
System.out.println("======================");
}
}
}
// Vector<Word> v = new Vector<>();
// Scanner sc = new Scanner(System.in);
// final int MAX_CHOICE = 4; //1~4까지 선택할수있게
// int[] question = new int[MAX_CHOICE]; // 내가 입력할 숫자
// Random rand = new Random(); // 랜덤 숫자 담는곳?
public void setChoice() {
for(int i=0; i<MAX_CHOICE; i++) { //i가 1~4 이면
question[i] = rand.nextInt(v.size()); //질문값에
for(int j=0; j<i; j++) {
if(question[i] == question[j]) {
i--;
continue;
}
}
}
}
public Open() {
create();
System.out.println("\\"명품영어\\" 의 단어 테스트를 시작합니다. -1을 입력하면 종료합니다.");
System.out.printf("현재 %s 개의 단어가 들어있습니다", v.size() );
System.out.println("======================");
game();
}
public void create() {
v.add(new Word("love", "사랑"));
v.add(new Word("animal", "동물"));
v.add(new Word("painting", "그림"));
v.add(new Word("bear", "곰"));
v.add(new Word("eye", "눈"));
v.add(new Word("picture", "사진"));
v.add(new Word("society", "사회"));
v.add(new Word("human", "사람"));
}
public static void main(String[] args) {
new Open();
}
}
package Open;
public class Word {
private String eng, kor;
public Word(String eng, String kor) {
this.eng = eng;
this.kor = kor;
}
public String getEng() {
return eng;
}
public void setEng(String eng) {
this.eng = eng;
}
public String getKor() {
return kor;
}
public void setKor(String kor) {
this.kor = kor;
}
@Override
public String toString() {
return "Word [eng=" + eng + ", kor=" + kor + "]";
}
}
반응형
'JAVA' 카테고리의 다른 글
[JAVA] Collection(Queue) (0) | 2023.07.18 |
---|---|
[JAVA] Collection(Set) (0) | 2023.07.18 |
[JAVA] 박싱(Boxing) & 언박싱(UnBoxing) (0) | 2023.07.18 |
[JAVA] Wrapper class (0) | 2023.07.18 |
[JAVA] 중첩 클래스, 익명객체 (0) | 2023.07.18 |