nme.kr

Ch.13 컬렉션프레임워크

컬렉션 프레임워크 개요

List 인터페이스

package chapter13;

import java.util.ArrayList;
import java.util.List;

public class ListEx {

	public static void main(String[] args) {
		
		List list = new ArrayList();
		list.add(1);list.add(2);
		list.add(3);list.add(4);
		list.add(5);list.add(6);
		System.out.println(list);
		
		for(int i=0;i<list. size();i++) {
			System.out.println(i+":"+ list.get(i));
		}

	}

}

package chapter13;

import java.util.Vector;

public class ListEx2 {

	public static void main(String[] args) {
		
		Vector list = new Vector();
		list.add(1.2); // List 메서드
		list.add(Math.PI); // List 메서드
		list.addElement(3.4); // 이전 메서드
		
		// 향상된 for문
		for (Object o : list) {
			System.out.println(o);
		}
		double num = 3.4;
		
		// 해당 요소의 인덱스 (없으면 -1)
		int index = list.indexOf(num);
		if (index >= 0) { // 요소가 존재함
			System.out.println(num + " 의 위치 :" + index);
		} else { // 존재하지 않음
			System.out.println(num + " 는 list 에 없습니다");
		}
		
		num = 1.2;
		// 값이 존재하는지 확인
		if (list.contains(num)) {
			// 제거(이전 메서드)
			list.removeElement(num);
			System.out.println(num + " 삭제됨");
		}
		
		// 해당 요소의 인덱스 (없으면 -1)
		System.out.println(list.indexOf(num));
		System.out.println(list); // toString()

	}

}

Shape.java


abstract class Shape {
	
	// 필드
	int x, y;
	
	// 생성자
	Shape() {
		this(0, 0);
	}
	Shape(int x, int y) {
		this.x = x;
		this.y = y;
	}
	
	// 추상메서드
	abstract double area();
	abstract double length();
	
	// 일반 메서드
	public String getLocation() {
		return "x:" + x + ",y:" + y;
	}
	
}

Circle.java

package chapter13;

public class Circle extends Shape {

	// 필드
	double r;
	
	// 생성자
	Circle() {
		this(1);
	}
	Circle(double r) {
		this.r = r;
	}
	
	// 메서드 재정의(오버라이딩)
	@Override
	double area() {
		return (r * r) * Math.PI;
	}
	
	@Override
	double length() {
		return (r * 2) * Math.PI;
	}
	
}

Rectangle.java

package chapter13;

public class Rectangle extends Shape {

	// 필드
	int w,h;
	
	// 생성자
	Rectangle() {
		this(1,1);
	}
	Rectangle(int w, int h) {
		this.w = w;
		this.h = h;
	}
	
	// 메서드 재정의(오버라이딩)
	@Override
	double area() {
		return (w * h);
	}
	
	@Override
	double length() {
		return (w + h) * 2;
	}
	
}

ListEx3.java

package chapter13;

import java.util.ArrayList;
import java.util.List;

public class ListEx3 {

	public static void main(String[] args) {
		
		List list = new ArrayList();
		// list 객체에 요소 추가
		list.add(new Circle(3.0));
		list.add(new Rectangle(3, 4));
		list.add(new Circle(5));
		list.add(new Rectangle(5,6));
		
		System.out.println(" 전체 도형의 면적의 합 :" + sumArea(list));
		System.out.println(" 전체 도형의 둘레의 합 :" + sumLength(list));
				
	}
	
	private static double sumLength(List list) {
		double sumlength = 0;
		
		for (int i=0; i<list.size(); i++) {
			// list 객체 형변환
			Shape s = (Shape)list.get(i);
			sumlength += s.length();
		}
		return sumlength;
	}
		
	private static double sumArea(List list) {
		double sumarea = 0;
		
		for (int i = 0; i < list.size(); i++) {
			// list 객체 형변환과 메서드 호출 동시에
			sumarea += ((Shape)list.get(i)).area();
		}
		return sumarea;
	}
}

package chapter13;

import java.util.ArrayList;
import java.util.LinkedList;

