자바 컬렉션 예제 - jaba keollegsyeon yeje

영보의 SystemOut.log

자바/스프링 기반 디지털 융합 웹 개발자 양성과정 2일차

 Java 컬렉션 개요와 종류

# 자바 컬렉션 개요

 - 컴퓨터공학에서는 '자료구조' 분야가 있다. 자료구조는 많은 양의 데이터를 효율적으로 관리 (정렬, 검색, 추가, 수정, 삭제)하고자 데이터를 저장하는 방법이다.

 - 자바는 여러 가지 자료구조 알고리즘을 API로 제공한다. 덕분에 우리는 복잡한 알고리즘을 몰라도 API를 사용해 자료구조를 구현할 수 있다. 이처럼 자료구조를 통해 데이터 그룹을 효율적으로 처리할 수 있도록 지원하는 자바 API들을 '자바 컬렉션 프레임워크'라고 한다.

 - 여러 가지 자료구조 알고리즘을 미리 구현하여 데이터를 효율적으로 처리하는 자바 API다.

# 자바 컬렉션 종류

자바 컬렉션 예제 - jaba keollegsyeon yeje

- 키와 값을 쌍으로 저장하는 자료구조

List Set Map
 - 순서를 유지하고 저장
 - 중복 저장 가능
 - 순서를 유지하지 않고 저장
 - 중복 저장 안 됨
 - 키와 값의 쌍으로 저장
 - 키는 중복 저장 안 됨

 List 계열 클래스들 예제

# 예제1 - VetorClassEx.java

