1. JAVA/3). 자바_개념

자바_개념_Day_32

구이제이 2024. 2. 15. 17:39

컬렉션프레임 API

 

  • collection
  • List

 

 

collection(인터페이스)을 상속받고 있는 List(인터페이스)

 

<E>

E: 요소로 받겟다.





부모클래스 collection, Iterable




collection framework : 자료구조와 관련있습니다.

자료구조 : 데이터를 어떻게 다룰 것인가라는 것입니다.

 

API : 라이브러리(미리틀을 만들다)



collection

인터페이스 set,list, map

 

#

hashset : hash코드와 관련된다 (hash는 중복을 체크한다라는 의미가있다.)

treeset : 정렬이 되는 것들

 

#

map은 list와 set과 다르게

map(key와 value로 처리) - ex) ip와password



#

arraylist와 vector의 차이점 

멀티쓰레드환경 : vector (쓰게되면 정확하게 처리.)

단일쓰레드환경 : arraylist (쓰게되면 정확하게 처리.)

 

hashMap

hash

 

#

list와 set의 차이점

1.set은 복주머니 같은거

2.list은 ex) 은행대기번호, 영화표 줄선다거나, 

3.리스트는 순서가 있다. 중복가능하다.(순서있다는것은 인덱스가 있다.)

4.set은 순서가없다. 단, 똑같은 것 들어갈떄 모른다. set은 중복을 허용하지 않는다.

중복되어있느냐 라는 것이 구분하는 것이 필요하다.

중복데이터라는 것을 따지는 것

hascode가 같은가 따진다 > equals >>> true >>> 같은 객체

hascode가 다르다 > equals >>> false >>> 다른객체




#

map과 table






collection - 자료구조 (같은 자료를 불러오고 저장한다.)

배열 - 동일한 자료를 불러오고 저장하는 것

 

배열의 단점

1.같은 자료형만 담을 수가 있다. 

2.배열은 공간이 한번 정해지면, 수정 할 수없다.(추가삭제가 어렵다)

(공간이 확보가되면, 또 넣을수없다.)

 

변수의 단점을 보완한 것이 배열

그래서 배열은 

 

배열(같은 자료형,

구조체(들어가는것이 한계

클래스(필드,생성자,메소드까지 담을수있는 자료형)

 

list

같은 자료형을 담고 크기를 자유자재로 정하자, 나온게 list








< Collections Framework >

1. 컬렉션 

- 객체의 저장

   프레임워크 : 사용 방법을 정해 놓은 라이브러리

2. Collection Framework의 인터페이스

- java.util 패키지 안에 위치

1) List : 

- 순서가 있는 데이터 집합

- 데이터 중복 가능

- 같은 자료형 저장 가능

- 저장 공간 동적으로 처리

- 객체를 인덱스로 관리하기 때문에 객체를 저장하면 인덱스가 부여되고

  인덱스를 이용해서 객체를 추가, 삽입, 삭제를 할 수 있음

- ArrayList(단일쓰레드환경) : 삽입/삭제는 LinkedList에 비해 느리나

검색 속도는 빠름(인덱스로 검색하기 때문)

- LinkedList : 삽입/삭제는 ArrayList에 비해 빠르나, 검색 속도는 느림

- Stack : Vector 클래스를 상속 받음

- Vector(멀티쓰레드 환경에 사용) : ArrayList와 동일한 내부 구조 가짐

동기화된 메소드로 구성되어 있기 때문에 멀티 쓰레드가 동시에 

Vector() 메소드를 실행할 수 없음.

따라서 멀티 쓰레드 환경에서는 안전하게 객체를 추가 또는 삭제할 수 있음

 

    비교) 배열 - 한 번 저장 공간을 확보하면 다시 변경 불가

                    List - 저장공간이  동적으로 확보

2) Set : 순서가 없는 데이터 집합

중복을 허용하지 않음

HashSet, TreeSet

3) Map : 키(Key)와 값(value)의 쌍으로 이루어진

데이터 집합

순서가 없음

Key는 중복 허용하지 않음

value 중복 허용

HashMap, TreeMap, Hashtable, Properties ...

 

3. List 컬렉션에 사용하는 메소드

boolean add(E element) : 주어진 객체를 맨 끝에 추가

void add(int index, E element) : 주어진 인덱스에 객체를 추가

set(int index, E element) : 주어진 인덱스에 저장된 객체를 주어진 객체로 변경

E get(int index) : 주어진 인덱스에 저장된 객체를 리턴(반환)

int size() : 저장되어 있는 전체 객체 수

비교) 배열 - 배열명.length,   문자열 - 문자열.length()

boolean isEmpty() : 컬렉션이 비어 있는지 조사

void clear() : 저장된 모든 객체를 삭제

E remove(int index) : 주어진 인덱스에 저장된 객체를 삭제

