컬렉션프레임 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 |