package List계열의클래스들예제; import java.util.*; public class VectorClassEx { public static void main(String[] args) { String[] name = {"김진명","최인호","조정래","김홍신","박경리"}; // Vector 객체 생성 // List<E> list = new Vector<E>(); // 일반적인 경우 List<String> list = new Vector<String>(4,3); //Vector 클래스의 주요 메소드 적용 System.out.println("벡터에 저장된 요소의 개수 : " +list.size()); // 0이 출력됨 System.out.println("벡터의 용량은 : "+((Vector<String>)list).capacity()); // 4 for(int i=0; i<name.length; i++) { list.add(name[i]); // 객체 추가 } System.out.println("벡터에 저장된 요소의 개수 : " +list.size()); // 5이 출력됨 System.out.println("벡터의 용량은 : "+((Vector<String>)list).capacity()); // 7 System.out.println(list); //[김진명, 최인호, 조정래, 김홍신, 박경리] list.add(2,"공지영"); System.out.println(list); //[김진명, 최인호, 공지영, 조정래, 김홍신, 박경리] /* 객체 검색 get() 메소드, contains(), size() */ System.out.println(list.get(1)); // 최인호 boolean contains_result = list.contains("김홍신"); System.out.println(contains_result); // true 출력 boolean contains_result2 = list.contains("홍길동"); System.out.println(contains_result2); // false 출력 System.out.println(list.size()); // 6 /* 객체 변경 set() 메소드 */ // "공지영" 객체를 "이문열" 객체로 변경하고자 한다. list.set(2, "이문열"); System.out.println(list); // [김진명, 최인호, 이문열, 조정래, 김홍신, 박경리] /* 객체 삭제 remove() 메소드 */ list.remove(3); System.out.println(list); // [김진명, 최인호, 이문열, 김홍신, 박경리] list.remove("김홍신"); System.out.println(list); // [김진명, 최인호, 이문열, 박경리] System.out.println(); // 개행 /* 객체 정렬 => 오름차순 */ System.out.println("[객체 오름 차순 정렬]"); Collections.sort(list); System.out.println(list); // [김진명, 박경리, 이문열, 최인호] System.out.println(); // 개행 /* 객체 정렬 => 내림차순 */ System.out.println("[객체 내림 차순 정렬]"); Collections.sort(list, Collections.reverseOrder()); System.out.println(list); // [최인호, 이문열, 박경리, 김진명] } }

#예제2 - ArrayListClassEx.java

package List계열의클래스들예제; import java.util.*; public class ArrayListClassEx { public static void main(String[] args) { // ArrayList 객체 생성 // List List<Integer> list = new ArrayList<Integer>(); /* 객체 추가 */ list.add(new Integer(90)); // 정수 90을 객체화 시킴 ! list.add(90); 가능 list.add(new Integer(85)); list.add(new Integer(100)); list.add(new Integer(70)); list.add(new Integer(75)); System.out.println(list); // [90, 85, 100, 70, 75] list.add(2,60); System.out.println(list); // [90, 85, 60, 100, 70, 75] /* 객체 변경 */ list.set(1, 70); System.out.println(list); // [90, 70, 60, 100, 70, 75] /* 객체 삭제 */ list.remove(3); System.out.println(list); // [90, 70, 60, 70, 75] } }

 

Vector, ArrayList 클래스는 모두 '동적' 배열(즉 가변 배열)클래스 이다. 고정 배열이 가지고 있는 문제점을 해결하기 위해서 만들어진 클래스들이다.

  # ArrayList와 Vector의 차이점 : Vector 는 동기화가 보장되지만, ArrayList는 동기화가 되지 않는다.

 Set 계열 클래스들 예제

#예제1 - Member.java

package Set계열의클래스들예제; public class Member { // 인스턴스 변수(객체 변수) 선언 private String name; // 이름 private int age; // 나이 private String juminNum; // 주민번호 // 생성자 public Member(String name, int age, String juminNum) { this.name = name; this.age = age; this.juminNum = juminNum; } @Override // 재정의 public int hashCode() { // TODO Auto-generated method stub return super.hashCode() + age + juminNum.hashCode(); } @Override // 재정의 public boolean equals(Object obj) { // 참조변수 instanceof 타입(클래스명) if(obj instanceof Member) { Member member = (Member)obj; return member.name.equals(name) && (member.age == age) && member.juminNum.equals(juminNum); }else { return false; } } }

- 개발자가 어떤 클래스를 구현하면 컴파일 시 최상위 클래스인 Object 클래스로부터 상속을 받게된다.

#예제2 - HashSetClassEX.java

package Set계열의클래스들예제; import java.util.*; public class HashSetClassEx { // 실행 클래스 public static void main(String[] args) { // HashSet 객체 생성 Set<Member> member_set = new HashSet<Member>(); //[사례] 금융권인 경우 똑같은 객체가 두 개가 생성될 수 없다. Member member1 = new Member("손흥민", 29, "111111-1111111"); Member member2 = new Member("손흥민", 29, "111111-1111111"); member_set.add(member1); member_set.add(member2); System.out.println("총 객체 수 : " + member_set.size()); // 총 객체수 1 System.out.println(member1.hashCode()); System.out.println(member2.hashCode()); System.out.println(member1.equals(member2)); } }

 HashSet은 객체를 저장하기 전에 먼저 객체의 hashCode()메소드를 호출해서 해시코드 값을 얻는다.  그리고 이미 저장되어 있는 객체들의 해시코드와 비교한다.  만약 동일한 해시코드가 있다면 equals() 메소드로 두 객체를 비교해서 true가 나오면 동일한 객체로 판단하고 중복저장을 하지 않는다.

#예제3 - LottoGenerator.java

package Set계열의클래스들예제; import java.util.*; public final class LottoGeneratorEx { public static void main(String[] args) { Set set = new HashSet(); for(int i=0; set.size() < 6; i++) { Random rnd = new Random(); int number = rnd.nextInt(45); // 1~45까지 난수 발생 set.add(new Integer(number)); } List list = new ArrayList(set); Collections.sort(list); System.out.println("<<< 로또번호 보여주기 >>>"); System.out.println(list); } }

https://qh5944.tistory.com/manage/newpost/?type=post&returnURL=%2Fmanage%2Fposts%2F# 

TISTORY

나를 표현하는 블로그를 만들어보세요.

www.tistory.com

자바 컬렉션 예제 - jaba keollegsyeon yeje

 Map 계열 클래스들 예제

#예제1 - HashtableClassEx.java

package Map계열의클래스예제; import java.util.*; public class HashtableClassEx { public static void main(String[] args) { String[] userID = {"Lee", "Kim", "Jang", "Wang", "Ha"}; String[] password = {"L123", "L456", "J234", "W896", "H567"}; // Hashtable 생성 Hashtable<String, String> ht = new Hashtable<String, String>(userID.length); /* 객체 저장 */ for(int i=0; i<userID.length; i++) { ht.put(userID[i], password[i]); } System.out.println(ht); // {Jang=J234, Ha=H567, Lee=L123, Wang=W896, Kim=L456} boolean FLAG = true; // 스위치 변수는 대문자로 주자! while(FLAG) { //무한루프 System.out.println("유저 ID는 >>>> "); Scanner in = new Scanner(System.in); String user_key = in.nextLine(); String pw_value = ht.get(user_key); if(pw_value != null) { System.out.println("유저 PASSWORD는 >>>> "); String passwordInputValue = in.nextLine(); if(pw_value.equals(passwordInputValue)) { System.out.println("인증 성공!!"); } else { System.out.println("인증 실패!!"); } }else { System.out.println("입력한 유저 ID는 등록되어 있지 않습니다.!!"); } } } }