[Java] Collection Framework (Day7~8)
위 글은 해당 카테고리의 수업 강의 자료를 정리한 것입니다.
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
[Java] 자바 ArrayList 사용법 & 예제 총정리
ArrayList란? ArrayList는 List 인터페이스를 상속받은 클래스로 크기가 가변적으로 변하는 선형리스트입니다. 일반적인 배열과 같은 순차리스트이며 인덱스로 내부의 객체를 관리한다는점등이 유
coding-factory.tistory.com
https://coding-factory.tistory.com/552
[Java] 자바 LinkedList 사용법 & 예제 총정리
LinkedList란? 연결 리스트(LinkedList)는 각 노드가 데이터와 포인터를 가지고 한 줄로 연결되어 있는 방식의 자료구조입니다. 데이터를 담고 있는 노드들이 연결되어 있고, 노드의 포인터가 이전 노
coding-factory.tistory.com
예제
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
[Java] 자바 HashSet 사용법 & 예제 총정리
HashSet이란? HashSet은 Set 인터페이스의 구현 클래스입니다. 그렇기에 Set의 성질을 그대로 상속받습니다. Set은 객체를 중복해서 저장할 수 없고 하나의 null 값만 저장할 수 있습니다. 또한 저장 순
coding-factory.tistory.com
예제(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
[Java] 자바 HashMap 사용법 & 예제 총정리
HashMap 이란? HashMap은 Map 인터페이스를 구현한 대표적인 Map 컬렉션입니다. Map 인터페이스를 상속하고 있기에 Map의 성질을 그대로 가지고 있습니다. Map은 키와 값으로 구성된 Entry객체를 저장하는
coding-factory.tistory.com