Collection API
Wrapper 클래스
- 기본 데이터 타입을 객체로 다룰 수 있도록 만들어진 클래스
- wrapper 클래스를 사용하면 자동으로 boxing과 unboxing이 이루어진다.
- boxing
- 기본 데이터 타입을 해당하는 wrapper 클래스 객체로 변환하는 것
- unboxing
- wrapper 클래스 객체를 해당하는 기본 데이터 타입으로 변환하는 것
- Auto-boxing
- 기본 데이터 타입의 값을 해당하는 wrapper 클래스 객체로 자동 변환 하는 것
- Auto-unboxing
- wrapper 클래스 객체를 해당하는 기본 데이터 타입으로 자동 변환 하는 것
public class WrapperTest {
public static void main(String[] args) {
// 정수형 변수에 10을 저장하세요
int a = 10; // 기본 자료형
// Integer aa = new Integer(10); // 사용자 정의 자료형
Integer aa = 10; // Integer는 클래스 -> auto-boxing, 메모리에 Integer 객체가 생성되고 10이 저장됨
System.out.println(aa.intValue()); // intValue() : Unboxing(Integer -> Int) : 메모리의 10이라는 Int값을 하나 꺼내는 함수
Integer bb = 20; // auto-boxing
int b = bb; // Integer 안의 Int의 20을 자동으로 b에 할당 가능 -> auto-unboxing
float f = 10.5f;
Float ff = 45.6f; // auto-boxing
System.out.println(ff.floatValue()); // auto-unboxing
float aff = ff; // auto-unboxing
System.out.println(aff);
}
}
숫자와 문자열의 상호 변환
- 숫자형 문자열을 정수로 변환
- Integer.parseInt() 메서드를 사용
- 정수를 문자열로 변환
- String.valueOf() 메서드나 “” + 정수를 사용
public class IntergerStringTest {
public static void main(String[] args) {
String str1 = "123";
String str2 = "123";
System.out.println(str1+str2);
int num = Integer.parseInt(str1) + Integer.parseInt(str2); // 숫자형 문자열을 정수로 변환
System.out.println(num);
int su1 = 123;
int su2 = 123;
System.out.println(su1+su2);
String str = String.valueOf(su1) + String.valueOf(su2); // 정수를 문자열로 변환
System.out.println(str);
String str3 = "" + su1 + su2;
System.out.println(str3);
}
}
Collection Framework API
- 자바에서 제공하는 데이터 구조인 컬렉션을 표현하는 인터페이스와 클래스의 모음
- 개발자가 데이터를 저장하고 관리하는 다양한 방법 제공
public class CollectionBasic {
public static void main(String[] args) {
// ArratList에 10,20,30,40,50 5개의 정수(int)를 저장하고 출력하세요
// ArrayList는 클래스만 넣을 수 있기 때문에 int 저장은 불가 -> Wrapper 클래스를 통해 Integer로 저장해야한다
// 지금은 Auto boxing을 통해서 int를 자동으로 Integer타입으로 저장
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(10); // auto boxing으로 원래 new Integer(10)으로 넣어야하지만 자동으로 Integer로 변환해서 저장 가능
list.add(20); // auto boxing으로 원래 new Integer(10)으로 넣어야하지만 자동으로 Integer로 변환해서 저장 가능
list.add(30); // auto boxing으로 원래 new Integer(10)으로 넣어야하지만 자동으로 Integer로 변환해서 저장 가능
list.add(40); // auto boxing으로 원래 new Integer(10)으로 넣어야하지만 자동으로 Integer로 변환해서 저장 가능
list.add(50); // auto boxing으로 원래 new Integer(10)으로 넣어야하지만 자동으로 Integer로 변환해서 저장 가능
// int형으로 바로 값이 나올 수 있는 이유는 auto unboxing이 내부에서 작동하기 때문이다
for (int data : list){
System.out.println(data);
}
}
}
순서가 있고 중복 가능한 List API
- ArrayList 클래스
- add : 데이터 추가
- get(idx) : 인덱스 위치의 요소 반환
- remove(idx) : 인덱스 위치의 요소 제거
- set(idx, 수정할 요소) : 인덱스 위치의 요소 수정
public class ListExample {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>(); // 중복이 가능하고 순서가 있는 ArrayList
list.add("apple"); // new String("apple") 객체가 내부에서 만들어진다., 추가
list.add("banana"); // new String("apple") 객체가 내부에서 만들어진다.
list.add("cherry"); // new String("apple") 객체가 내부에서 만들어진다.
list.add("banana"); // new String("apple") 객체가 내부에서 만들어진다.
System.out.println(list.get(0)); // 정보 조회
System.out.println(list.get(1));
System.out.println(list.get(2));
System.out.println(list.get(list.size()-1) );
list.remove(0); // 삭제
list.set(1, "orange"); // 수정
for(String str : list){
System.out.println(str);
}
}
}
public class MovieListExample {
public static void main(String[] args) {
ArrayList<Movie> list = new ArrayList<Movie>();
list.add(new Movie("괴물","봉준호","2006", "한국"));
list.add(new Movie("기생충","봉준호","2019", "한국"));
list.add(new Movie("완벽한 타인","이재규","2018", "한국"));
for(Movie str : list){
System.out.println(str);
}
System.out.println("+----------------+--------+-------+------+");
System.out.println("+영화제목 |감독 |개봉년도|국가 |");
System.out.println("+----------------+--------+-------+------+");
for(Movie m : list) {
System.out.printf("|%-14s|%-8s|%4s|%-6s|\n",m.getTitle(),m.getDirector(),m.getYear(),m.getCountry());
}
System.out.println("+----------------+--------+-------+------+");
String searchTitle = "기생충";
// 순차검색 -> 이진 검색(*)
for (Movie m : list){
if(m.getTitle().equals(searchTitle)){
System.out.println(m);
break;
}
}
}
}
순서가 없고 중복 불가능한 Set API
- HashSet 클래스
- 순서가 없고 중복 불가능한 Set API
- add : 데이터 추가
- remove(index) : 인덱스 위치의 요소 제거
- set.contains(요소) : 요소가 set에 있는지 확인
- set.clear() : set 요소 초화
charCountMap.containsKey(c)
: c라는 key가 들어있는지 확인
public class HashSetExample {
public static void main(String[] args) {
Set<String> set = new HashSet<>();
set.add("Apple");
set.add("Banana");
set.add("Cherry");
set.add("Apple"); // 중복 x
System.out.println(set.size()); // 3
for(String str : set){
System.out.println(str);
}
set.remove("Banana");
for(String str : set){
System.out.println(str);
}
boolean contains = set.contains("Cherry");
System.out.println(contains); // true
set.clear();
boolean isEmpty = set.isEmpty();
System.out.println(isEmpty); // true
}
}
public class UniqueNumbers {
public static void main(String[] args) {
int[] nums = {1,2,3,4,5,2,4,6,7,1,3};
Set<Integer> uniqueNums = new HashSet<>();
for(int number : nums){
uniqueNums.add(number);
}
for(int number : uniqueNums){
System.out.println(number);
}
}
}
Key-Value로 데이터를 관리하는 MapAPI
- MapAPI
- put(key, value) : key : value 구조로 데이터 추가
- get(key) : key에 해당하는 value 출력
- 이미 있는 key에 value를 다르게 해서 put을하면 데이터 수정
- remove(key) : 요소 삭제
- getKey(), getValue() : 요소 전체 출력
- Map 전체 출력
- Map에 값을 전체 출력하기 위해서는 entrySet(), keySet() 메소드를 사용하면 되는데 entrySet() 메서드는 key와 value의 값이 모두 필요한 경우 사용하고, keySet() 메서드는 key의 값만 필요한 경우 사용합니다.
- https://tychejin.tistory.com/31
for (Map.Entry<String, String> entry : map.entrySet()) {
System.out.println("[key]:" + entry.getKey() + ", [value]:" + entry.getValue());
}
출처: https://tychejin.tistory.com/31 [너나들이 개발 이야기:티스토리]
public class MapExample {
public static void main(String[] args) {
Map<String, Integer> stdScores = new HashMap<>();
stdScores.put("Kim", 95); // 정보 추가
stdScores.put("Lee", 85);
stdScores.put("Park", 90);
stdScores.put("Choi", 80);
System.out.println(stdScores.get("Kim")); // 정보 조회
stdScores.put("Park", 92); // 정보 수정
stdScores.remove("Choi"); // 정보 삭제
for(Map.Entry<String, Integer> entry : stdScores.entrySet()){
System.out.println(entry.getKey());
System.out.println(entry.getValue());
}
}
}
public class CharacterCount {
public static void main(String[] args) {
String str="Hello, World";
Map<Character, Integer> charCountMap=new HashMap<>();
char[] strArray=str.toCharArray(); //{'H','e','l','l','o',','......}
for(char c : strArray){
if(charCountMap.containsKey(c)){
charCountMap.put(c,charCountMap.get(c)+1);
}else{
charCountMap.put(c, 1);
}
}
System.out.println("Character Counts");
for(char c : charCountMap.keySet()){
System.out.println(c + ":" + charCountMap.get(c));
}
}
}
'개발 > Java' 카테고리의 다른 글
Collection Framework API (1) | 2024.01.29 |
---|---|
제네릭(Generic) (0) | 2024.01.29 |
인터페이스 기반의 프로그래밍 (0) | 2024.01.29 |
자바 String 클래스 (1) | 2024.01.29 |
자바 API (0) | 2024.01.29 |