boolean remove(Object o) : 주어진  객체를 삭제

 

4. Set 컬렉션

- 순서가 없으며, 중복되지 않는 객체를 저장하는 자료 구조 지원

- 중복을 배제

- 인덱스가 없어 저장 순서 무시

- Set 컬렉션은 hashCode()와 equals를 통해서 같은 객체인지 확인 필요

  같고        true

hashCode() -----------> equals() ----------------> 동일객체

  다르면                 false

다른 객체   다른 객체



5. Map 컬렉션

- 주로 검색용 자료구조

- Key와 value 쌍(Map.Entry)으로 구성된 객체를 저장하는 자료 구조

- Key는 중복 저장 불가

- value는 중복 가능

- 인덱스가 없으며 Key와 값만 있음

- 구현 클래스 : HashMap, HashTable, TreeMap

 

V put(K key, V value) : 입력 매개변수 키, 값을 Map에 추가

boolean containsKey(Object Key) : 주어진 키가 있는지 여부 

boolean containsValue(Object vlue) : 주어진 값이 있는지 여부

 

Set<Map.Entry<K,V>> entrySet() : 키와 값의 쌍으로 구성된 모든 Map.Entry 객체을 Set에 담아서 리턴

 

V get(Object key) : 주어진 키가 있는 값을 리턴

  boolean isEmpty() : 컬렉션이 비어 있는지 여부

Set<K> keyset() : 모든 키를 Set객체에 담아서 리턴

int size() : 저장된 키의 총 수

 

나머진 교재 참조



6. Stack

- LIFO(Last In First Out) : 가장 마지막에 저장한 데이터가 가장 먼저 꺼내는 것

- 팬케잌, 접시쌓아 놓고 사용하기....

- 수식계산, 수식괄호검사, 워드프로세서 undo/redo, 웹브라우저의 뒤로/앞으로

- ArrayList 

- push(저장), pop(추출)

 

boolean empty() : Stack이 비어 있는지 알려주기

Object peek() : Stack의 맨 위에 저장된 객체를 반환

pop()스택에서 자료를 꺼내는 것이라면

peek()은 객체를 꺼내는 것이 아니라 확인만

Object pop() : Stack에서 맨 위의 저장된 객체를 꺼낸다

Object push(Object item) : Stack에 객체를 저장

그 외에는 책을 참조

 

7. Queue

- FIFO(First In First Out) : 먼저 저장된 데이터가 가장 먼저 처리 

- 은행 대기표, 최근 사용문서, 인쇄작업 대기 목록, 버퍼(buffer)

- LinkedList

 

- offer(저장), poll(데이터 추출)

boolean add(Object o) : 지정된 객체를 Queue에 추가

성공하면 true를 반환

Objcet remove() : Queue에서 객체를 꺼내 반환, 비어 있으면 예외 발생

Object element() : 삭제없이 요소를 읽어옴

Object offer(Object o) : Queue에 객체를 저장

Object poll() : Queue에서 객체를 꺼내서 반환, 비어 있으면 null 반환

Object peek() : 삭제없이 요소를 읽어 옴, 비어 있으면 null 반환















ArrayList : 공간의 자유성

배열 : 공간의 비자유성




◐ArrayList  사용법 1)

 

public class ArrayListExam01 {

public static void main(String[] args) {

//객체를 만들고 주소를 담는다.

 

//방법1)

//List<String> arrayList = new ArrayList<String>();

//자식은 부모가 될수 있다.(다형성) ArrayList자식 List부모

//방법2)

ArrayList<String> arrayList = new ArrayList<String>();

// String[] arrStr = new String[5];

 

//자료를 추가 add(데이터) - 자료형이 일치해야한다.

arrayList.add("홍길동");// -- String형

//arrayList.add(3); -- 정수형

arrayList.add("김자바");

arrayList.add("이강산");

arrayList.add("한바다");

 

//저장된 자료의 개수를 확인

int size = arrayList.size(); //arrStr.length,

System.out.println("자료의 크기 : " + size);

System.out.println("---------------------");

 

//자료의 내용을 출력

for(int i = 0 ; i < arrayList.size(); i++) {

System.out.println(arrayList.get(i)); // 배열 - arrStr[i]

}

 

//향상된 for문

System.out.println("---------------------------------");

for(String str : arrayList) {

System.out.println(str);

}

 

System.out.println();

//위치를 정해 추가

arrayList.add(1, "수박");

System.out.println("자료의 크기 : " + arrayList.size());

 

//향산된 for문

System.out.println("-----------------------------------");

for(String str : arrayList) {

System.out.println(str);

}

 

//일반 for문

System.out.println("----------------------------");

for(int i = 0 ; i < arrayList.size(); i++) {

System.out.println(arrayList.get(i)); //배열 -arrStr[i]

}

System.out.println();

 

 

//꺼내오는 방식 1) 향상된 for문

//자료를 삭제, 특정 위치의 자료를 삭제

arrayList.remove(2); // 2번 인덱스 삭제

System.out.println("자료의 크기 : " + arrayList.size());

System.out.println("----------------------------");

for(String str : arrayList) {

System.out.println(str);

}

 

//꺼내오는 방식 2) 일반 for문

System.out.println("----------------------------");

for(int i = 0 ; i < arrayList.size(); i++) {

System.out.println(arrayList.get(i)); //배열 - arrStr[i]

}

 

//자료를 삭제

arrayList.clear();

System.out.println("자료의 크기 : " + arrayList.size());

 

//자료 다시 추가

arrayList.add("홍길동");

arrayList.add("김자바");

arrayList.add("이강산");

arrayList.add("한바다");

 

System.out.println("----------------------------");

for(String str : arrayList) {

System.out.println(str);

}

 

//꺼내오는 방식 3) Iterator()

//next는 뒤로 못돌아간다.

System.out.println("----------------------------");

// iterator() 메소드 - 반복자

// hasNext() : 다음 원소의 존재 여부

// next() : 다음 원소를 반환

System.out.println("Iterator");

System.out.println();

Iterator<String> iter = arrayList.iterator();

while(iter.hasNext()) {

System.out.println(iter.next());

}

 

 

 

 

 

} //out of main

}// out of class





