[ 1. Java Iterator 개념 및 사용방법 ]

 

1. 정의

   - Java에서 제공하는 컬렉션(Collection)객체는 보관하고 있는 자료들을 순차적으로 접근하면서 처리할 때 사용하는 Iterator 형식을 제공하고 있다.

   - Iterator는 반복자라고 부르며 컬렉션 종류에 관계없이 같은 방법으로 프로그래밍 할 수 있게 해 준다.

 

2. 사용방법

   - Iterator 개체는 컬렉션 개체의 iterator() 메서드를 호출하여 얻어올 수 있다.

   - hasNext() 메서드로 이동이 가능한지 확인한 후에 next() 메서드로 해당 위치의 보관한 개체를 참조하여 원하는 작업을 수행한다.

 

3. 장.단점

   - 이와 같은 Iterator 개체를 사용하면 size 메서드를 얻어와서 반복 처리하는 것보다 속도에서 불리하다.

   - 이는 Iterator 개체를 사용하는 부분이 있기 때문에 불가피한 사항이다.

     하지만 컬렉션 종류에 관계없이 일관성있게 프로그래밍할 수 있다는 장점을 갖고 있다.

   - 소스 코드에 어떠한 컬렉션을 사용할 지 정해지지 않았지만 컬렉션 내에 보관한 모든 내용을 출력하는 등의 작업을 먼저 하길 원한다면 Iterator를 사용하는 것은 좋은 선택이다.

 

3. 사용가능 객체

 

 

  ArrayList arr = new ArrayList();

  Vector<> vec = new Vector<>();

 LinkedList<Memberlink = new LinkedList<Member>();

 Set<String> st     = new Set<>(String);

 ....

 과 같은 Collection 객체들

 

 

4. Iterator객체 얻기

 

  Iterator it0 = arr.iterator()//vector의 요소를 순차 검색할 객체

  Iterator<> it1 = vec.iterator<>();

  Iterator<Member> it2 = link.iterator<Member>();

  Iterator<String> it3 = st.iterator<String>();

 ...

 

 

5. while 문으로 하나씩 객체 얻기

   - hasNext() : 해당 iterator객체에 값 존재 여부(boolean)

   - next() : iterator객체의 값 얻기.

 

 while (it0.hasNext()){

    String st = (String)it0.next();

 }

 

6. 참고, for문을 통한 객체 얻기

    - 이때는 Iterator객체가 아닌 Collection객체를 사용한다.

    - for 문장이 만나면 자동으로 Collection객체의 요소를 순차적으로 얻어 온다.

 

 

 for(Member mem : link){

    mem.get();

    mem.set();

    ...

 }

 

 

 for(String stOne : st){

    System.out.println(stOne);

    ...

 }

Posted by 농부지기
,

[ 1. Java ArrayList 개념 및 사용방법 ]

 

1. 정의

   - ArrayList<E>는 가변 크기의 배열을 구현한 컬렉션 클래스 이다.

   - Java 언어에서는 순차 리스트를 구현한 ArrayList 클래스를 제공하고 있다.

   - ArrayList는 내부 저장소가 배열처럼 연속적인 메모리 형태이다.

     그리고 저장소의 크기를 변화할 수 있다는 특징이 있다.

     이러한 점은 Vector 클래스와 차이가 없다.

   - 실제 Vector 클래스와 ArrayList 클래스는 거의 모든 부분에서 비슷하다.

 

2. ArrayList와  Vector 차이점

   - ArrayList는 Thread간에 동기화를 지원하지 않기 때문에

      다수의 Thread가 동시에 ArrayList에 요소를 삽입하거나 삭제할 때 총돌의 소지가 있다.

   - Vector는 동기화를 지원한다.

   - ArrayList의 속도가 Vector보다 다소 빠르다고 하지만 큰 의미를 갖는 정도는 아니다.

 

** ArrayList와 Vectory 선언 및 메서드는 거의 동일하다.

 

