일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Compute Science
- 모두를 위한 컴퓨터 과학
- exception
- CS50
- CS 기초지식
- ERD
- til
- edwith
- Java Programming
- WebProgramming
- 삼성청년SW아카데미
- 알고리즘
- 예외처리
- 상속
- 이진법
- SSAFY 9기
- CS 기초
- 객체지향
- w3schools
- 모두를 위한 컴퓨터 과학(CS50)
- SW
- ssafy
- 데이터베이스 모델링
- 기초프로그래밍
- 면접을 위한 CS 전공지식 노트
- 관계형 데이터베이스
- Computer Science
- java
- 부스트코스
- CS기초지식
- Today
- Total
Joslynn의 하루
대용량 웹서비스를 위한 MSA Full-Stack 개발자 양성 과정 -14일차 노트 필기_자료구조 (컬렉션 프레임워크) List, ArrayList _220804 본문
대용량 웹서비스를 위한 MSA Full-Stack 개발자 양성 과정 -14일차 노트 필기_자료구조 (컬렉션 프레임워크) List, ArrayList _220804
Joslynn 2022. 8. 4. 18:04자료 구조
: data를 상황별 저장 방법을 다르게 함;
: 데이터를 저장하는 방식에 따른 다양한 객체를 제공;
: 데이터를 조작(추가, 검색, 삭제, 수정)할 수 있는 메소드를 풍부하게 제공
: 객체만 저장 가능하고, 다양한 데이터 타입 저장할 수 있다. ↔ 배열: 한가지 타입만 가능;
그러나 저장된 데이터를 꺼낼때는 Object 타입으로만 받을 수 있다. (자료 구조의 단점)
저장된 데이터를 꺼낼 때 Object로 받아서 instanceOf 연산자로 타입 확인 및 다운캐스팅 필요;
→ 개선된 문법 Class ArrayList<E> /*제너릭 타입*/: 한가지 타입으로 저장해서 저장 및 꺼낼 때 모두 캐스팅 없이 한가지 타입으로 사용 가능;
→AutoBoxing && AutoUnBoxing 일어남
Java Collection
: 자바의 컬렉션은 모두 인터페이스이다. // implements(구현) 시, 구현 객체에서 모든 메소드 오버라이딩 필요;
: 어마어마하게 많은 메소드 오버라이딩이 필요 → 따라서 자바에서는 이미 구현 객체들을 제공;
1) List
: 순서가 있고 중복 가능(같은 객체 저장 가능)
** 미리 구현해놓은 다양한 구현객체: ArrList, Vector, LinkedList
: 리스트를 사용한다는 의미는 사실 구현객체를 생성해서 사용하는 것;
2) Set
: 순서 없고 중복 안 됨
: 구현 객체: HashSet, TreeSert /*요소 정렬*/
3) Map: key와 value 한 쌍(EntrySet)으로 이루어져 key는 중복 안되고, value는 중복 가능
구현 객체: Hashtable, HashMap, TreeMap
**중요: 자료 구조는 데이터를 저장할 때, 객체만 저장 가능하다. == 기본형 저장 불가하다.
ArrayList
: 가변 크기 배열을 구현한 클래스
: Vetor와 거의 유사하나 자동으로 스레드 동기화를 지원하지 않는다;
ArrayList 예제1)
import java.util.ArrayList;
class Test {
int a = 0;
public String toString(){
return "Test";
}
}
class ArrayListExam extends ArrayList<Object>{
//전역 Variable
Object obj;
int i;
//Constractor
public ArrayListExam(){
//초기 배열 길이 5개 생성
super(5);
}
/*addInt:인수로 받은 정수를 객체로 만들어 list에 추가.*/
public void addInt(int i) {
super.add(i); //정수 i - AutoBoxing
}
/*addFloat: 인수로 받은 실수를 객체로 만들어 list에 추가.*/
public void addFloat(float f) {
this.add(5.5F);
}
/*addString: 인수로 받은 String 을 list에 추가.*/
public void addString(String str) {
String stringValue = new String(str);
add(stringValue);
}
public void addTest(Test t) {
add(t);
}
/*printList : 정수형 전역변수에 현재 list에 들어있는 객체의 개수 입력한 후 전역변수 출력.
List에 저장된 각 객체를 맴버변수에 저장한후 출력*/
public void printList() {
this.i = list.size();
System.out.println("저장된 객체 갯수:"+i);
for(int index=0; index<i; index++) {
this.obj = super.get(index); // 다양한 객체들이 저장되어있어 Object 타입으로만 받을 수 있음;
System.out.println("저장된 객체: "+obj);
// 객체가 println 만나면서 자동으로 toString 메소드 실행(toString 메소드 오버라이딩 되어있음)
}
//위의 for문을 개선된 for로 변경
System.out.println("----------------------");
for(Object obj:this) { // this는 단독 사용 가능, super는 불가 // 상속을 받았을 때 this로 super 가르킬 수 있음;
System.out.println("저장된 객체: "+obj);
}
// 효율적인 code 구성 가능
}
public static void main(String args[]){
ArrayListExam list = new ArrayListExam();
String s = new String("newString");
list.addInt(5);
list.addFloat(5.5F);
list.addString(s);
list.addTest(new Test());
list.printList();
}
}
/*실행결과
list에 들어있는 객체의 총 개수는=3
5
5.5
newString
Normal Termination
출력 완료 (0초 경과).
*/
ArrayList VS LinkedArray 예제2)
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;
// ArrayList 실행 시간
startTime = System.nanoTime(); // 억만분의 1초
for (int i=0; i<10000; i++) {
list1.add(0, String.valueOf(i));
}
endTime = System.nanoTime();
System.out.println("ArrayList 걸린 시간: "+(endTime-startTime)+"ns");
// LinkedList 실행 시간
startTime = System.nanoTime();
for (int i = 0; i < 10000; i++) {
list2.add(0, String.valueOf(i));
}
endTime = System.nanoTime();
System.out.println("LinkedList 걸린 시간: "+(endTime-startTime)+"ns");
}
실행값: