위 글은 해당 카테고리의 수업 강의 자료를 정리한 것입니다.
1. 제네릭(Generic)
- 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법 (클래스 내부에서 사용할 데이터 타입을 나중에 인스턴스를 생성할 때 확정하여 사용)
- 객체 타입을 컴파일 시에 체크하기 때문에 객체의 타입 안정성을 높이고 형변환의 번거로움이 줄어듦
2. 컬렉션 프레임워크 소개
- 프레임워크(Framework): 표준화, 정형화된 체계적인 프로그래밍 방식
- 컬렉션(Collection): 다수의 데이터, 즉 데이터 그룹
- 컬렉션 프레임워크(Collection Framework)
- 다수의 데이터를 저장하는 클래스들을 표준화한 설계
- 다수의 데이터를 쉽게 처리할 수 있는 방법을 제공하는 클래스들로 구성
- JDK 1.2부터 제공
- 구성
3. List
- 순서를 유지, 중복 저장 가능
- 배열과 비교
- 종류
- ArrayList
- 인덱스로 관리됨
- 배열과 유사한 방법으로 관리 가능
- LinkedList
- 링크(Link)로 연결된 노드(Node)의 집합
- java.until.LinkedList 클래스에 정의됨
- index를 통한 참조 접근은 불가함 ➡️ head로부터 링크를 따라 가면서 접근
- 각 노드(Node)는 자신이 나타내는 데이터와 다음 노드(Node)로의 링크(Link)를 가지고 있음
- 노드의 기본 구성
- ArrayList
참고 자료
https://coding-factory.tistory.com/551
https://coding-factory.tistory.com/552
예제
import java.util.ArrayList;
import java.util.Iterator;
public class ArrayListTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(3); //값 추가
System.out.println(list);
list.add(null); //null값도 add가능
System.out.println(list);
list.add(1,10); //index 1에 10 삽입
System.out.println(list);
// 지우기
list.remove(2);
System.out.println(list);
list.clear();
System.out.println(list);
System.out.println(list.size());
System.out.println("");
System.out.println(list.get(1));
// 범위 넘어가면 예외 발생
System.out.println("");
for(Integer i: list) {
System.out.println(i);
}
Iterator iter = list.iterator(); // Iterator 선언
while(iter.hasNext()) { // 다음 값이 있는지 체크
System.out.println(iter.next()); // 값 출력
}
for(int i=0; i<list.size(); i++) {
System.out.println(list.get(i));
}
System.out.println(list.contains(1)); // list에 1이 있는지 검색, true/false
System.out.println(list.contains(10));
System.out.println(list.indexOf(1)); // 1이 있는 index 반환, 없으면 -1
}
}
import java.util.LinkedList;
public class LinkedListTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
LinkedList<Integer> list = new LinkedList<Integer>();
// 데이터를 앞뒤 둘 다 삽입 가능
System.out.println(list);
list.addFirst(1);
System.out.println(list);
list.add(2);
System.out.println(list);
list.addFirst(3);
System.out.println(list);
list.add(1,10);
System.out.println(list);
list.addLast(100);
System.out.println(list);
list.removeLast();
System.out.println(list);
list.removeFirst();
System.out.println(list);
list.remove(1);
System.out.println(list);
System.out.println(list.size());
// 향상된 for문
for(Integer i: list) {
System.out.println(i);
}
System.out.println(list.contains(100));
System.out.println(list.indexOf(100));
}
}
4. Set (HashSet)
- 순서 없이 저장됨
- 중복 값은 저장되지 않음 ➡️ 중복의 재정의가 필요
- 수학의 집합에 비유
순서가 없어서 일반적인 for문 적용은 불가능함
중복 정의가 중요하며 이는 클래스의 hashCode()와 equals() 메소드 재정의가 필요함을 의미
import java.util.HashSet;
import java.util.Iterator;
public class HashSetTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
HashSet<Integer> set = new HashSet<Integer>(); //HashSet 생성
System.out.println(set);
set.add(1);
set.add(2);
set.add(10);
System.out.println(set);
set.remove(1); // 값 1 제거
System.out.println(set);
// set.clear(); // 모든 값 제거
System.out.println(set.size()); // 크기 출력
// 순서가 없으므로 for문으로 출력 불가능
// iterator를 이용하여 값을 출력해야 함
Iterator iter = set.iterator(); // Iterator 사용
while(iter.hasNext()) { // 값이 있으면 true, 없으면 false
System.out.println(iter.next());
}
}
}
참고 자료
https://coding-factory.tistory.com/554
예제(HashSet을 이용하여 미니로또(중복제거)만들기)
import java.util.HashSet;
import java.util.Iterator;
public class MiniLotto {
public static void main(String[] args) {
// TODO Auto-generated method stub
HashSet<Integer> set = new HashSet<Integer>();
for(int i=0; i<6; i++) {
int number = (int)(Math.random()*45)+1;
set.add(number);
}
Iterator iter = set.iterator(); // Iterator 사용
while(iter.hasNext()) { // 값이 있으면 true, 없으면 false
System.out.print(iter.next()+" ");
}
}
}
5. Map (HashMap)
- 키(key)-값(value)의 쌍으로 저장
- 키는 중복될 수 없으나 값은 중복될 수 있음
- 키 값들은 keySet()으로 관리, 중복 허용 안됨, 순서 없음
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
public class HashMapTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
HashMap<String,String> map = new HashMap<>(); // new에서 타입 파라미터 생략가능
System.out.println(map);
map.put("apple", "사과");
map.put("banana", "바나나");
map.put("mango", "망고");
System.out.println(map);
map.remove("banana"); // 키 값 banana 제거
System.out.println(map);
map.put("kiwi", "키");
// map.clear(); // 모든 값 제거
System.out.println("");
// entrySet() 활용하여 출력 (entrydata로 받아온 결과)
for (Entry<String, String> entry : map.entrySet()) {
System.out.println("[Key]:" + entry.getKey() + " [Value]:" + entry.getValue());
}
System.out.println("");
//entrySet().iterator()
Iterator<Entry<String, String>> entries = map.entrySet().iterator();
while(entries.hasNext()){
Map.Entry<String, String> entry = entries.next();
System.out.println("[Key]:" + entry.getKey() + " [Value]:" + entry.getValue());
}
System.out.println("");
//keySet().iterator()
Iterator<String> keys = map.keySet().iterator();
while(keys.hasNext()){
String key = keys.next();
System.out.println("[Key]:" + key + " [Value]:" + map.get(key));
}
}
}
참고 자료
https://coding-factory.tistory.com/556
'강의 > KOSTA' 카테고리의 다른 글
[Oracle] Installation Related Note(Day9) (0) | 2022.03.16 |
---|---|
[Java] IOStream (Day8) (0) | 2022.03.15 |
[Java] Basic API (Day7) (0) | 2022.03.14 |
[Java] 부록(1) 객체지향 프로그래밍 연습문제 (0) | 2022.03.14 |
[Java] Object Oriented Programming (Day4~6) (0) | 2022.03.14 |