3. 선언

 

 

  ArrayList tmp = new ArrayList();

  ArrayList<> members = new ArrayList<>();

 ArrayList<Membermembers = new ArrayList<Member>();

 ArrayList<Integer> num     = new ArrayList<>();

 ArrayList<Integer> num2    = new ArrayList<Integer>();

 ArrayList<String>  str     = new ArrayList<String>();

 ArrayList<String>  str2    = new ArrayList<String>(10); //초기 용량 지정

 

4. 요소 추가  (Collection인터페이스 메소드)

    - add()메소드 이용

 

  Member member = new Member(num,name);

  members.add(member); 

  members.add(new Member(10, "농부"));

 members.add(new Member(11, "어부"));

 

 

  num.add(3);

  num.add(null);

  num.add(1, -10);  //요수 중간에 삽입

 

5. 객체 크기 및 특정요소 값 얻기

    - size()메소드 이용 

 

 Member Find(int num){

        int cnt = members.size();              

        for(Member member : members){

               if(member.getNum() == num){

                       return member;

               }

        }

        return null;

 }

 

 

 

for(Integer one : num){

       System.out.println("Integer value=" + one);

}

 

 

 

 Integer obj = num.get(1);

 int i = obj.intValue();

 

 

6. 특정 .요소 삭제

    - remove()메소드 이용  

    - clear()메소드 이용 

 

 Member member = Find(num);

 if(member == null){

        System.out.println("존재하지 않습니다.");

        return;

 }

 members.remove(member); 

 

 

 

 num.remove(1);  //index 1 요소 삭제

 num.removeAllElements();  //method 없음.

 num.clear();  //모든 요소 삭제

 

 

 

 

7. 현재크기 얻기

    - size()메소드 이용  

 

  int size = members.size();      //현 vectory 자료 개수 얻기

 int cap  = members.capacity();  //capacity method 없음.

 

 

 

 

 

Posted by 농부지기
,

[ 1. Java Vector 개념 및 사용방법 ]

 

1. 참고

   - Java 언어에서 배열은 생성할 때 크기를 결정할 수 있어야 한다.

   - 하지만 미리 크게 설정하면 메모리 효율을 떨어지고 작게 설정하면 충분한 개체를 보관할 수 없다.

   - Vector는 확장 가능한 배열로 저장소가 꽉 차면 자동으로 저장소의 크기를 늘려주기 때문에 유연하게 사용할 수 있다.

 

2. 정의

    - Vector 클래스는 Collection 인터페이스를 기반으로 구현한 List 클래스에서 파생한 클래스이다.

    - 따라서 Vector 클래스에는 Collection 인터페이스에 약속한 기능들을 사용할 수 있다.

    - 물론 Vector 클래스에서 추가적으로 제공하는 기능들도 있다.

    - Vectory<E>는 List<E>인터페이스를 구현한 클래스로서 가변개수의 배열이 필요시 적합

    - 요소에 값이 증가되면 자동으로 크기 조절

    - 요소의 값이 중간이 삽입 가능하고, 그 다음 요소들은 한 자리씩 뒤로 이동된다.

 

3. 선언

 

 

  Vector tmp = new Vector();

  Vector<> members = new Vector<>();

 Vector<Membermembers = new Vector<Member>();

 Vector<Integer> num     = new Vector<>();

 Vector<Integer> num2    = new Vector<Integer>();

 Vector<String>  str     = new Vector<String>();

 Vector<String>  str2    = new Vector<String>(10); //초기 용량 지정

 

4. 요소 추가  (Collection인터페이스 메소드)

    - add()메소드 이용

 

  Member member = new Member(num,name);

  members.add(member); 

  members.add(new Member(10, "농부"));

 members.add(new Member(11, "어부"));

 

 

  num.add(3);

  num.add(null);

  num.add(1, -10);  //요수 중간에 삽입

 

5. 객체 크기 및 특정요소 값 얻기

    - size()메소드 이용 

 

 Member Find(int num){

        int cnt = members.size();              

        for(Member member : members){

               if(member.getNum() == num){

                       return member;

               }

        }

        return null;

 }

 

 

for(Integer one : num){

       System.out.println("Integer value=" + one);

}

 

 

 Integer obj = num.get(1);

 int i = obj.intValue();

 

