국비 23일차 JAVA 컬렉션, 제네릭, List, map
2021. 2. 4. 19:34
2021.02.24 국비교육 23일차
[TOC]
제네릭
package com.one;
import java.util.Date;
//Object 대신에 T(Type)의미로써 참조형 타입만 지정 가능
// T는 Box 객체를 생성할 때 구체저인 타입으로 변경가능하다는 것을 알려줌
class Box<T> {
T obj;
public void setValue(T obj) {
this.obj = obj;
}
public T getValue() {
return obj;
}
}//end Box
public class GenericTest1 {
public static void main(String[] args) {
//제네릭스 타입(generics type)
Box<String> b = new Box<String>();
b.setValue("hello");
//b.setValue(100); //다른 타입 사용 불가
String x = b.getValue(); //형변환 필요없음 (String)b.getValue();
System.out.println(x.length()); // 형변환 필요없음
System.out.println(x);
Box<Date> b2 = new Box<>();
b2.setValue(new Date());
//b2.setValue("AAA"); // 다른 타입 지정 안됨
}
}
와일드 카드 타입
package com.test;
class Group<T>{
T obj;
public void setValue(T obj) {
this.obj = obj;
}
public T getValue() {
return obj;
}
}
class Person{}
class man extends Person{}
class woman extends Person{}
public class Ex10_5 {
public static void method(Group<?> group) {}
public static void method2(Group<? extends Person> group) {}
public static void method3(Group<? super Person> group) {}
public static void main(String[] args) {
//method : 어떤 타입도 설정 가능
method(new Group<Object>());
method(new Group<Person>());
method(new Group<man>());
method(new Group<woman>());
//method2 : person 또는 person의 자식만 가능
//method2(new Group<Object>());
method2(new Group<Person>());
method2(new Group<man>());
method2(new Group<woman>());
//method3 : person또는 person의 부모만 가능
method3(new Group<Object>());
method3(new Group<Person>());
//method3(new Group<man>());
//method3(new Group<woman>());
}
}
컬렉션
- 대량의 데이터 관리에 배열보다 매울 효과적 (다양한 저장구조 제공)
- 저장되는 데이터 종류 무관
- 자동으로 크기변경 가능
- 저장되는 값은 참조형만 가능
- Collections API 활용하여 컬렉션을 효율적으로 관리 가능
set
- 데이터의 저장 순서가 없기 때문에 중복 저장이 불가능
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
public class setTest {
public static void main(String[] args) {
Set set = new HashSet();
HashSet set2 = new HashSet(); // 추천되는 방법
set.add("1"); // 추가 시 자동으로 방이 증가됨
set.add("2");
set.add(3); // 오토박싱 -> Integer
set.add("4");
set.add(3.15);
set.add(new Date());
set.add(new Date());
//값 출력
System.out.println("길이 : " + set.size());
System.out.println("포함여부 : " + set.contains(20));
System.out.println("empty? : " + set.isEmpty());
//System.out.println(set.remove("홍길동")); // false -> 삭제안됨
Object [] xxx = set.toArray(); // 배열화
for(Object o : xxx) {
System.out.println(o);
}
System.out.println(set);
set.clear(); // 전부 제거
System.out.println(set);
}
}
import java.util.HashSet;
import java.util.Iterator;
public class setTest2 {
public static void main(String[] args) {
HashSet<String> set = new HashSet(); //제너릭 지정 String만 저장
set.add("1");
set.add("1");
set.add("1"); //중복불가
set.add("1");
set.add("2");
set.add("3");
set.add("4");
set.add("5");
set.add("6");
//set.add(10); // 잘못된 데이터 저장 감지를 컴파일 때 인식가능
//1. toString()
System.out.println("set.toString : " + set.toString());
//System.out.println("set.toString : " + set); 같은 결과
//2.for - each
for (String x : set) {
System.out.println("for - each : " + x);
}
//3. 일관된 방법인 Iterator 사용
Iterator<String>ite = set.iterator();
while(ite.hasNext()) {
String m = ite.next(); // 중요
System.out.println("iterator : " + m);
}
// while (ite.hasNext()) {
// String string = (String) ite.next();
// } 자동완성 결과물
//4.Iterator를 이용한 자료 검색
Iterator<String> i = set.iterator();
while (i.hasNext()) {
String data = i.next();
if(data.equals("1")) {
System.out.println("data : " + data);
}
}
}
}
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class setTest3 {
public static void main(String[] args) {
//홍길동 20 서울, 이순신 44 전라, 유관순 17 서울
Set<Person> set = new HashSet<Person>();
Person kkkk = new Person("유관순", 17, "서울");
set.add(kkkk);
set.add(kkkk);
set.add(kkkk); // kkkk 객체 주소가 같기 때문에 하나가 들어감
set.add(new Person("홍길동", 20, "서울"));
set.add(new Person("이순신", 44, "전라"));
set.add(new Person("이순신", 44, "전라")); // 15번과 16번의 객체 주소가 달라서 2개 다 들어감
System.out.println(set.size());
System.out.println(set);
//for each를 사용한 데이터 출력
for(Person k : set) {
System.out.println("for - each : " +k.getName());
}
//Iterator 이용한 데이터 출력
Iterator<Person> i = set.iterator();
while (i.hasNext()) {
Person data = i.next();
System.out.println("iterator : " + data.getName());
}
}
}
import java.util.HashSet;
public class setTest4 {
private static void change(int num) {
num = 10;
}
private static void change2(int[] num) {
num[0] = 10;
}
private static void change3(HashSet<String> num) {
num.remove("홍길동");
}
public static void main(String[] args) {
int m = 9;
System.out.println("변경전 : " + m);
change(m);
System.out.println("변경후 : " + m);//m = 9 --> call by value
int[]m2 = {9,8,7};
System.out.println("변경전 : " + m2[0]);
change2(m2);
System.out.println("변경후 : " + m2[0]); // m2[0] = 10 --> call by ref
HashSet<String> set = new HashSet<String>();
set.add("홍길동");
set.add("이순신");
set.add("유관순");
System.out.println("변경 전 : " + set);
change3(set);// public static void change3(HashSet<String> set)
System.out.println("변경 후 : " + set);
}
}
set을 활용하여 DB data 끌어오기
import java.util.HashSet;
import com.service.OracleService;
public class OracleMain {
public static void main(String[] args) {
//OracleMain <--> OracleService
OracleService service = new OracleService();
HashSet<String> xxx = service.select(); //1. 데이터 요청(select), 5.데이터 반환(HashSet에 저장)
for(String s : xxx) {
System.out.println(s); //홍길동 이순신 유관순 출력
}
}
}
package com.service;
import java.util.HashSet;
import com.dao.OracleDAO;
public class OracleService {
//Oracle Main <--> OracleService <--> Oracle DAO
OracleDAO dao;;
public OracleService() {
dao = new OracleDAO();
}
public HashSet<String> select() {
HashSet<String> xxx = dao.select(); //2.데이터 요청(select), 4.데이터 반환(HashSet에 저장)
return xxx; //메인으로 반환
}
}
package com.dao;
import java.util.HashSet;
public class OracleDAO {
public HashSet<String> select() {
//DB연동 데이터 가져오는 코드가 들어가야함
HashSet<String>set = new HashSet<String>();
set.add("홍길동");
set.add("이순신");
set.add("유관순"); //3,4 DB 접근 + 데이터 반환
return set; // 서비스로 리턴 (4번작업)
}
}
List
- 데이터 중복가능, 순서있음(인덱스 존재)
import java.util.ArrayList;
import java.util.List;
public class ListTest3 {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("홍길동");
list.add("이순신");
list.add("유관순");
list.add("강감찬");
list.add("세종");
System.out.println("길이(크기) :" + list.size());
System.out.println("값 포함여부 :" + list.contains("세종"));
System.out.println("특정값 위치 :" + list.indexOf("세종"));
System.out.println("값의 여부 :" + list.isEmpty());
System.out.println(list);
System.out.println("===============");
//List 추출
List<String>sub = list.subList(0, 3);
for(String x: sub) {
System.out.println("sub : " + x);
}
//Object 변환
Object[] obj = list.toArray();
for(Object x : obj) {
System.out.println("object : " + x);
}
//중간 삽입(insert)
list.add(0, "정조"); // 0번에 추가
System.out.println(list);
//수정(update)
list.set(0, "영조");
System.out.println(list);
//삭제(delete)
list.remove(0);
list.remove("세종");
System.out.println(list);
List<String> list2=
Arrays.asList("홍길동", "이순신", "세종", "세종"); // 문자열을 순서대로 넣어서 ArrayList 출력
System.out.println(list2);
}
}
list 다른 객체 가져와서 리스트 만들기
import java.util.ArrayList;
import java.util.Iterator;
public class ListTest5 {
public static void main(String[] args) {
ArrayList<Person> list = new ArrayList<>();
Person p1 = new Person("홍길동", 10, "서울");
Person p2 = new Person("이순신", 20, "경기");
Person p3 = new Person("유관순", 30, "제주");
list.add(p1);
list.add(p2);
list.add(p3);
System.out.println(list.get(0)); //홍길동 정보 출력
//1. for-each 이름만 출력
System.out.println("for-each 출력");
for(Person p : list) {
System.out.println(p.getName());
}
//2.for 문
System.out.println("for출력");
for(int i =0; i<list.size();i++) {
System.out.println(list.get(i).getName());
}
//3. iterator 사용
System.out.println("iterator 출력");
Iterator<Person> it = list.iterator();
while(it.hasNext()) {
Person p = it.next();
System.out.println(p.getName());
}
}
}
Comparator 인터페이스 활용 ArrayLIst 정렬
import java.util.Comparator;
public class PersonAgeSortComparator implements Comparator<Person>{
@Override
public int compare(Person o1, Person o2) {
int num = -1;
if(o1.getAge() > o2.getAge()) {
num = 1;
}
return num; // 내림차순 : 음수값 // 오름차순 : 양수값 or 0
}
}
import java.util.ArrayList;
import java.util.Collections;
public class ListTest6 {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(9);
list.add(6);
list.add(1);
list.add(3);
list.add(4);
System.out.println("정렬 전 " + list);
Collections.sort(list);
System.out.println("sort 정렬 후 "+ list);
Collections.reverse(list);
System.out.println("reverse 정렬 후" + list);
ArrayList<Person> list2 = new ArrayList<Person>();
list2.add(new Person("홍길동", 20, "서울"));
list2.add(new Person("이순신", 44, "전라"));
list2.add(new Person("강감찬", 33, "전라"));
System.out.println("정렬 전 : " + list2);
Collections.sort(list2, new PersonAgeSortComparator());
System.out.println("정렬 후 : " +list2);
}
}
Map
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
public class MapTest {
public static void main(String[] args) {
Map map = new HashMap(); // 다형성
map.put("one", "홍길동");
map.put("two", new Date());
System.out.println(map.get("one")); // key : "one"
System.out.println(map.get("two"));
}
}
import java.util.HashMap;
public class MapTest2 {
public static void main(String[] args) {
HashMap<String, String> map = new HashMap<>();
map.put("oen", "홍길동");
map.put("two", "이순신");
map.put("three", "유관순");
map.put("one", "강감찬"); // 홍길동 -> 강감찬 덮어쓰기
map.put("one", null);//강감찬 -> null
map.put(null, null); //이렇게 사용 안함
System.out.println(map.get("one")); // null
System.out.println(map.get("four")); // null
}
}
import java.util.HashMap;
public class MapTest4 {
public static void main(String[] args) {
HashMap<String, String> map = new HashMap<>();
map.put("oen", "홍길동");
map.put("two", "이순신");
map.put("three", "유관순");
System.out.println(map.get("one"));
System.out.println(map.get("two"));
System.out.println(map.get("three"));
System.out.println("HashMap 크기 : " +map.size());
System.out.println("키 포함 여부 : " + map.containsKey("one"));
System.out.println("키 포함 여부 : " + map.containsValue("유관순"));
// map.replace("three", "강감찬");
// map.remove("two");
// map.clear();
// System.out.println("변경 후 : " + map);
}
}
key | value |
---|---|
one | 홍길동 |
two | 이순신 |
three | 유관순 |
Map의 데이터 전체 사용
- KeySet을 얻기(key의 모음 : 저체 키값만 얻어옴) //set은 중복 허용 안됨
- keyset을 사용하여 전체 순회(for each, iterator)
- key에 해당하는 value값 꺼냄
//key값 얻기
Set<String> keys = map.keySet();
System.out.println(keys);
for(String key : keys) {
System.out.println(map.get(key));
}
//iterator 활용(key)
Iterator<String>its = keys.iterator();
while(its.hasNext()) {
String key = its.next();
System.out.println(key + " " + map.get(key));
'ETC > 국비교육' 카테고리의 다른 글
국비 25일차 JDBC(DB접근, Select, insert) (0) | 2021.02.08 |
---|---|
국비 24일차 컬렉션 List, HashMap 익숙해지기 (0) | 2021.02.05 |
국비 22일차 throw, 예제 (0) | 2021.02.03 |
국비 21일차 JAVA(중첩, Comparator, DecimalFormat, 문자열 나누기, StringTokenizer, StringBuffer, Wrapper(오토박싱, 언박싱), Random, Calander, SimpledataFormat, Array API, ENUM, 예외(try-catch, finally)) (0) | 2021.02.02 |
국비 20일차 다형성, 추상함수, 인터페이스 (0) | 2021.02.01 |