public class ArrayListCompareLinkedList {

	public static void main(String[] args) {

		ArrayList alist = new ArrayList();
		LinkedList llist = new LinkedList();
		
		for (int i=0; i<100000; i++) {
			alist.add(i);
			llist.add(i);
		}
		
		System.out.println("ArrayList Access");
		long start = System.currentTimeMillis();
		for (int i=0; i<alist.size(); i++) {
			alist.get(i);
		}
		long end = System.currentTimeMillis();
		System.out.println(end-start);
		
		System.out.println("LinkedList Access");
		start = System.currentTimeMillis();
		for (int i=0; i<llist.size(); i++) {
			llist.get(i);
		}
		end = System.currentTimeMillis();
		System.out.println(end-start);

	}

}

package chapter13;

import java.util.ArrayList;
import java.util.LinkedList;

public class ArrayListCompareLinkedList2 {

	public static void main(String[] args) {

		ArrayList alist = new ArrayList();
		LinkedList llist = new LinkedList();
		
		for (int i=0; i<100000; i++) {
			alist.add(i);
			llist.add(i);
		}
		
		System.out.println("ArrayList 추가");
		long start = System.currentTimeMillis();
		for (int i=0; i<10000; i++) {
			alist.add(500, "i");
		}
		long end = System.currentTimeMillis();
		System.out.println(end-start);
		
		System.out.println("LinkedList 추가");
		start = System.currentTimeMillis();
		for (int i=0; i<10000; i++) {
			llist.add(500, i+"");
		}
		end = System.currentTimeMillis();
		System.out.println(end-start);

	}

}

Set 인터페이스

:wr:HashSet

package chapter13;

import java.util.HashSet;
import java.util.Set;

public class HashSetEx {

	public static void main(String[] args) {
		
		// Object타입의 배열 생성
		Object[] arr = {"홍길동","이순신","홍길동","이순신",1,2,"1","2"};
		
		// HashSet 객체 생성
		Set set = new HashSet();
		
		// set객체에 배열의 모든 요소 add
		for(int i=0;i < arr.length;i++) {
			set.add(arr[i]);
		}
		
		// 출력
		System.out.println(set);

	}

}

package chapter13;

import java.util.HashSet;
import java.util.Set;

public class HashSetEx2 {

	public static void main(String[] args) {
		
		// HashSet 객체 생성
		Set set = new HashSet();
		
		// 문자열 객체 두개 추가
		set.add(new String("abc"));
		set.add(new String("abc"));
		
		// Member 객체 두개 추가(사용자 정의 클래스)
		set.add(new Member("홍길동 ", 40));
		set.add(new Member("고길동 ", 40));
		
		// 출력
		System.out.println(set);

	}

}

package chapter13;

public class Member {

	// 필드
	String name;
	int age;
	
	// 생성자
	Member (String name, int age) {
		this.name = name;
		this.age = age;
	}
	
	// toSring() 메서드 재정의
	@Override
	public String toString() {
		return "("+ name + "," + age + ")";
	}
	
	// equals() 메서드 재정의
	@Override
	public boolean equals(Object obj) {
		if(obj instanceof Member) {
			Member m = (Member)obj;
			return this.name.equals(m.name) && this.age == m.age;
		} else {
			return false;
		}
	}
	
	// hashCode() 메서드 재정의
	@Override
	public int hashCode() {
		return this.name.hashCode() + age;
	}
}

:wr:TreeSet

Descend.java

package chapter13;

import java.util.Comparator;

public class Descend implements Comparator {

	@Override
	public int compare(Object o1, Object o2) {
		Comparable c1 = (Comparable)o1;
		Comparable c2 = (Comparable)o2;
		return c1.compareTo(c2) * (-1);
	}

}

TreeSetEx.java

package chapter13;

import java.util.SortedSet;
import java.util.TreeSet;

public class TreeSetEx {

