반응형
컬렉션 프레임워크
- 객체들을 효율적으로 추가,삭제,검색할 수 있도록 제공되는 컬렉션 라이브러리
- java.util 패키지에 포함되어 있어 import java.util.*; 필요
- 인터페이스를 통해 정형화된 방법으로 다양한 컬렉션 클래스 이용
- list, set, map
- 컬렉션 프레임워크 사용시 원소의 데이터타입은 제네릭을 사용하여 명시한다
배열의 문제점
- 배열의 길이는 고정되어 변경할 수 없음
- 빈칸을 계속 빈칸으로 유지함
List
- 가장 배열과 유사한 컬렉션 프레임워크
- 인덱스를 가지고 대입된 원소의 순서를 유지하고 있으며 중복데이터 허용
구현 클래스
ArrayList
Vector
LinkedList
List 인터페이스에 arrayList 담기
List 인터페이스는 그저 통로!
List 인터페이스를 통해 arrayList에 넣게 되는것!!
String[] sarray = {"a","b","c"};
//만들어지는 ArrayList 객체의 원소 타입은 String
ArrayList<String> arrayList = new ArrayList<String>();
//String[] sarray2 = new String[1000]; => 비효율적
List<String> list = arrayList;
객체 추가
//값만 쓰면 맨 뒤에 추가
list.add("A");
list.add("B"); // {"A","B"}
//오버로딩 되어있어 매개변수 갯수가 다른 메소드 사용가능
//인덱스 위치에 값 추가
list.add(1, "C"); // {"A","C","B"}
//인덱스 위치의 값을 다른 값으로 변경
list.set(0, "D"); // {"D","C","B"}
//arrayList.add("arrayAdd"); 가능. arrayList와 list 모두 추가됨
for(String l : arrayList) {
System.out.println("arrayList : " + l);
}
for(String l : list) {
System.out.print(l + " ");
}
System.out.println();
실행결과)
List 인터페이스를 통해 arrayList에 넣게 되는것이기 때문에 arrayList를 출력하든 list를 출력하든 똑같은 원소가 나온다
arrayList : D arrayList : C arrayList : B D C B |
검색 메소드
1) get(index) : 인덱스에 존재하는 원소를 반환
String zero = list.get(0);
System.out.println(zero);
//list 컬렉션의 원소 B를 추출하여 출력
System.out.println(list.get(2));
2) size() : 컬렉션 안의 원소 갯수를 반환
int size = list.size();
System.out.println(size);
for(int i = 0; i < size; i++) {
System.out.print(list.get(i) + " ");
}
System.out.println();
3) isEmpty() : 컬렉션에 원소가 하나도 없다면 true, 있다면 false
boolean empty = list.isEmpty();
System.out.println(empty); //false
구현객체가 없는 상태에서는 isEmpty()를 사용하여 비교할 수 없다
NullPointerException 발생!
list = null;
empty = list.isEmpty(); //java.lang.NullPointerException
System.out.println(empty);
새로 객체를 생성하고 조회시 true가 나온다
list = new ArrayList<String>();
empty = list.isEmpty();
System.out.println(empty); //true
4) contains(검색데이터) : 검색데이터가 컬렉션에 존재한다면 true, 없다면 false
list = arrayList; // {"D","C","B"}
boolean contain = list.contains("D");
System.out.println(contain); //true
객체 삭제
remove(인덱스) : 인덱스 위치의 원소를 제거한 후 뒤에서 앞으로 한칸씩 당겨진다.
System.out.println(list.get(0)); //D
list.remove(0);
System.out.println(list.get(0)); //C
System.out.println(list.size()); //2
ArrayList에 클래스 넣기
1) 클래스 Student : 이름과 학교이름, 나이 정보를 필드로 선언하고 getter, setter를 만들어놨다
public class Student {
private String name;
private String schoolNM;
private int age;
public Student(String name,String schoolNM,int age) {
this.name = name;
this.schoolNM = schoolNM;
this.age = age;
}
public String getName() { return name; }
public String getSchoolNM() { return schoolNM; }
public int getAge() { return age; }
public void setName(String name) { this.name = name; }
public void setSchoolNM(String schoolNM) { this.schoolNM = schoolNM; }
public void setAge(int age) { this.age = age; }
}
Student s1 = new Student("홍길동","1학교",20);
Student s2 = new Student("홍길민","2학교",20);
Student s3 = new Student("홍길우","3학교",20);
//위에 있는 Student 객체를 담을 수 있는 ArrayList 객체를 생성해보세요
//이때 참조변수명은 sArray
ArrayList<Student> sArray = new ArrayList<Student>();
//sArray에 참조된 구현 객체를 List 인터페이스와 연결
List<Student> sList = sArray;
sList.add(s1);
sList.add(s2);
sList.add(s3);
//s4를 sList를 통하여 sArray 컬렉션의 2번 인덱스에 추가
//이때 원래 2번 인덱스 원소는 뒤로 한칸씩 밀립니다
Student s4 = new Student("홍길수","4학교",30);
sList.add(2, s4);
//sList를 통해 sArray 컬렉션의 맨뒤로 s1을 한번 더 추가
sList.add(s1);
boolean result = sList.get(0) == sList.get(sList.size()-1);
System.out.println(result); //true
//sList가 바라보는 sArray 객체의 2번 인덱스에 존재하는 Student의 이름과 나이를 출력
System.out.println("2번인덱스정보: "+sList.get(2).getName() + " " + sList.get(2).getAge());
//sList가 바라보고 있는 sArray 객체의 모든 원소의 이름,나이,학교명을 출력
//향상된 for문 사용
for(Student s : sList) {
System.out.println(s.getName() + " " + s.getSchoolNM() + " " + s.getAge());
}
System.out.println();
//일반 for문 사용
for(int i = 0; i < sList.size(); i++) {
Student s = sList.get(i);
System.out.println(s.getName() + " " + s.getSchoolNM() + " " + s.getAge());
}
//sList를 통하여 sArray의 원소들 중 name 필드가 "홍길민"인 원소의 인덱스를 출력
for(int i = 0; i < sList.size(); i++) {
Student s = sList.get(i);
if(s.getName().equals("홍길민")) {
System.out.println("홍길민 데이터의 인덱스 번호: " + i);
break;
}
}
실행결과)
true 2번인덱스정보: 홍길수 30 홍길동 1학교 20 홍길민 2학교 20 홍길수 4학교 30 홍길우 3학교 20 홍길동 1학교 20 홍길동 1학교 20 홍길민 2학교 20 홍길수 4학교 30 홍길우 3학교 20 홍길동 1학교 20 홍길민 데이터의 인덱스 번호: 1 |
2) Board
public class Board {
private String subject;
private String content;
private String writer;
public String getSubject() { return subject; }
public String getContent() { return content; }
public String getWriter() { return writer; }
public void setSubject(String subject) { this.subject = subject; }
public void setContent(String content) { this.content = content; }
public void setWriter(String writer) { this.writer = writer; }
public Board(String subject,String content,String writer) {
this.subject = subject;
this.content = content;
this.writer = writer;
}
}
import java.util.*;
public class ArrayListExample {
public static void main(String[] args) {
//ArrayList 컬렉션 생성
List<Board> list = new ArrayList<>();
//객체 추가
list.add(new Board("제목1","내용1","글쓴이1"));
list.add(new Board("제목2","내용2","글쓴이2"));
list.add(new Board("제목3","내용3","글쓴이3"));
list.add(new Board("제목4","내용4","글쓴이4"));
list.add(new Board("제목5","내용5","글쓴이5"));
//저장된 총 객체 수 얻기
int size = list.size();
System.out.println("총 객체 수:"+size);
System.out.println();
//특정 인덱스의 객체 가져오기
Board b = list.get(2);
System.out.println(b.getSubject() + " " + b.getContent() + " " + b.getWriter());
System.out.println();
//모든 객체를 하나씩 가져오기
for(int i = 0; i < list.size(); i++) {
System.out.println(b.getSubject() + " " + b.getContent() + " " + b.getWriter());
}
System.out.println();
//객체 삭제
list.remove(2); //2번 인덱스를 삭제하면 3번인덱스가 2번 인덱스로 변경
list.remove(2); //다시 2번 인덱스 제거 가능
//향상된 for문으로 모든 객체를 하나씩 가져오기
for(Board bf : list) {
System.out.println(bf.getSubject() + " " + bf.getContent() + " " + bf.getWriter());
}
}
}
실행결과)
총 객체 수:5 제목3 내용3 글쓴이3 제목3 내용3 글쓴이3 제목3 내용3 글쓴이3 제목3 내용3 글쓴이3 제목3 내용3 글쓴이3 제목3 내용3 글쓴이3 제목1 내용1 글쓴이1 제목2 내용2 글쓴이2 제목5 내용5 글쓴이5 |
3) Board2와 ListExample을 보고 BoardDAO를 만들고 밑의 출력결과가 나오도록 getBoardList() 메소드 만들기
출력결과)
제목1-내용1
제목2-내용2
제목3-내용3
public class Board2 {
private String title;
private String content;
public Board2(String title,String content) {
this.title = title;
this.content = content;
}
public String getTitle() { return title; }
public String getContent() { return content; }
public void setTitle(String title) { this.title = title; }
public void setContent(String content) { this.content = content; }
}
import java.util.List;
public class ListExample {
public static void main(String[] args) {
BoardDAO dao = new BoardDAO();
List<Board2> list = dao.getBoardList();
for(Board2 board : list) {
System.out.println(board.getTitle() + "-" + board.getContent());
}
}
}
만든 결과)
public class BoardDAO {
public ArrayList<Board2> getBoardList(){
ArrayList<Board2> list = new ArrayList<>();
list.add(new Board2("제목1","내용1"));
list.add(new Board2("제목2","내용2"));
list.add(new Board2("제목3","내용3"));
return list;
}
}
List로 바꿔도 똑같이 동작한다
public class BoardDAO {
public List<Board2> getBoardList(){
List<Board2> list = new ArrayList<>();
list.add(new Board2("제목1","내용1"));
list.add(new Board2("제목2","내용2"));
list.add(new Board2("제목3","내용3"));
return list;
}
}
반응형
'Java' 카테고리의 다른 글
[Java] Set, Iterator (0) | 2024.08.22 |
---|---|
[Java] ArrayList, List 연습 (0) | 2024.08.21 |
[Java] 제네릭 타입 (0) | 2024.08.15 |
[Java] 제네릭 (0) | 2024.08.14 |
[Java] Date, SimpleDateFormat, Calendar (0) | 2024.08.13 |