[Java 언어 활용] 3.6 ArrayList 클래스
Java 언어에서는 순차 리스트를 구현한 ArrayList 클래스를 제공하고 있습니다. ArrayList는 내부 저장소가 배열처럼 연속적인 메모리 형태입니다. 그리고 저장소의 크기를 변화할 수 있다는 특징이 있습니다. 이러한 점은 앞에서 다룬 Vector 클래스와 차이가 없습니다.
실제 Vector 클래스와 ArrayList 클래스는 거의 모든 부분에서 비슷합니다. 차이가 있는 부분은 동기화를 할 수 있는가 여부입니다. 여기서 얘기하는 동기화란 여러 개의 스레드에서 공유 자원을 경쟁하여 사용할 때 개발자가 임계 영역에 진입하고 나가는 것을 제어하여 자원 경쟁 문제에서의 교착 상태 발생등을 방지하는 것을 말합니다.
따라서 멀티 스레드를 이용하여 비동기 프로그래밍을 한다고 할 때 컬렉션을 여러 스레드에서 경쟁해서 사용한다면 Vector 클래스를 사용하시기 바랍니다. 그렇지 않다면 어느 것을 사용해도 무방합니다. ArrayList의 속도가 다소 빠르다고 하지만 큰 의미를 갖는 정도는 아닙니다.
다음은 3.4에서 다루었던 소스 3.4에서 Vector 개체를 생성하는 부분만 ArrayList로 변경한 코드입니다. 다른 부분에 코드를 변경하지 않아도 잘 동작하는 것을 알 수 있습니다.
import java.util.Scanner;
//import java.util.Vector;
import java.util.ArrayList;
public class MemberManager {
Scanner scan = new Scanner(System.in);
//Vector<Member> members = new Vector<Member>();
ArrayList<Member> members = new ArrayList<Member>();
... 이후 내용은 차이가 없음...
▷ 소스 3.8 ArrayList를 이용한 회원 관리 프로그램
//Member.java //회원 클래스 public class Member { final int num; String name; public Member(int num, String name){ this.num = num; this.name = name; } public int getNum(){ return num; } public String toString(){ return String.format("번호:%d 이름:%s", num,name); } } |
//MemberManager.java //회원 관리자 클래스
import java.util.Scanner; //import java.util.Vector; import java.util.ArrayList;
public class MemberManager { Scanner scan = new Scanner(System.in); //Vector<Member> members = new Vector<Member>(); ArrayList<Member> members = new ArrayList<Member>(); public void Run(){ int key = 0; while((key = selectMenu())!=0){ switch(key){ case 1: addMember(); break; case 2: removeMember(); break; case 3: searchMember(); break; case 4: listMember(); break; default: System.out.println("잘못 선택하였습니다."); break; } } System.out.println("종료합니다..."); } int selectMenu(){ System.out.println("1:추가 2:삭제 3:검색 4:목록 0:종료"); int key = scan.nextInt(); scan.nextLine(); return key; } void addMember(){ int num = 0; String name=""; System.out.print("추가할 회원 번호:"); num = scan.nextInt(); scan.nextLine(); System.out.print("회원 이름:"); name = scan.nextLine(); Member member =new Member(num,name); members.add(member); System.out.println(member.toString()+" 생성하였습니다.");
} void removeMember(){ int num = 0; System.out.print("삭제할 회원 번호:"); num = scan.nextInt(); scan.nextLine(); Member member = Find(num); if(member == null){ System.out.println("존재하지 않습니다."); return; } members.remove(member); System.out.println(member.toString()+" 삭제하였습니다."); } void searchMember(){ int num = 0; System.out.print("검색할 회원 번호:"); num = scan.nextInt(); scan.nextLine(); Member member = Find(num); if(member == null){ System.out.println("존재하지 않습니다."); return; } System.out.println("검색 결과>>"+member.toString());
} void listMember(){ System.out.println("전체 목록"); int cnt = members.size(); System.out.println("회원 수:"+cnt); for(Member member : members){ System.out.println(member.toString()); } } Member Find(int num){ int cnt = members.size(); for(Member member : members){ if(member.getNum() == num){ return member; } } return null; } } |
//Program.java //ArrayList 클래스 사용한 회원 관리 프로그램 public class Program { public static void main(String[] args){ MemberManager mm = new MemberManager(); mm.Run(); } } |
▷ 소스 3.8 실행 결과
1:추가 2:삭제 3:검색 4:목록 0:종료 1 추가할 회원 번호:3 회원 이름:홍길동 번호:3 이름:홍길동 생성하였습니다. 1:추가 2:삭제 3:검색 4:목록 0:종료 1 추가할 회원 번호:2 회원 이름:강감찬 번호:2 이름:강감찬 생성하였습니다. 1:추가 2:삭제 3:검색 4:목록 0:종료 4 전체 목록 회원 수:2 번호:3 이름:홍길동 번호:2 이름:강감찬 1:추가 2:삭제 3:검색 4:목록 0:종료 3 검색할 회원 번호:2 검색 결과>>번호:2 이름:강감찬 1:추가 2:삭제 3:검색 4:목록 0:종료 2 삭제할 회원 번호:2 번호:2 이름:강감찬 삭제하였습니다. 1:추가 2:삭제 3:검색 4:목록 0:종료 4 전체 목록 회원 수:1 번호:3 이름:홍길동 1:추가 2:삭제 3:검색 4:목록 0:종료 0 종료합니다... |
'언어 자료구조 알고리즘 > 디딤돌 Java 언어 Part2 활용' 카테고리의 다른 글
[Java 언어 활용] 3.11 Map 인터페이스 (0) | 2016.12.16 |
---|---|
[Java 언어 활용] 3.10 HashSet 클래스 (0) | 2016.12.10 |
[Java 언어 활용] 3.9 Queue 인터페이스 (0) | 2016.12.10 |
[Java 언어 활용] 3.8 Stack 클래스 (0) | 2016.12.10 |
[Java 언어 활용] 3.7 LinkedList 클래스 (0) | 2016.12.10 |
[Java 언어 활용] 3.5 Iterator 클래스 (0) | 2016.12.10 |
[Java 언어 활용] 3.4.2 Vector를 이용하여 인덱스로 관리하기 (0) | 2016.12.10 |
[Java 언어 활용] 3.4.1 Vector를 이용하여 특정 키 순으로 보관하기 (0) | 2016.12.10 |
[Java 언어 활용] 3.4 Vector 클래스 (0) | 2016.12.10 |
[Java 언어 활용] 3.3 Collection 인터페이스 (0) | 2016.12.10 |