	public static void main(String[] args) {
		
		SortedSet set = new TreeSet();
		String from = "bat";
		String to = "d";
		
		// set객체에 추가
		set.add("ant");set.add("alias");
		set.add("batman");set.add("aha");
		set.add("cola");set.add("Cola");
		set.add("ddr");set.add("dance");
		set.add("dEEE");set.add("deee");
		set.add("ever"); set.add("giant");
		set.add("zoo");
		
		// 출력
		System.out.println(set);
		System.out.println("from:"+from+",to:"+to);
		// from~to 검색
		System.out.println(set.subSet(from, to));
		System.out.println("from:"+from+",to:"+to+"zzzz");
		// from~to+"zzzz" 검색
		System.out.println(set.subSet(from,to+"zzzz"));
		
		// 내림차순 정렬
		set = new TreeSet(new Descend());
		set.add("ant");set.add("alias");
		set.add("batman");set.add("aha");
		set.add("cola");set.add("Cola");
		set.add("ddr");set.add("dance");
		set.add("dEEE");set.add("deee");
		set.add("ever"); set.add("giant");
		set.add("zoo");
		
		System.out.println(set);
		System.out.println("from:"+from+",to:"+to);
		
		// to~from (반대로 검색)
		System.out.println(set.subSet(to, from));

	}

}

Member2.java

package chapter13;

public class Member {

	// 필드
	String name;
	int age;
	
	// 생성자
	Member (String name, int age) {
		this.name = name;
		this.age = age;
	}
	
	// toSring() 메서드 재정의
	@Override
	public String toString() {
		return "("+ name + "," + age + ")";
	}
	
	// equals() 메서드 재정의
	@Override
	public boolean equals(Object obj) {
		if(obj instanceof Member) {
			Member m = (Member)obj;
			return this.name.equals(m.name) && this.age == m.age;
		} else {
			return false;
		}
	}
	
	// hashCode() 메서드 재정의
	@Override
	public int hashCode() {
		return this.name.hashCode() + age;
	}
}

AgeDesc.java

package chapter13;

import java.util.Comparator;

public class AgeDesc implements Comparator {
	
	@Override
	public int compare(Object o1, Object o2) {
		// Member2로 형변환
		Member2 m1 = (Member2)o1;
		Member2 m2 = (Member2)o2;
		
		// 나이로 내림차순 정렬
		return m2.age - m1.age;
	}

}

NameDesc.java

package chapter13;

import java.util.Comparator;

public class NameDesc implements Comparator {
	
	@Override
	public int compare(Object o1, Object o2) {
		// Member2로 형변환
		Member2 m1 = (Member2)o1;
		Member2 m2 = (Member2)o2;
		
		// 이름으로 내림차순 정렬
		return m1.compareTo(m2) * (-1);
	}

}

TreeSetEx2.java

package chapter13;

import java.util.Comparator;
import java.util.TreeSet;

public class TreeSetEx2 {

	public static void main(String[] args) {
		
		// 이름순으로 정렬
		TreeSet set = new TreeSet();
		
		set.add(new Member2("홍길동 ",30));
		set.add(new Member2("이순신 ",40));
		set.add(new Member2("김유신 ",50));
		System.out.println(set);
		
		// 나이 오름차순으로 정렬하여 출력 (익명 클래스로 인터페이스 구현)
		TreeSet set2 = new TreeSet(new Comparator(){

			@Override
			public int compare(Object o1, Object o2) {
				Member2 m1 = (Member2)o1;
				Member2 m2 = (Member2)o2;
				return m1.age - m2.age;
			}
		});
		
		set2.add(new Member2("홍길동 ",30));
		set2.add(new Member2("이순신 ",40));
		set2.add(new Member2("김유신 ",50));
		System.out.println(set2);
		
		// 이름의 내림차순으로 정렬하여 출력
		TreeSet set3 = new TreeSet(new NameDesc());
		set3.add(new Member2("홍길동 ",30));
		set3.add(new Member2("이순신 ",40));
		set3.add(new Member2("김유신 ",50));
		System.out.println(set3);
		
		// 나이의 내림차순으로 정렬하여 출력
		TreeSet set4 = new TreeSet(new AgeDesc());
		set4.add(new Member2("홍길동 ",30));
		set4.add(new Member2("이순신 ",40));
		set4.add(new Member2("김유신 ",50));
		System.out.println(set4);

	}

}

