배열(array)의 경우 값과 순서가 정해져 있다. 제네릭과 컬렉션을 이를 보안하여 값과 순서 변동이 배열에 비해 자유롭다.
사용 이유 : 많은 데이터를 처리하기 위해 배열을 이용했지만, 크기가 고정, 삽입 삭제가 오래걸림
⇒ 그로 인해 동적 배열 개념인 Set,List,Map을 사용함!!
Set : 데이터의 중복허용 안됨, 순서를 유지하지 않는 집합
List : 데이터의 중복허용 됨, 순서유지
Map : Key값을 알면 Value값을 구하기 가능
인터페이스 설 명 특 징 대표 구현 클래스
List | 순서가 있는 데이터의 조합 | 데이터의 중복을 허용 | ArrayList, LinkedList |
Set | 순서를 유지하지 않는 데이터의 집합 | 데이터의 중복을 허용 | HashSet, LinkedHashSet |
Map | 키(key)와 값(value)의 쌍으로 이루어진 데이터 집합 | 순서 유지 X, 키 중복 X, 값 중복 O | HashMap, LinkedHashMap, Properties |
package Day0703;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class ExHashSet_10 {
public static void main(String[] args) {
// 컬렉션:자료의 구조를 의미한다.(set,vector,arraylist)
// 컬렉션이 복수의 자료형을 저장으나 안정성이 조금 떨어질 수 있다. 그래서 나온것이 제네릭이다.
// (인터페이스 or 클래스)<데이터형> 참조변수명(객체이름)=new 클래스명<데이터형>;
Set<String> set1=new HashSet<String>();
// Set에 String데이터를 담겠다-Set은 인터페이스이므로 객체생성이 불가능하다.
// 추가... 배열에 비해 가변적이다.
set1.add("사과");
set1.add("포도");
set1.add("사과"); // 중복되었으므로 갯수포함 안됨.
set1.add("키위");
set1.add("오렌지");
set1.add("바나나");
System.out.println("데이터 갯수: "+set1.size());
System.out.println();
System.out.println("출력#1_for~each");
for(String s:set1){
System.out.println(s);
}
System.out.println();
System.out.println("출력#2_Iterator");
Iterator<String> iter= set1.iterator();
while(iter.hasNext()){ // 돌려줄게 있으면 true,
System.out.println(iter.next());
}
System.out.println();
System.out.println("출력#3_for");
Object[] ob=set1.toArray();
for(int i=0;i< ob.length;i++){
System.out.println(ob[i]);
}
// 모든데이터 삭제
set1.clear();
if(set1.isEmpty())
System.out.println("Set타입안에 데이터가 없다."); //true
else
System.out.println("Set타입안에 데이터가 있다."); // false
}
}
결과
데이터 갯수: 5
출력#1_for~each
포도
오렌지
사과
키위
바나나
출력#2_Iterator
포도
오렌지
사과
키위
바나나
출력#3_for
포도
오렌지
사과
키위
바나나
Set타입안에 데이터가 없다.
package Day0703;
import java.util.HashSet;
public class SetInt_11 {
public static void main(String[] args) {
HashSet<Integer> set1=new HashSet<>();
// Set과 HashSet의 차이는 인터페이스와 클래스 차이이다.
set1.add(11);
set1.add(23);
set1.add(42);
set1.add(11);
set1.add(33);
set1.add(76);
System.out.println("갯수: "+set1.size());
System.out.println("출력3_for");
Object[] ob=set1.toArray();
for(int i=0;i< ob.length;i++){
System.out.printf("%5d",ob[i]);
}
}
}
결과
갯수: 5
출력3_for
33 23 42 11 76
package Day0703;
import java.util.List;
import java.util.Vector;
public class List_12 {
public static void main(String[] args) {
// List<String> list=new Vector<>();
Vector<String> list=new Vector<>();
// List,Vector가 컬렉션이다.
// <제네릭>
System.out.println("초기할당크기: "+list.capacity());
System.out.println("초기 데이타 크기: "+list.size());
list.add("사과");
list.add("포도");
list.add("사과"); // 중복이 가능하다
list.add("키위");
list.add("수박");
list.add("낑깡");
System.out.println("초기할당크기: "+list.capacity());
System.out.println("초기 데이타 크기: "+list.size());
System.out.println("출력#1");
for(int i=0;i< list.size();i++){
// System.out.println(list.get(i));
String s=list.get(i);
System.out.println(s);
}
System.out.println("출력#2_for~each");
for(String st:list){
System.out.println(st);
}
System.out.println("출력#3_toArray");
Object[] ob= list.toArray();
for(int i=0;i<ob.length;i++){
System.out.println(ob[i]);
}
}
}
결과
초기할당크기: 10
초기 데이타 크기: 0
초기할당크기: 10
초기 데이타 크기: 6
출력#1
사과
포도
사과
키위
수박
낑깡
출력#2_for~each
사과
포도
사과
키위
수박
낑깡
출력#3_toArray
사과
포도
사과
키위
수박
낑깡
package Day0704;
public class Board_02 {
private String writer; // 글쓴이
private String subject; // 제목
private String content; // 내용
// 디폴트 생성자
public String getWriter() {
return writer;
}
public void setWriter(String writer) {
this.writer = writer;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
// 일반생성자
public Board_02(){
}
// 명시적 생성자
public Board_02(String w, String s, String c) {
this.writer=w;
this.subject=s;
this.content=c;
}
}
package Day0704;
import java.util.List;
import java.util.Scanner;
import java.util.Vector;
public class VectorBoard_02 {
// 값을 담자.
//Vector list=new Vector();
List<Board_02> list=new Vector(); // List는 interface이다. Vector는 클래스이다.
// 클래스 타입으로 지정했으므로 데이터를 꺼내고 받을 때도 클래스이어야 한다.
// 입력 메서드 호출
public void inputBoard(){
Scanner sc=new Scanner(System.in);
String writer,subject,content;
System.out.println("작성자명?");
writer=sc.nextLine();
System.out.println("제목?");
subject=sc.nextLine();
System.out.println("내용?");
content=sc.nextLine();
//Board_02 data=new Board_02(writer,subject,content);
Board_02 data=new Board_02();
data.setWriter(writer);
data.setSubject(subject);
data.setContent(content);
list.add(data);
System.out.println("현재데이터 갯수: "+list.size());
}
// 출력 메서드 호출
public void writeBoard(){
System.out.println("**게시판 출력**");
System.out.println("================================");
for(int i=0;i< list.size();i++){
Board_02 b=list.get(i); // 리스트내에 지정된 위치에 있는 요소값을 돌려준다.
System.out.println("번호: "+(i+1)+"\\t작성자: "+b.getWriter());
System.out.println("제목: "+b.getSubject());
System.out.println("내용: "+b.getContent());
System.out.println("------------------------------------");
}
}
public static void main(String[] args) {
//메서드가 static이 아니라서 생성하고 불러올 수 있다
//static이라면 메서드명만으로 생성 가능
VectorBoard_02 vb=new VectorBoard_02();
// vb.inputBoard();
Scanner sc=new Scanner(System.in);
int n;
while (true){
System.out.println("1.추가 2.전체출력 9.종료 ");
n=Integer.parseInt(sc.nextLine());
if(n==1){
vb.inputBoard();
} else if (n==2) {
vb.writeBoard();
} else if (n==9) {
System.out.println("프로그램 종료");
break;
} else {
System.out.println("잘못입력했어요");
continue;
}
}
}
}
결과
1.추가 2.전체출력 9.종료
1
작성자명?
작성자
제목?
제목이다
내용?
내용이없다
현재데이터 갯수: 1
1.추가 2.전체출력 9.종료
1
작성자명?
추가작성자
제목?
추가제목이다
내용?
제목아니내용추가다
현재데이터 갯수: 2
1.추가 2.전체출력 9.종료
4
잘못입력했어요
1.추가 2.전체출력 9.종료
2
게시판 출력
번호: 1 작성자: 작성자
제목: 제목이다
내용: 내용이없다
번호: 2 작성자: 추가작성자
제목: 추가제목이다
내용: 제목아니내용추가다
1.추가 2.전체출력 9.종료
9
프로그램 종료
package Day0703;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
public class ArrayUnit_13 {
public static void write(String title,List<String> list){
System.out.println("***"+title+"***");
for (int i=0;i< list.size();i++){
System.out.println(i+":"+list.get(i));
}
System.out.println();
}
public static void main(String[] args) {
// List의 여러가지 메서드를 확인 및 연습
String[] data={"영주","순영","연주","진평"};
// 배열의 데이터를 list에 넣기
List<String> list=new ArrayList<>();
for(String d:data){
list.add(d);
}
write("초기에 배열데이타 add 후 출력",list);
////////////////////////////////////////
System.out.println("1번 인덱스 삭제하기");
list.remove(1);
write("1번 삭제후 결과",list); /////////////////////////////////////////////////
System.out.println("현규 추가하기");
list.add("현규");
write("현규 추가 후 출력",list); ////////////////////////////////////////////////
System.out.println("값 변경");
list.set(0,"영환");
write("0번 인덱스 변경 후 출력",list);
/////////////////////////////////////////
System.out.println("전체삭제");
list.clear();
System.out.println("크기: "+list.size());
}
}
***초기에 배열데이타 add 후 출력***
0:영주
1:순영
2:연주
3:진평
1번 인덱스 삭제하기
***1번 삭제후 결과***
0:영주
1:연주
2:진평
현규 추가하기
***현규 추가 후 출력***
0:영주
1:연주
2:진평
3:현규
값 변경
***0번 인덱스 변경 후 출력***
0:영환
1:연주
2:진평
3:현규
전체삭제
크기: 0
package Day0704;
import java.util.ArrayList;
public class ArrayList_01 {
public static void main(String[] args) {
String[] flowers={"장미꽃","프리지아","벚꽃","수국"};
// 임플리먼트 한 클래스? 임플리먼트?
// 객체 삽입, 삭제할 수 있는 컨테이너 클래스를 생성해주자.
ArrayList<String> list=new ArrayList<>();
//리스트와 어레이 리스트의 차이 인터페이스와 그걸 반영한 클래스
// 데이터 담기
for(String f:flowers){
list.add(f); // 삽입
}
System.out.println("size: "+list.size());
/*
// 이건 내가 한거. 일반 배열로 list가 아니다. 나중에 수정 불가.
System.out.println("#출력1_for");
for(int i=0;i<flowers.length;i++){
System.out.println(flowers[i]);
}
*/
System.out.println("#출력1_for");
for(int i=0;i<flowers.length;i++){
String s=list.get(i);
System.out.println(s);
}
System.out.println("#출력2_for-each");
for(String e:list){
System.out.println(e);
}
}
}
결과
size: 4
#출력1_for
장미꽃
프리지아
벚꽃
수국
#출력2_for-each
장미꽃
프리지아
벚꽃
수국