프로그래밍/Java
컬렉션 프레임워크
파니동
2019. 12. 14. 21:08
컬렉션 프레임워크란 자료구조에 대한 API를 JDK에서 미리 구현된 것을 말한다.
컬렉션 프레임워크의 종류는 다양하지만, 대표적으로 List 와 Map이 있다.
우선 List 의 대표적인 클래스인 ArrayList 부터 알아보자.
ArrayList
Member 클래스
package collection;
public class Member {
private int memberId;
private String memberName;
public Member(int memberId, String memberName) {
this.memberId = memberId;
this.memberName = memberName;
}
public int getMemberId() {
return memberId;
}
public void setMemberId(int memberId) {
this.memberId = memberId;
}
public String getMemberName() {
return memberName;
}
public void setMemberName(String memberName) {
this.memberName = memberName;
}
@Override
public String toString() {
return "Member [memberId=" + memberId + ", memberName=" + memberName + "]";
}
}
MemberArrayList 클래스
package collection.arraylist;
import java.util.ArrayList;
import collection.Member;
public class MemberArrayList {
private ArrayList<Member> arrayList;
public MemberArrayList() {
arrayList = new ArrayList<>();
}
public void addMember(Member member) {
arrayList.add(member);
}
public void insertMember(int index, Member member) {
if(index < 0 || index > arrayList.size()) {
System.out.println("list의 범위가 아닙니다. ");
return;
}
arrayList.add(index, member);
}
public boolean removeMember(int memberId) {
for (int i=0; i < arrayList.size(); i++) {
Member member = arrayList.get(i);
int tempId = member.getMemberId();
if(tempId == memberId) {
arrayList.remove(i);
return true;
}
}
System.out.println(memberId + "가 존재하지 않습니다.");
return false;
}
public void showAllMember() {
for(Member member : arrayList) { // 향상된 for 문
System.out.println(member);
}
System.out.println();
}
}
- 회원을 추가하는 기능을 정의함.
테스트
package collection.arraylist;
import collection.Member;
public class MemberArrayListTest {
public static void main(String[] args) {
MemberArrayList memberArrayList = new MemberArrayList();
Member memberLee = new Member(1001, "이지원");
Member memberMeng = new Member(1002, "맹꽁이");
Member memberCloud = new Member(1003, "구르미");
Member memberYoo = new Member(1004, "유도비");
// 추가
Member memberKim = new Member(1000, "김동환");
memberArrayList.addMember(memberLee);
memberArrayList.addMember(memberMeng);
memberArrayList.addMember(memberCloud);
memberArrayList.addMember(memberYoo);
memberArrayList.showAllMember();
System.out.println();
memberArrayList.insertMember(5, memberKim);
memberArrayList.showAllMember();
}
}
LinkedList
package collection;
import java.util.LinkedList;
public class LinkedListTest {
public static void main(String[] args) {
LinkedList<String> myList = new LinkedList<String>();
myList.add("A");
myList.add("B");
myList.add("C");
System.out.println(myList);
myList.add(1, "D");
System.out.println(myList);
myList.addFirst("0");
System.out.println(myList);
myList.removeLast();
System.out.println(myList);
}
}
- 리스트의 값의 수정이 용이하다.
스택과 큐
프로그래밍세계에서 자료구조하면 스택과 큐를 언급하지 않을 수 없다.
자료를 저장할 때 위로 쌓으면 스택, 가로로 나열하면 큐이다.
스택은 마지막에 들어온 것이 제일 빨리 나가야한다.
큐는 먼저 들어온게 먼저 나가야한다.
ArayList로 스택을 구현하기.
package collection.arraylist;
import java.util.ArrayList;
class MyStack {
private ArrayList<String> arrayStack = new ArrayList<>();
public void push(String data) {
arrayStack.add(data);
}
public String pop() {
int len = arrayStack.size();
if(len == 0) {
System.out.println("스택이 비었습니다.");
return null;
}
return(arrayStack.remove(len-1));
}
public int getStackSize() {
return arrayStack.size();
}
}
public class StackTest {
public static void main(String[] args) {
MyStack stack = new MyStack();
stack.push("A");
stack.push("B");
stack.push("C");
System.out.println("크기: " + stack.getStackSize());
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println("크기: " + stack.getStackSize());
}
}
- 배열의 크기를 보면 크기가 늘었다가 줄어드는 것을 확인할 수 있다.
iterator 메서드 사용하기
public boolean removeMember(int memberId) {
// for (int i=0; i < arrayList.size(); i++) {
// Member member = arrayList.get(i);
// int tempId = member.getMemberId();
//
// if(tempId == memberId) {
// arrayList.remove(i);
// return true;
// }
// }
Iterator<Member> ir = arrayList.iterator();
while(ir.hasNext()) {
Member member = ir.next();
int tempId = member.getMemberId();
if(tempId == memberId) {
arrayList.remove(member);
return true;
}
}
System.out.println(memberId + "가 존재하지 않습니다.");
return false;
}
테스트
package collection.arraylist;
import collection.Member;
public class MemberArrayListTest {
public static void main(String[] args) {
MemberArrayList memberArrayList = new MemberArrayList();
Member memberLee = new Member(1001, "이지원");
Member memberMeng = new Member(1002, "맹꽁이");
Member memberCloud = new Member(1003, "구르미");
Member memberYoo = new Member(1004, "유도비");
memberArrayList.addMember(memberLee);
memberArrayList.addMember(memberMeng);
memberArrayList.addMember(memberCloud);
memberArrayList.addMember(memberYoo);
System.out.println("=========== 삭제전 ================ ");
memberArrayList.showAllMember();
System.out.println("=========== 삭제 후 ================ ");
memberArrayList.removeMember(1001); // 이지원 삭제
memberArrayList.showAllMember();
}
}
- iterator는 인덱스를 알 수 없을 때 유용하다.
- 그리고 구현이 조금더 편리하다.
출처: do it 자바프로그래밍