Iterator와 Enumeration

package chapter13;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

public class IteratorEx {

	public static void main(String[] args) {
		
		// Iterator 객체 선언
		Iterator it = null;
		
		// List 객체와 Set 객체 생성
		List list = new ArrayList();
		Set set = new HashSet();
		
		// list와 set에 5개의 값 추가
		for(int i=1; i<=5;i++) {
			list.add(i);
			set.add(i+5);
		}
		
		// 출력
		System.out.println(list);
		System.out.println(set);
		
		// list에서 Iterator 객체로 생성
		it = list.iterator();
		
		// lit의 Iterator 객체 출력
		System.out.println("List Iterator 출력");
		iteratorPrint(it);
		
		// set에서 Iterator 객체로 생성
		it = set.iterator();
		
		// set의 Iterator 객체 출력
		System.out.println("Set Iterator 출력");
		iteratorPrint(it);
		
		// 출력
		System.out.println(list);
		System.out.println(set);

	}
		
	private static void iteratorPrint(Iterator it) {
		// Iterator 객체 반복 (다음 요소가 있으면 반복)
		while(it.hasNext()) {
			// Iterator 객체의 다음 요소 읽어와 출력
			System.out.println(it.next());
			// 현재 요소 삭제
			it.remove();
		}
	}

}

package chapter13;

import java.util.Enumeration;
import java.util.Iterator;
import java.util.Vector;

public class EnumerationEx {

	public static void main(String[] args) {
		
		Vector v = new Vector();
		for(int i=1; i<= 5;i++) {
			v.add(i);
		}
		
		// Enumeration 으로 출력
		Enumeration e = v.elements();
		System.out.println("Enumeration 출력");
		while(e.hasMoreElements()) {
			System.out.println(e.nextElement());
		}
		
		// Iterator로 출력
		Iterator it = v.iterator();
		System.out.println("Iterator 출력");
		while(it.hasNext()) {
			System.out.println(it.next());
		}

	}

}

package chapter13;

import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Iterator;

public class IterVSsize {

	public static void main(String[] args) {
		
		ArrayList list = new ArrayList();

		for (int i=0; i<100000000; i++) {
			list.add(i);
		}
		
		// Iterator 실행 시간
		long start = System.currentTimeMillis();
		Iterator it = list.iterator();
		while (it.hasNext()) {
			it.next();
		}
		long end = System.currentTimeMillis();
		System.out.println("Iterator 소요 시간 : "+(end-start));
		
		// size 실행 시간
		start = System.currentTimeMillis();
		for (int i=0; i<list.size(); i++) {
			list.get(i);
		}
		end = System.currentTimeMillis();
		System.out.println("size() 소요 시간 : "+(end-start));
	}

}

package chapter13;

import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;

public class ListIteratorEx {

	public static void main(String[] args) {
		
		// 리스트 객체 생성
		List list = new ArrayList();
		// 리스트 객체에 값 추가
		for(int i=1;i<=5;i++) {
			list.add(i);
		}
		// ListIterator 객체 생성
		ListIterator lit = list.listIterator();
		// 다음 요소 반복 출력
		while(lit.hasNext()) {
			System.out.println(lit.next());
		}
		// 이전 요소 반복 출력
		while(lit.hasPrevious()) {
			System.out.println(lit.previous());
		}

	}

}

Map 인터페이스

:wr:HashMap

package chapter13;

import java.util.HashMap;
import java.util.Map;

public class HashMapEx {

	public static void main(String[] args) {
		
		// Map 객체 생성
		Map map =new HashMap();
		
		// 이름이 담긴 문자열 배열 생성
		String[] names = {"홍길동", "김유신", "이순신", "강감찬", "김유신"};
		// 숫자가 담긴 정수 배열 생성
		int[] nums = {1234,4567,2350,9870,2345};
		
		// Map 객체에 두 배열의 값들을 키와 밸류 쌍으로 저장
		for(int i=0;i<names.length;i++) {
			map.put(names[i], nums[i]);
		}
		
		// 출력
		System.out.println(map);
		System.out.println("홍길동 번호 :" + map.get("홍길동"));
		System.out.println("이순신 번호 :" + map.get("이순신"));
		System.out.println("김유신 번호 :" + map.get("김유신"));

	}

}

