프로그래밍/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 자바프로그래밍