List 컬렉션
- 객체를 인덱스로 관리하기 때문에 객체를 저장하면 인덱스가 부여되고 인덱스로 객체를 검색, 삭제할 수 있는 기능을 제공
출처, 이것이 자바다
ArrayList
- ArrayList에 객체를 추가하면 내부 배열에 객체가 저장되고 제한 없이 객체를 추가할 수 있음
출처, 이것이 자바다
- 객체의 번지를 저장. 동일한 객체를 중복 저장 시 동일한 번지가 저장. null 저장 가능
출처, 이것이 자바다
- ArrayList 컬렉션에 객체를 추가 시 인덱스 0번부터 차례대로 저장
- 특정 인덱스의 객체를 제거하거나 삽입하면 전체가 앞/뒤로 1씩 당겨지거나 밀림
- 빈번한 객체 삭제와 삽입이 일어나는 곳에선 바람직하지 않음
출처, 이것이 자바다
package ch15.sec02.exam01;
import java.util.ArrayList;
/*
컬렉션 기억장소
- 특징? 데이터 추가시 기억장소를 동적으로 생성한다.
모든 데이터(타입)을 저장가능 -> 제네릭타입(타입을 지정)
자료구조의 특징을 가지고 있음
객체저장목적
*/
public class CollectionBasic {
public static void main(String[] args) {
//배열과 컬렉션 비교.
//1)배열 : 크기가 고정. 동일한 타입만 저장가능.
int[] arr = new int[3];
arr[0] = 10;
arr[1] = 20;
arr[2] = 30;
// arr[3] = 40; //배열선언시 크기가 고정되어 있으므로, 기억장소를 추가 해서 사용할수가 없다.
//컬렉션 ArrayList클래스? 컬렉션 형태의 기억장소를 생성
ArrayList al = new ArrayList(); //힙영역의 기억장소 타입 Object
// al.add(1); //컬렉션 기억장소에 데이터를 추가저장.
// al.add("홍길동");
// al.add(10.5);
// al.add(true);
//int형 데이터만 저장
al.add(10);
al.add(20);
al.add(30);
ArrayList<Integer> al2 = new ArrayList<Integer>(); //힙영역의 기억장소 타입 Integer
al2.add(10);
al2.add(20);
al2.add(30);
ArrayList<Double> al3 = new ArrayList<Double>();
al3.add(10.5);
}
}
package ch15.sec02.exam01;
//게시판클래스
public class Board {
private String subject;
private String content;
private String writer;
public Board(String subject, String content, String writer) {
this.subject = subject;
this.content = content;
this.writer = writer;
}
public String getSubject() { return subject; }
public void setSubject(String subject) { this.subject = subject;}
public String getContent() { return content; }
public void setContent(String content) { this.content = content; }
public String getWriter() { return writer; }
public void setWriter(String writer) { this.writer = writer; }
}
package ch15.sec02.exam01;
import java.util.ArrayList;
import java.util.List;
/*
List인터페이스 : 순서유지(인덱스형태), 중복 저장 가능
- ArrayList클래스
*/
public class ArrayListExample {
public static void main(String[] args) {
//부모인터페이스 변수 = 구현객체;
List<Board> list = new ArrayList<Board>();
//객체추가
list.add(new Board("제목1", "내용1", "글쓴이1")); //인덱스 0
list.add(new Board("제목2", "내용2", "글쓴이2")); //인덱스 1
list.add(new Board("제목3", "내용3", "글쓴이3")); //인덱스 2
list.add(new Board("제목4", "내용4", "글쓴이4")); //인덱스 3
list.add(new Board("제목5", "내용5", "글쓴이5")); //인덱스 4
//저장된 객체 수 얻기
int size = list.size();
System.out.println("총 객체 수: " + size);
System.out.println();
//인덱스를 통하여 특정 객체 참조하기
Board board = list.get(2); //Board board = new Board("제목3", "내용3", "글쓴이3")
System.out.println(board.getSubject() + "\t" + board.getContent() +
"\t" + board.getWriter());
board = list.get(4);
System.out.println(board.getSubject() + "\t" + board.getContent() +
"\t" + board.getWriter());
System.out.println();
//모든 객체를 하나씩 가져오기 i=0, 1, 2, 3, 4
for(int i=0; i<list.size(); i++) {
Board b = list.get(i);
System.out.println(b.getSubject() + "\t" + b.getContent() + "\t" + b.getWriter());
}
System.out.println();
//객체 삭제
list.remove(2); //3번째 객체삭제. new Board("제목3", "내용3", "글쓴이3")
list.remove(2); //3번째 객체삭제. new Board("제목4", "내용4", "글쓴이4")
//향상된 for문
for(Board b : list) {
System.out.println(b.getSubject() + "\t" + b.getContent() + "\t" + b.getWriter());
}
}
}
package ch15.sec02.exam01;
import java.util.ArrayList;
import java.util.List;
/*
List인터페이스 : 순서유지(인덱스형태), 중복 저장 가능
- ArrayList클래스
*/
public class ArrayListExample2 {
public static void main(String[] args) {
//부모인터페이스 변수 = 구현객체;
List<Board> list = new ArrayList<Board>();
Board brd = new Board("제목1", "내용1", "글쓴이1");
//객체추가. 중복저장 가능.
list.add(brd); //인덱스 0
list.add(brd); //인덱스 1
list.add(new Board("제목3", "내용3", "글쓴이3")); //인덱스 2
list.add(new Board("제목4", "내용4", "글쓴이4")); //인덱스 3
list.add(new Board("제목5", "내용5", "글쓴이5")); //인덱스 4
//저장된 객체 수 얻기
int size = list.size();
System.out.println("총 객체 수: " + size);
System.out.println();
//인덱스를 통하여 특정 객체 참조하기
Board board = list.get(2); //Board board = new Board("제목3", "내용3", "글쓴이3")
System.out.println(board.getSubject() + "\t" + board.getContent() +
"\t" + board.getWriter());
board = list.get(4);
System.out.println(board.getSubject() + "\t" + board.getContent() +
"\t" + board.getWriter());
System.out.println();
//모든 객체를 하나씩 가져오기 i=0, 1, 2, 3, 4
for(int i=0; i<list.size(); i++) {
Board b = list.get(i);
System.out.println(b.getSubject() + "\t" + b.getContent() + "\t" + b.getWriter());
}
System.out.println();
//객체 삭제
list.remove(2); //3번째 객체삭제. new Board("제목3", "내용3", "글쓴이3")
list.remove(2); //3번째 객체삭제. new Board("제목4", "내용4", "글쓴이4")
//향상된 for문
for(Board b : list) {
System.out.println(b.getSubject() + "\t" + b.getContent() + "\t" + b.getWriter());
}
}
}
Vector
- 동기화된 메소드로 구성되어 있어 멀티 스레드가 동시에 Vector() 메소드를 실행할 수 없음
- 멀티 스레드 환경에서는 안전하게 객체를 추가 또는 삭제할 수 있음
출처, 이것이 자바다
출처, 이것이 자바다
package ch15.sec02.exam02;
//게시판클래스
public class Board {
private String subject;
private String content;
private String writer;
public Board(String subject, String content, String writer) {
this.subject = subject;
this.content = content;
this.writer = writer;
}
public String getSubject() { return subject; }
public void setSubject(String subject) { this.subject = subject;}
public String getContent() { return content; }
public void setContent(String content) { this.content = content; }
public String getWriter() { return writer; }
public void setWriter(String writer) { this.writer = writer; }
}
package ch15.sec02.exam02;
/*
List인터페이스 : 순서유지(인덱스형태), 중복 저장 가능
- Vector클래스 : 스레드 사용
*/
import java.util.List;
import java.util.Vector;
public class VectorExample {
public static void main(String[] args) {
//부모인터페이스 변수 = 구현객체;
List<Board> list = new Vector<Board>();
list.add(new Board("제목1", "내용1", "글쓴이1"));
list.add(new Board("제목2", "내용2", "글쓴이2"));
list.add(new Board("제목3", "내용3", "글쓴이3"));
list.add(new Board("제목4", "내용4", "글쓴이4")); //인덱스3
list.add(new Board("제목5", "내용5", "글쓴이5"));
for(int i=0; i<list.size(); i++) {
Board board = list.get(i);
System.out.println(board.getSubject() + "\t" + board.getContent() +
"\t" + board.getWriter());
}
System.out.println();
//인덱스3 삽입
list.add(3, new Board("객체3_2", "내용3_2", "글쓴이3_2"));
System.out.println();
for(Board b : list) {
System.out.println(b.getSubject() + "\t" + b.getContent() +
"\t" + b.getWriter());
}
}
}
LinkedList
- 인접 객체를 체인처럼 연결해서 관리. 객체 삭제와 삽입이 빈번한 곳에서 ArrayList보다 유리
출처, 이것이 자바다
출처, 이것이 자바다
출처, 이것이 자바다
package ch15.sec02.exam03;
/*
* ArrayList 와 LinkedList 클래스의 성능비교.
*/
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class LinkedListExample {
public static void main(String[] args) {
//부모인터페이스 변수 = 구현객체;
List<String> list1 = new ArrayList<String>(); // <제네릭 : 참조타입만 가능>
List<String> list2 = new LinkedList<String>();
//작업시작시간, 끝시간에 변수선언
long startTime;
long endTime;
startTime = System.nanoTime(); //1970년 1월1일 0시부터
for(int i=0; i<10000; i++) {
list1.add(0, String.valueOf(i)); //첫번째 요소에 삽입하여, 기존것은 인덱스가 1씩 변경이 발생한다.
}
endTime = System.nanoTime();
System.out.printf("%-17s %8d ns \n", "ArrayList 걸린 시간: ", (endTime-startTime)); // %-17s %8d ns \n -> s : String, - : 왼쪽정렬
startTime = System.nanoTime(); //1970년 1월1일 0시부터
for(int i=0; i<10000; i++) {
list2.add(0, String.valueOf(i)); //첫번째 요소에 삽입하여, 기존것은 인덱스가 1씩 변경이 발생한다.
}
endTime = System.nanoTime();
System.out.printf("%-17s %8d ns \n", "LinkedList 걸린 시간: ", (endTime-startTime)); // %-17s %8d ns \n -> s : String, - : 왼쪽정렬
}
}
'라이브러리 활용 - 컬렉션 자료구조' 카테고리의 다른 글
LIFO와 FIFO 컬렉션 (0) | 2023.02.01 |
---|---|
검색 기능을 강화시킨 컬렉션 (0) | 2023.02.01 |
Map 컬렉션 (0) | 2023.02.01 |
Set 컬렉션 (0) | 2023.02.01 |
컬렉션 프레임워크 (0) | 2023.01.31 |