package chapter13;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class HashMapEx2 {

	public static void main(String[] args) {
		
		// Map 객체 생성
		Map map =new HashMap();
		
		// 이름이 담긴 문자열 배열 생성
		String[] names = {"홍길동", "김유신", "이순신", "강감찬", "김유신"};
		// 숫자가 담긴 정수 배열 생성
		int[] nums = {1234,4567,2350,9870,2345};
		
		// Map 객체에 두 배열의 값들을 키와 밸류 쌍으로 저장
		for(int i=0;i<names.length;i++) {
			map.put(names[i], nums[i]);
		}
		
		//Map 객체에서 key 들만 조회하기
		Set<String> keys = map.keySet();
		for(String key : keys) {
			System.out.println(key + "=" + map.get(key));
		}
		System.out.println("Iterator로 출력");
		Iterator it = keys.iterator();
		while(it.hasNext()) {
			String a = (String)it.next();
			System.out.println(a+"="+map.get(a));
		}

	}

}

package chapter13;

import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

public class HashMapEx3 {

	public static void main(String[] args) {
		
		// Map 객체 생성
		Map map =new HashMap();
		
		// 이름이 담긴 문자열 배열 생성
		String[] names = {"홍길동", "김유신", "이순신", "강감찬", "김유신"};
		// 숫자가 담긴 정수 배열 생성
		int[] nums = {1234,4567,2350,9870,2345};
		
		// Map 객체에 두 배열의 값들을 키와 밸류 쌍으로 저장
		for(int i=0;i<names.length;i++) {
			map.put(names[i], nums[i]);
		}
		
		//Map 객체에서 value 들만 조회하기
		Collection values = map.values();
		
		// 향상된 for문으로 출력
		for(Object i : values) {
			System.out.println(i);
		}
		
		// Iterator 객체로 출력
		Iterator it = values.iterator();
		while(it.hasNext()) {
			System.out.println(it.next());
		}

	}

}

package chapter13;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class HashMapEx4 {

	public static void main(String[] args) {
		
		// Map 객체 생성
		Map map =new HashMap();
		
		// 이름이 담긴 문자열 배열 생성
		String[] names = {"홍길동", "김유신", "이순신", "강감찬", "김유신"};
		// 숫자가 담긴 정수 배열 생성
		int[] nums = {1234,4567,2350,9870,2345};
		
		// Map 객체에 두 배열의 값들을 키와 밸류 쌍으로 저장
		for(int i=0;i<names.length;i++) {
			map.put(names[i], nums[i]);
		}
		
		// Map 객체는 (키,값) 쌍으로 이루어진 객체들의 모임
		// (키, 값) 쌍으로  조회하기
		Set entry = map.entrySet();
		for(Object o : entry) {
			Map.Entry m = (Map.Entry)o;
			System.out.println("key:"+m.getKey() + ", value:" + m.getValue());
		}

	}

}

:wr:Properties

package chapter13;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;



public class PropertiesEx {

	public static void main(String[] args) {
		
		try {
			Properties pr = new Properties();
			
			// properties 파일 읽어오기
			FileInputStream reader = new FileInputStream(
					"C:/java/workspace/test/src/chapter13"
					+ "/config.properties");
			// Properties 객체에 로드
			pr.load(reader);
			System.out.println(pr);
			System.out.println(" 이름 :" + pr.get("name"));
			
			// property에 키,값으로 추가
			pr.put("subject", " 자바");
			System.out.println(pr);
			
			// properties 파일로 출력
			pr.store(new FileOutputStream(
					"C:/java/workspace/test/src/chapter13/"
					+ "test.properties"), "#save");
		} catch (IOException e) {
			System.out.println(e.getMessage());
		}

	}

}