◐ArrayList  사용법 2)



public class Student {

//필드 - 인스턴스 필드, 객체가 생성되어야 사용할 수 있음

private String name;

private int age;

 

//생성자 - class 이름과 같음, 객체를 초기화

public Student(String name, int age) {

// 붕어빵 틀 -> 붕어빵을 만들때, 이것이 사용

this.name = name;

this.age = age;

}

 

/*

//생성자 - class 이름과 같음, 객체를 초기화

//private - 생성자에게 붙인다면, 외부에서 생성할수 없게 설정 한다.

private  Student(String name, int age) {

// 붕어빵 틀 -> 붕어빵을 만들때, 이것이 사용

this.name = name;

this.age = age;

}

*/

 

//메소드 - 기능

public String getName() {

return name;

}

 

public void setName(String name) {

this.name = name;

}

 

 

 

 

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

//메소드

public void showInfo() {

System.out.println("이름 : " + name);

}

@Override

public String toString() {

return   name + ", " + age  ;

}

 

 

 

 

}

















public class ArrayListExam02 {

public static void main(String[] args) {

 

// List<Integer> arrayList = new ArrayList<>();

ArrayList<Integer> arrayList = new ArrayList<>();

//포장 객체 wapper클래스 사용해야한다.

 

arrayList.add(3); //3이라고 쓰지만, 컴파일러가, 자동으로 Integer타입으로 박싱해준다.

//arraylist.add(new Integer(3)) 이렇게 써야 맞을 것 같다.

//wapper클래스, 자동박싱, 자동언박싱

 

// arrayList.add("김");

 

arrayList.add(3);

// arrayList.add("김");

arrayList.add(20);

 

for(int num : arrayList) {

System.out.println(num);

}

 

 

//----------------------------------

//ArrayList 선언

ArrayList<Student> std = new ArrayList<>();

//Student[] std = {new Student("홍",20),....};

 

//자료 입력

std.add(new Student("홍길동", 20));

std.add(new Student("김자바", 25));

std.add(new Student("이강산", 28));

 

//arraylist 공간이 동적으로 할당 : 자유롭다

//배열은 공간이 한번 정해지면, 추가하고 삭제할수가 없다.

 

 

//for1)반복문

System.out.println();

for(int i = 0; i < std.size(); i++) {

System.out.println(std.get(i));

//std.get(i).showInfo();

}

 

 

//for2)향상문

System.out.println();

for(Student stu : std ) {

System.out.println(stu);

//stu.showInfo();

}

 

 

//3)interator   //-1

System.out.println();

Iterator<Student> stu2  = std.iterator();

while(stu2.hasNext()) {

System.out.println(stu2.next());

//stu2.next().showInfo();

}

 

//-2

System.out.println("------------------------------");

Iterator<Student> studentIter1 = std.iterator();

while(studentIter1.hasNext()) {

System.out.println("이름 : " + studentIter1.next().getName() + "나이 : " + studentIter1.next().getAge());

}

 

 

 

 

} //out of main

}// out of class


'1. JAVA > 3). 자바_개념' 카테고리의 다른 글

자바_개념_Day_33  (0) 2024.02.19
자바_개념_Day_31  (2) 2024.02.14
자바_개념_Day_30  (0) 2024.02.13
자바_개념_Day_29  (1) 2024.02.08
자바_개념_Day_27  (1) 2024.02.06