반응형
< Wrapper class >
- 포장하는 것
- 컬렉션에는 R타입만 들어갈 수 있음.
- P타입을 R타입으로 감싸서 저장하면 가능. (p498)
기본 자료형의 값을 컬렉션에 담기 위해서는 랩퍼 클래스를 사용함.
기본 자료형에 대해서 그에 대응하는 랩퍼 클래스가 있음.
기본 자료형의 값을 멤버 변수의 값으로 저장하고 이 값 주위로 값을 가공하는 메소드들이 감싸고 있다고 해서 랩퍼(wrapper)클래스라고 부름.
기본 자료형 | 랩퍼 클래스 (대문자) |
byte | Byte |
short | Short |
int | * Integer |
long | Long |
float | Float |
double | Double |
char | * Character |
boolean | Boolean |
public class WrapperEx {
public static void main(String[] args) {
int num = 100; // p타입
Integer number = 100; // wrapper R타입
Integer number2 = new Integer(100); // 예전에 사용하던 방식
num = number2;
byte bNum = number2.byteValue();
short sNum = number2.shortValue();
double dNum = number2.doubleValue();
Short number3 = 100;
bNum = number3.byteValue();
System.out.println(Integer.MAX_VALUE); // 정수 기본형의 최대값
System.out.println(Integer.MIN_VALUE);
int minValue = Integer.MIN_VALUE;
System.out.println(minValue);
System.out.println(Byte.MIN_VALUE);
// 박싱 언박싱
// Boxing : 기본 타입의 값을 포장 객체로 만드는 과정
// Unboxing : 포장 객체에서 기본 타입의 값을 꺼내는 과정
Integer integer = 30;
Integer integer1 = new Integer(30); // 오토박싱 : 기본 자료형이 참조형으로 변경됨
Integer integer2 = new Integer("30");
Integer integer3 = Integer.valueOf(30);
if(integer == integer2) {
System.out.println("같은 값입니다.");
} else {
System.out.println("다른 값입니다.");
}
}
}
public class Wrapper02 {
public static void main(String[] args) {
// 포장값 비교하기
// 포장값 비교하기 위해서 ==, != 같은 연산자는 사용하지 않음
Integer obj1 = 127;
Integer obj2 = 127; // int값에 속하는 숫자라면 true
System.out.println(obj1 == obj2);
Integer obj3 = 300;
Integer obj4 = 300;
System.out.println(obj3 == obj4); // int값을 벗어나기 때문에 false
// => == 기호는 아예 사용하지 말자.
// 값 비교 compareTo()
int result = obj1.compareTo(obj2);
System.out.println(result); // 0
if(result == 0) {
System.out.println("값이 같습니다.");
} else if(result < 0) { // -1
System.out.println("값이 다릅니다. obj2가 클 때");
} else { // 1
System.out.println("값이 다릅니다. obj1이 클 때");
}
// 오토 언박싱
// R -> P
int iNum = obj1; // 앞에는 P, 뒤에는 R타입
Object obj = 40;
iNum = (int) obj;
iNum = ((Integer) obj).intValue();
}
}
< Collection >
R타입만 저장, P타입은 warraper로 감싸서 사용
List, Set, Map
클래스 선언부에 <E>, <T>, <K, V> 가 붙은 것들이 있음 = 제네릭
- E 요소 = Element
- T 타입 = Type
- K,V 키, 값 = Key, Value
package com.coffee.wrapper;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Coll01 {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(10);
list.add(20);
list.add(0, 100); // 0번지에 100을 추가함
list.set(2, 200); // 2번지 숫자를 변경함
list.remove(0); // index의 값 삭제
list.remove(2);
System.out.println(list); // [10, 200]
System.out.println(list.get(0));
System.out.println(list.get(1));
System.out.println(list.get(2));
System.out.println(list.size()); // list의 길이
for (int i = 0; i < list.size(); i++) { // 리스트 길이 = size
System.out.println(list.get(i));
}
for (Integer integer : list) {
System.out.println(list);
}
list.clear(); // list의 모든 값 삭제
System.out.println(list.isEmpty()); // 비어있어?
ArrayList<Integer> list2 = new ArrayList<Integer>();
ArrayList<Integer> list3 = new ArrayList<>();
List<Integer> list4 = new ArrayList<>(); // 상속
========================================
// 1~10
ArrayList<Integer> list01 = new ArrayList<Integer>();
for (int i = 0; i <=10; i++) {
list01.add(i);
}
System.out.println(list01); // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
// 짝수만 지우고 홀수만 출력하려면?
for (int i = 0; i < list01.size(); i++) {
list01.remove(i);
}
System.out.println(list01); // [1, 3, 5, 7, 9]
}
}
< List >
배열과 유사하지만, 크기를 동적으로 조절할 수 있고 다양한 기능을 제공
리스트의 특징
- 순서가 있음 : List는 데이터의 순서를 유지합니다.
- 크기 동적 조절 : 배열과 달리 크기를 동적으로 조절할 수 있습니다.
- 다양한 구현체 : ArrayList, LinkedList 등 다양한 형태로 구현할 수 있습니다.
- 인덱스로 접근 : 각 요소에 인덱스를 사용하여 쉽게 접근 가능합니다.
- 다양한 기능 제공 : 정렬, 검색, 일부분 추출 등 다양한 작업을 지원합니다.
- 유연한 데이터 관리 : 여러 데이터를 한 곳에 모아 관리하기 용이합니다.
- 효율적인 코드 작성 : List를 사용하면 코드를 간결하게 작성할 수 있습니다.
List | 순서 있음 / 중복 허용 |
Set | 순서 없음 / 중복 불가 |
Map | key와 value를 쌍으로 저장 / key 중복 불가, value 중복 가능 |
package com.coffee.coll;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;
public class List01 {
public static void main(String[] args) {
// 1~45 숫자 6개 뽑아서 저장. (중복 상관없음)
ArrayList<Integer> list1 = new ArrayList<Integer>();
for (int i = 0; i < 6; i++) {
list1.add((int)(Math.random()*45)+1);
}
System.out.println(list1);
Collections.sort(list1); // list 정렬하기 Collections.sort()
System.out.println(list1);
Collections.sort(list1, Collections.reverseOrder()); // list 역순 정렬
System.out.println(list1);
}
}
package com.coffee.coll;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class List02 {
public static void main(String[] args) {
// 문자열 저장하는 list1 만들기
ArrayList<String> list1 = new ArrayList<String>();
list1.add("홍길동");
list1.add("김길동");
list1.add("이길동");
list1.add("박길동");
list1.add("최길동");
list1.add("홍길동");
System.out.println(list1.size()); // 6
System.out.println(list1);
list1.remove("홍길동"); // 1개만 삭제함
System.out.println(list1.size()); // 5
list1.remove("홍길동"); // 2번 지우면 두개 다 지워줌
System.out.println(list1.size()); // 4
System.out.println(list1);
list1.remove("남길동"); // 없는 문자열은 결과가 변하지 않음
System.out.println(list1.size()); // 4
System.out.println(list1);
}
}
List | 순서 있음 / 중복 허용 |
Set | 순서 없음 / 중복 불가 |
Map | key와 value를 쌍으로 저장 / key 중복 불가, value 중복 가능 |
package com.coffee.coll;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Random;
import java.util.Set;
public class Set01 {
public static void main(String[] args) {
Set<String> set = new HashSet<String>();
set.add("홍길동");
set.add("김길동");
set.add("이길동");
set.add("박길동");
set.add("최길동");
set.add("홍길동");
System.out.println(set); // 중복 불가
System.out.println(set.size()); // 중복 불가 5
System.out.println(); // 출력 불가 + 중복 불가 = 로또 번호 뽑기
Set<Integer> lotto = new HashSet<Integer>();
while (lotto.size() < 6) {
lotto.add((int) (Math.random()45) + 1);
}
System.out.println(lotto); // 정렬이 되어있지 않음
// set을 list로 만들어서 출력하기
List<Integer> list2 = new ArrayList<>(lotto);
System.out.println(list2);
System.out.println("----------------------");
Collections.sort(list2); // 정렬하기
for (Integer integer : list2) {
System.out.println(integer);
}
반복자 (Iterator)
컬렉션 인터페이스의 iterator() 메소드는 Iterator를 리턴함
Iterator는 Enumeration 인터페이스와 비슷하나 Enumeration 보다 나중에 만들어짐
// Iterator (반복자)
Iterator<Integer> iter = lotto.iterator();
while (iter.hasNext()) {
Integer integer = (Integer) iter.next();
System.out.println(integer);
}
System.out.println("----------------------");
List<String> names = new ArrayList<String>();
names.add("홍길동");
names.add("김길동");
names.add("최길동");
names.add("홍길동");
names.add("홍길동");
names.add("홍길동");
names.add("이길동");
names.add("홍길동");
names.add("홍길동");
System.out.println(names.size()); // 중복 포함 9개
Set<String> names2 = new HashSet<String>(names);
System.out.println(names2.size()); // 중복 제외 4개
System.out.println(names2); // [김길동, 홍길동, 최길동, 이길동]
}
}
Set
- 고유한 요소 : Set은 중복된 요소를 허용하지 않음
- 순서 없음 : 데이터가 입력된 순서대로 저장되지 않음
- 인덱스 없음 : List와는 달리 인덱스를 사용하여 접근 불가
- 구현체 다양 : HashSet, TreeSet 등 다양한 Set 구현체가 있습니다.
- 데이터 집합 연산 : 교집합, 합집합, 차집합 등의 집합 연산을 제공합니다.
- 중복 방지 : 중복된 데이터를 효과적으로 방지하여 고유한 데이터 유지 가능.
- 컬렉션 프레임워크 일부 : Java의 컬렉션 프레임워크의 일부로 제공되어 사용이 편리합니다.
- NULL 요소 한 개만 허용 : 일반적으로 Set은 한 번에 한 개의 null 요소만을 허용합니다.
package com.coffee.coll;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class Set02 {
public static void main(String[] args) {
Set<String> set1 = new HashSet<>();
set1.add("홍길동");
set1.add("홍길동");
set1.add("홍길동");
set1.add("홍길동");
set1.add("홍길동");
String name = new String("홍길동");
System.out.println(System.identityHashCode(name));
set1.add(name);
name = new String("박길동");
System.out.println(System.identityHashCode(name));
set1.add(name);
System.out.println(set1.size());
// class를 만들어서 static 변수로 값을 변경시켜서 저장
Set<Human> humans = new HashSet<Human>();
Human n = new Human();
humans.add(n);
n.ssn = 10;
humans.add(n);
n.ssn = 20;
humans.add(n);
n.ssn = 30;
humans.add(n); // 하나의 주소값을 가진 객체를 이용
n.ssn = 40;
System.out.println(humans.size()); // 1
System.out.println(humans.iterator()); // java.util.HashMap$KeyIterator@606d8acf
List<Human> humanList = new ArrayList<>(humans);
Human listget = humanList.get(0);
System.out.println(listget.ssn); // 40
}
}
class Human {
int ssn;
static int number;
public Human() {
this.ssn = ++number;
}
}
Map
- 키-값 쌍 : Map은 키와 값의 쌍으로 데이터를 저장합니다.
- 중복된 키 불가 : 각 키는 고유해야 하며, 중복된 키는 허용되지 않습니다.
- 값 중복 허용 : 값은 중복되어도 상관없습니다.
- 해시맵, 트리맵 등 구현체 다양 : HashMap, TreeMap 등 다양한 Map 구현체가 있습니다.
- 순서 없음 : 데이터가 입력된 순서대로 저장되지 않습니다.
- 인덱스 대신 키로 접근 : List처럼 인덱스가 없으며, 키를 사용하여 데이터에 접근합니다.
- NULL 허용 : 키와 값 모두 null을 허용합니다.
- 효율적인 데이터 검색 : 키를 사용하여 데이터를 빠르게 검색할 수 있습니다.
- 컬렉션 프레임워크 일부 : Java의 컬렉션 프레임워크의 일부로 제공되어 사용이 편리합니다.
List | 순서 있음 / 중복 허용 |
Set | 순서 없음 / 중복 불가 |
Map | key와 value를 쌍으로 저장 / key 중복 불가, value 중복 가능 |
package com.coffee.coll;
import java.util.HashMap;
import java.util.Map;
public class Map01 {
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
// HashMap<String, String> map2 = new HashMap<String, String>(); 이렇게도 가능.
map.put("청송", "사과"); // key 청송, value 사과
map.put("수원", "왕갈비");
map.put("춘천", "닭갈비");
map.put("수원", "반도체");
System.out.println(map.size()); // key 기준 개수 (key 중복 저장 불가)
System.out.println(map); // 새로운 객체 저장 (출력 시 순서 랜덤)
// 하나만 출력 = key를 알아야 value 출력 가능
map.get("수원");
System.out.println(map.get("수원"));
// key가 있는지 물어보기
boolean key = map.containsKey("수원");
System.out.println(key); // true
key = map.containsKey("경기");
System.out.println(key); // false
// value 있는지 물어보기
boolean value = map.containsValue("사과");
System.out.println(value); // true
}
}
반응형
'개발 공부 Today I Learned' 카테고리의 다른 글
[국비 25일차 TIL] JAVA 예외 처리, try catch finally (1) | 2023.12.27 |
---|---|
[국비 24일차 TIL] Collection, List, Set, Map (2) | 2023.12.22 |
[국비 22일차 TIL] 인터페이스, 상속, 메모리 (0) | 2023.12.20 |
[국비 21일차 TIL] 자바 오버라이드, 오버로드, 다형성, 추상화 (0) | 2023.12.19 |
[국비 20일차 TIL] 자바 static, 인스턴스, 상속 (1) | 2023.12.18 |
댓글