6. 특정 .요소 삭제

    - remove()메소드 이용  

    - removeAllElements()메소드 이용 

 

 Member member = Find(num);

 if(member == null){

        System.out.println("존재하지 않습니다.");

        return;

 }

 members.remove(member); 

 

 

 num.remove(1);  //index 1 요소 삭제

 num.removeAllElements();  //모든 요소 삭제

 

 

 

7. 현재크기 얻기

    - size()메소드 이용  

    - capacity()메소드 이용  : capacity는 기본 10배수로 커짐

 

 

 int size = members.size();      //현 vectory 자료 개수 얻기

 int cap  = members.capacity();  //현 vectory 물리적 크기 얻기

 

 //만약 size가 5이면 cap 은 10

 //     size가 15이면 cap은 20

 

 

Posted by 농부지기
,

[ 1. Java HashMap 개념 및 사용방법 ]

 

1. 정의

    - HashMap 클래스는 Map 인터페이스 기반의 구현 클래스 이다.

    - 그리고 해쉬 테이블 자료 구조를 표현한 클래스 이다.

    - keyvalue를 쌍으로 보관하는 클래스 이다.

    - HashMap 형식 변수 선언 및 개체 생성할 때는 제네릭 형식 인자로 키와 값을 명시하여 표현 한다.

 

2. HashMap 선언

 

 HashMap<String, Book> book_dic = new HashMap<String, Book>();

 

3. HashMap 값 추가 

    - put() 메소드 이용

 

 book_dic.put(isbn, book); 

 

4. HashMap 값 존재 확인

    - containsKey() 메소드 이용

 

 if(book_dic.containsKey(isbn)){

   System.out.println("이미 존재하는 ISBN입니다.");

   return;

 }

 

5. HashMap 한건 삭제

    - remove() 메소드 이용

 

  if(book_dic.containsKey(isbn)){

    book_dic.remove(isbn);

    System.out.println("삭제하였습니다.");

 }else{

     System.out.println("존재하지 않습니다.");

 }

 

6. 특정 Key값 얻기

    - get() 메소드 이용

 

 if(book_dic.containsKey(isbn)){

    Book book = book_dic.get(isbn);

    System.out.println("검색 결과>>"+book.toString());

 }else{

    System.out.println("존재하지 않습니다.");

 }

 

7. 저장된 목록 확인

    - values() 메소드 이용

 

  for(Book book : book_dic.values()){

     System.out.println(book.toString());

 }

 

8. 저장된 Key 목록 얻기

    - keySet() 메소드 이용

 

  for(String isbn : book_dic.keySet()){

     System.out.println(isbn);

 }

 

 

 

 다음 소스는 키를 도서의 ISBN, 값을 도서 개체로 관리하는 프로그램 예제입니다.

 

▷ 소스 3.13 도서 관리 프로그램(HashMap 클래스 이용)

//도서 클래스

public class Book {

        final String isbn;

        String title;

        int price;

        public Book(String isbn, String title,int price){

               this.isbn = isbn;

               this.title = title;

               this.price = price;

        }

        public String ISBN(){

               return isbn;

        }

        public String toString(){

               return String.format("ISBN:%s 이름:%s 가격:%d", isbn, title, price);        }

}

//도서 관리자 클래스

import java.util.HashMap;

import java.util.Scanner;

 

public class BookManager {

        Scanner scan = new Scanner(System.in);

        HashMap<String, Book> book_dic = new HashMap<String, Book>();

        public void Run(){

               int key = 0;

               while((key = selectMenu())!=0){

                       switch(key){

                       case 1: addBook(); break;

                       case 2: removeBook(); break;

                       case 3: searchBook(); break;

                       case 4: listBook(); break;

                       case 5: listISBN(); break;

                       default: System.out.println("잘못 선택하였습니다."); break;

                       }

               }

               System.out.println("종료합니다...");

        }

        int selectMenu(){

               System.out.println("1:추가 2:삭제 3:검색 4:도서 목록 5:ISBN 목록 0:종료");

               int key = scan.nextInt();

               scan.nextLine();

               return key;

        }

