배열의 한계점
컬렉션의 장점
Collection 계열
- List 계열(ArrayList, Vector, LinkedList)
- 순서를 유지하고 순차적으로 데이터를 저장
- 중복된 데이터 저장 가능
- Set 계열(HashSet, TreeSet)
- 순서를 유지하지 않고, 데이터를 저장
- 중복된 데이터 저장 불가능
- Queue 계열(PriorityQueue)
- FIFO 구조(Fisrt in First Out)
- 들어온 순서대로 데이터를 저장하고 뺄 수 있음\
Map 계열
- List와 Set을 합친 구조
- 키와 값 이용하여 데이터를 저장
※ 키는 중복 안됨 , 값은 중복 가능- HashMap, HashTable, TreeMap, Properties
다양한 메소드를 사용하여 List 기능을 사용 가능
- add(데이터) : 데이터 추가(정상적으로 추가 될 경우 true, 실패 시 false 리턴)
- size() : ArrayList의 사이즈 확인
- get(index) : 특정 index의 데이터를 꺼내옴
- set(index, 데이터) : 특정 index에 데이터 넣음
- remove(index) : 특정 index의 데이터 삭제
- clear(): 전체 데이터 삭제
- isEmpty(): list안에 데이터가 있는지 여부 체크(있으면 true, 없으면 false 리턴)
- sort(데이터) : 데이터 정렬(정렬 시에는 Collections Class에서 제공하는 sort 메소드를 사용해야함)
package com.test.run;
import java.util.ArrayList;
public class TestMain {
public static void main(String[] args) {
ArrayList list = new ArrayList();
// 데이터 저장
list.add(100);
System.out.println("데이터 : " + list); // 출력: [100]
// 저장된 데이터 수 출력
System.out.println("길이 : " + list.size()); // 출력 : 1
System.out.println();
list.add(200);
System.out.println("데이터 : " + list); // 출력: [100, 200]
System.out.println("길이 : " + list.size()); // 출력 : 2
System.out.println();
list.add(300);
System.out.println("데이터 : " + list); // 출력: [100, 200, 300]
System.out.println("길이 : " + list.size()); // 출력 : 3
// 데이터 지우기(0~)
list.remove(1);
System.out.println("데이터 : " + list); // 출력: [100, 300]
System.out.println("길이 : " + list.size()); // 출력: 2
// 데이터 꺼내오기
System.out.println("index 1번째 데이터 출력 : " + list.get(1)); // 출력: 300
// 데이터 수정
list.set(1, 999);
System.out.println("데이터 : " + list); // 출력: [100, 999]
// 데이터 존재 여부 확인
System.out.println("데이터 존재 여부 : " + list.isEmpty()); // 출력 : false
// 데이터 전체 삭제
list.clear();
// 전체 삭제 후 데이터 존재 여부 확인
System.out.println("데이터 존재 여부 : " + list.isEmpty()); // 출력 : true
System.out.println("데이터 : " + list); // 출력: []
System.out.println("길이 : " + list.size()); // 출력: 0
}
}
Ex) ArrayList의 응용(Member 객체를 만들어서 add와 get 사용)
package com.test.run;
import java.util.ArrayList;
class Member{
private String name;
private int age;
private String addr;
public Member() {
}
public Member(String name, int age, String addr) {
this.name = name;
this.age = age;
this.addr = addr;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
@Override
public String toString() {
return name + "/" + age + "/" + addr;
}
}
public class TestMain {
public static void main(String[] args) {
//방법 1
ArrayList list1 = new ArrayList(); // 들어오는 데이터 Object 객체 타입으로 저장
list1.add(new Member("홍길동", 20, "경기도 부천"));
list1.add(new Member("김말똥", 30, "경기도 안양"));
list1.add(new Member("고길똥", 40, "부산시 서면"));
//list1.get(0).getName(); // 데이터가 Object 타입으로 저장 되있기 때문에 자식 Class인 Member Class의 메소드에 접근할 수 없다.
((Member)list1.get(0)).getName(); // 다운 캐스팅을 통하여 호출하여야 한다.
// 방법 2
ArrayList<Member> list2 = new ArrayList<Member>(); // 들어오는 데이터 Member 객체 타입으로 저장
list2.add(new Member("홍길동", 20, "경기도 부천"));
list2.add(new Member("김말똥", 30, "경기도 안양"));
list2.add(new Member("고길똥", 40, "부산시 서면"));
list2.get(0).getName(); // Memeber Class의 getName 메소드 호출
// 이름, 나이, 주소 개별 출력
for (Member m : list2) {
System.out.println("이름 : " + m.getName());
System.out.println("나이 : " + m.getAge());
System.out.println("주소 : " + m.getAddr());
System.out.println();
}
}
}
package com.test.run;
import java.util.ArrayList;
import java.util.Collections;
public class TestMain {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(10);
list.add(5);
list.add(87);
list.add(8);
list.add(2);
list.add(11);
System.out.println(list); // 출력값: [10, 5, 87, 8, 2, 11]
//오름차순 정렬
Collections.sort(list);
System.out.println(list); // 출력값: [2, 5, 8, 10, 11, 87]
//내림차순 정렬
Collections.sort(list,Collections.reverseOrder());
System.out.println(list); // 출력값: [87, 11, 10, 8, 5, 2]
}
}
package com.test.run;
import java.util.ArrayList;
import java.util.Collections;
class Member implements Comparable { // 객체 정렬을 위한 compareTo() 사용하기 위해 Comparable 인터페이스 implements 하기
private String name;
private int age;
private String addr;
public Member() {
}
public Member(String name, int age, String addr) {
this.name = name;
this.age = age;
this.addr = addr;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
@Override
public String toString() {
return name + "/" + age + "/" + addr;
}
@Override
public int compareTo(Object o) {
return this.name.charAt(0) - ((Member) o).getName().charAt(0); // 이름을 기준으로 내림차순
//return ((Member) o).getName().charAt(0)-this.name.charAt(0); // 이름을 기준으로 오름차순
}
}
public class TestMain {
public static void main(String[] args) {
ArrayList<Member> list = new ArrayList<Member>();
list.add(new Member("홍길동", 20, "경기도 부천"));
list.add(new Member("고길똥", 40, "부산시 서면"));
list.add(new Member("김말똥", 30, "경기도 안양"));
System.out.println(list); // [홍길동/20/경기도 부천, 고길똥/40/부산시 서면, 김말똥/30/경기도 안양]
// 정렬
Collections.sort(list);
System.out.println(list); // [고길똥/40/부산시 서면, 김말똥/30/경기도 안양, 홍길동/20/경기도 부천]
}
}
package com.test.run;
import java.util.HashSet;
public class TestMain {
public static void main(String[] args) {
HashSet set = new HashSet();
// 데이터 추가
System.out.println(set.add(100)); // 출력: true
System.out.println(set); // 출력: [100]
System.out.println(set.add(200)); // 출력: true
System.out.println(set); // 출력: [100, 200]
System.out.println(set.add(300)); // 출력: true
System.out.println(set); // 출력: [100, 200, 300]
System.out.println(set.add(400)); // 출력: true
// 중복값 추가
System.out.println(set.add(400)); //출력: false
// 데이터 출력(데이터 입력 순서 유지 되어 저장하지 않는다)
System.out.println(set); // 출력: [400, 100, 200, 300]
// 현재 저장된 데이터 개수 출력
System.out.println(set.size()); // 출력 : 4
// 데이터 존재 여부 확인
System.out.println(set.isEmpty()); // 출력 : false (데이터 있음)
// 데이터 전체 삭제
set.clear();
// 데이터 전체 삭제 후 데이터 존재 여부 확인
System.out.println(set.isEmpty()); // 출력 : true (데이터 없음)
}
}
package com.test.run;
import java.util.HashSet;
import java.util.Iterator;
public class TestMain {
public static void main(String[] args) {
HashSet set = new HashSet();
System.out.println(set.add(100));
System.out.println(set.add(200));
System.out.println(set.add(600));
System.out.println(set.add(800));
System.out.println(set); // 출력: [800, 100, 200, 600]
// set에 저장된 데이터를 꺼내려면 iterator화 시켜야 한다.-> 토근 형태로 추출
Iterator data = set.iterator();
// 저장된 데이터 있는지 확인-> 데이터가 없다면 반복분 종료
while (data.hasNext()) {
// 데이터 1개씩 출력
System.out.println(data.next()); // 출력 총 4번-> 800. 100, 200, 600 하나씩 출력
}
}
}
package com.test.run;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
public class TestMain {
public static void main(String[] args) {
HashSet set = new HashSet();
set.add(100);
set.add(200);
set.add(600);
set.add(800);
System.out.println("set 데이터 : " + set); // 출력 : set 데이터 : [800, 100, 200, 600]
// set 데이터 list 데이터로 변환
ArrayList list = new ArrayList(set);
// 데이터 오름차순 정렬
Collections.sort(list);
// 총 데이터 출력
System.out.println("list 데이터 : " + list); // 출력 : list 데이터 : [100, 200, 600, 800]
// 저장되 데이터의 수 만큼 반복하여 인텍스에 저장된 데이터 출력
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i)); // 출력: 100
// 200
// 600
// 800
}
}
}
package com.test.run;
import java.util.HashMap;
public class TestMain {
public static void main(String[] args) {
HashMap map = new HashMap();
// 데이터 저장
map.put(1, "홍길동");
map.put(2, "이미숙");
map.put(3, "김숙자");
// 전체 데이터 출력
System.out.println(map); // 출력 : {1=홍길동, 2=이미숙, 3=김숙자}
// 중복 데이터 삽입
map.put(3, "김말똥");
System.out.println(map); // 출력 : {1=홍길동, 2=이미숙, 3=김말똥}
// key값에 해당하는 value 데이터 추출
System.out.println(map.get(1)); // 출력 : 홍길동
// key값에 해당하는 데이터 삭제
map.remove(1);
System.out.println(map); // 출력 : {2=이미숙, 3=김말똥}
// 중복 key값 확인(있으면 true, 없으면 false)
System.out.println(map.containsKey(2)); // 출력 : true
System.out.println(map.containsKey(5)); // 출력 : false
}
}
package com.test.run;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Set;
class Member {
private String name;
private String addr;
private int age;
public Member() {
}
public Member(String name, int age, String addr) {
this.name = name;
this.addr = addr;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return name + "/" + age + "/" + addr;
}
}
public class TestMain {
public static void main(String[] args) {
HashMap map = new HashMap();
map.put(100, new Member("홍길동", 20, "경기도 안양시"));
map.put(200, new Member("김말숙", 30, "부산시 서면"));
map.put(300, new Member("이요동", 40, "강원도 강릉시"));
// key 값만 추출하여 set으로 대입
Set set = map.keySet();
// ArrayList
ArrayList list = new ArrayList(set);
for (int i = 0; i < list.size(); i++) {
System.out.println("key : " + list.get(i) + " / value : " + map.get(list.get(i)));
// 출력: key : 100 / value : 홍길동/20/경기도 안양시
// 출력: key : 200 / value : 김말숙/30/부산시 서면
// 출력: key : 300 / value : 이요동/40/강원도 강릉시
}
}
}
package com.test.run;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Set;
class Member {
private String name;
private String addr;
private int age;
public Member() {
}
public Member(String name, int age, String addr) {
this.name = name;
this.addr = addr;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return name + "/" + age + "/" + addr;
}
}
public class TestMain {
public static void main(String[] args) {
// key값, value값 모두 Object 타입으로 객체 저장
HashMap map1 = new HashMap();
map1.put(100, new Member("홍길동", 20, "경기도 안양시"));
map1.put(200, new Member("김말숙", 30, "부산시 서면"));
map1.put(300, new Member("이요동", 40, "강원도 강릉시"));
// Member 객체의 데이터에 접근하려면 다운 캐스팅을 해야한다.
((Member) map1.get(100)).getName();
// 제네릭 활용(key값 Integer 타입, value값 Member 타입으로 데이터 저장
HashMap<Integer, Member> map2 = new HashMap<Integer, Member>();
map2.put(100, new Member("홍길동", 20, "경기도 안양시"));
map2.put(200, new Member("김말숙", 30, "부산시 서면"));
map2.put(300, new Member("이요동", 40, "강원도 강릉시"));
// Member 객체의 데이터에 바로 접근 가능하다.
map2.get(100).getName();
}
}
package com.test.run;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Set;
class Member {
private String name;
private int age;
private String addr;
public Member() {
}
public Member(String name, int age, String addr) {
this.name = name;
this.age = age;
this.addr = addr;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
@Override
public String toString() {
return name + "/" + age + "/" + addr;
}
}
public class TestMain {
public static void main(String[] args) {
HashMap<Integer, Member> map = new HashMap<Integer, Member>();
map.put(100, new Member("홍길동", 20, "경기도 부천"));
map.put(110, new Member("김말똥", 30, "서울시 양천"));
map.put(150, new Member("고길똥", 40, "부산시 서면"));
Set set = map.keySet();
ArrayList keyList = new ArrayList(set);
ArrayList<Member> list = new ArrayList<Member>();
for (int i = 0; i < map.size(); i++) {
list.add(map.get(keyList.get(i)));
}
for (Member m : list) {
System.out.println(m);
}
}
}
키(key)와 값(value)를 String 타입으로 제한한 Map 형태의 컬렉션
별도의 프로퍼티(Properties)파일을 읽어 들여서 데이터를 처리함
Properties 파일은 key=value의 값의 쌍들로 이루어지며, 별도의 파일로 데이터를 저장하고, 파일의 확장자는 .properties를 사용한다.
Properties 파일 만들기
객체생성 및 메소드
ex)
package com.test.run;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Properties;
class MemberController {
private ArrayList<String> list = new ArrayList<String>();
String dbId = "user11"; // DB의 ID
String dbPw = "159159"; // DB의 PW
public MemberController() {
list.add("홍길동");
list.add("김말똥");
list.add("고길동");
list.add("유비");
list.add("장비");
list.add("관우");
}
public void start() {
//properties 파일에 있는 내용을 읽어서 가져오도록 하겠습니다.
Properties prop = new Properties();
try {
prop.load(new FileReader("resources/Login.Properties"));
} catch (IOException e) {
e.printStackTrace();
}
String id=prop.getProperty("id");
String pw=prop.getProperty("pw");
// DB에 정상 연결 하였는지!
boolean result = getDbCopnnection(id, pw);
if (result == true) {
System.out.println("----- 고객 정보 출력 -----");
for (String name : list) {
System.out.println(name);
}
} else {
System.out.println("DB 연결 실패!(ID/PW 확인 요망)");
}
}
public boolean getDbCopnnection(String id, String pw) {
// 해당 메소드는 id와 pw를 보내서 DB와 일치한다면
// true 리턴, 일치하지 않다면 false 리턴
if (id.equals(dbId) == true == pw.equals(dbPw)) {
return true;
} else {
return false;
}
}
}
public class TestMain {
public static void main(String[] args) {
new MemberController().start();
}
}
id=goCom
pw=1q2w3e