        void addBook(){

               String isbn;           

               System.out.print("추가할 도서 ISBN:");

               isbn = scan.nextLine();

               if(book_dic.containsKey(isbn)){

                       System.out.println("이미 존재하는 ISBN입니다.");

                       return;

               }

               String title;

               int price;

               System.out.print("도서 제목:");

               title = scan.nextLine();

               System.out.print("가격:");

               price = scan.nextInt();

               scan.nextLine();

               Book book = new Book(isbn,title,price);

               book_dic.put(isbn, book);

               System.out.println(book.toString()+" 생성하였습니다."); 

              

        }

        void removeBook(){

               String isbn;           

               System.out.print("삭제할 도서 ISBN:");

               isbn = scan.nextLine();

               if(book_dic.containsKey(isbn)){

                       book_dic.remove(isbn);

                       System.out.println("삭제하였습니다.");                 

               }

               else{

                       System.out.println("존재하지 않습니다.");               

               }             

        }

        void searchBook(){

               String isbn;           

               System.out.print("검색할 도서 ISBN:");

               isbn = scan.nextLine();

               if(book_dic.containsKey(isbn)){

                       Book book = book_dic.get(isbn);

                       System.out.println("검색 결과>>"+book.toString());                                           

               }

               else{

                       System.out.println("존재하지 않습니다.");               

               }

        }

        void listBook(){

               System.out.println("도서 목록");

               int cnt = book_dic.size();

               System.out.println("도서 :"+cnt);

               for(Book book : book_dic.values()){

                       System.out.println(book.toString());

               }

        }

        void listISBN(){

               System.out.println("ISBN 목록");

               int cnt = book_dic.size();

               System.out.println("도서 :"+cnt);

               for(String isbn : book_dic.keySet()){

                       System.out.println(isbn);

               }

        }

}

//ISBN 키로 도서 검색(HashMap 클래스 이용)

public class Program {

        public static void main(String[] args){

               BookManager bm = new BookManager();

               bm.Run();

        }

}

 

▷ 소스 3.13 실행 결과

1:추가 2:삭제 3:검색 4:도서 목록 5:ISBN 목록 0:종료

1

추가할 도서 ISBN:1234

도서 제목:Java

가격:2000

ISBN:1234 이름:Java 가격:2000 생성하였습니다.

1:추가 2:삭제 3:검색 4:도서 목록 5:ISBN 목록 0:종료

1

추가할 도서 ISBN:4321

도서 제목:C언어

가격:5000

ISBN:4321 이름:C언어 가격:5000 생성하였습니다.

1:추가 2:삭제 3:검색 4:도서 목록 5:ISBN 목록 0:종료

1

추가할 도서 ISBN:3421

도서 제목:자료구조

가격:2000

ISBN:3421 이름:자료구조 가격:2000 생성하였습니다.

1:추가 2:삭제 3:검색 4:도서 목록 5:ISBN 목록 0:종료

4

도서 목록

도서 :3

ISBN:1234 이름:Java 가격:2000

ISBN:4321 이름:C언어 가격:5000

ISBN:3421 이름:자료구조 가격:2000

1:추가 2:삭제 3:검색 4:도서 목록 5:ISBN 목록 0:종료

5

ISBN 목록

도서 :3

1234

4321

3421

1:추가 2:삭제 3:검색 4:도서 목록 5:ISBN 목록 0:종료

3

검색할 도서 ISBN:1234

검색 결과>>ISBN:1234 이름:Java 가격:2000

1:추가 2:삭제 3:검색 4:도서 목록 5:ISBN 목록 0:종료

2

삭제할 도서 ISBN:4321

삭제하였습니다.

1:추가 2:삭제 3:검색 4:도서 목록 5:ISBN 목록 0:종료

4

도서 목록

도서 :2

ISBN:1234 이름:Java 가격:2000

ISBN:3421 이름:자료구조 가격:2000

1:추가 2:삭제 3:검색 4:도서 목록 5:ISBN 목록 0:종료

5

ISBN 목록

도서 :2

1234

3421

1:추가 2:삭제 3:검색 4:도서 목록 5:ISBN 목록 0:종료

0

종료합니다...

 



출처: http://ehclub.co.kr/3083 [언제나 휴일]

 

Posted by 농부지기
,