목록분류 전체보기 (93)
판봉 개발 일기

FIFO 컬렉션은 다른 말로 "선입선출"이라고한다. "선입선출"이라 함은 먼저 넣은 객체가 먼저 빠져나가는 자료구조를 말한다. 또한 FIFO 자료구조를 제공하는 Queue 인터페이스를 제공하고 있다. LIFO 컬렉션의 Stack은 클래스이며 FIFO 컬렉션의 Queue는 인터페이스란 점을 명확히 상기시켜야겠다. 위 사진 처럼 Queue의 구조는 먼저 기다린 사람이 먼저 가게안으로 들어가는 것처럼 연상해서 이해하면 쉬울 것 같다. 이것또한 Stack과 다르게 가로라고 이해하면 좋을것이라고 생각이 된다. 다음은 Queue 인터페이스의 메소드를 정의한 것이다. 리턴 타입 메소드 설명 boolean offer(E e) 주어진 객체를 넣음 E peek() 객체 하나를 가져옴 객체를 큐에서 제거하지 않음 (stac..

LIFO 컬렉션은 "후입선출" 이라고도 한다. "후입선출"이라 함은 나중에 넣은 객체가 먼저 빠져나가는 자료구조를 말한다. LIFO 자료구조를 제공하는 Stack 클래스가 존재한다. "Stack"은 위의 사진 처럼 세로를 연상하면 이해가 쉬울 것 같다. 다음 표는 Stack 클래스의 주요 메소드이다. 리턴 타입 메소드 설명 E push(E item) 주어진 객체를 스택에 넣음 E peek() 스택의 맨 위 객체를 가져옴 객체를 스택에서 제거하지 않음 E pop() 스택의 맨 위 객체를 가져오지만 객체를 스택에서 제거함 Stack 객체를 생성하는 방법은 아래와 같다. Stack stack = new Stack(); Stack stack = new Stack(); // 왼쪽 Stack에 지정된 타입을 자동으..
Hastable은 HashMap과 동일한 내부 구조를 가지고 있다. 그래서 키로 사용할 객체는 hashCode()와 equals() 메소드를 재정의해서 동등 객체가 될 조건을 정해야 한다. 한가지 차이점이 있다면 Hashtable은 동기화된 메소드로 구성되어 있기때문에 스레드에 안전하다. Hashtable의 생성 방법은 다음과 같다. Map map = new Hashtable(); 다음 코드는 Hashtable은 활용한 예제이다. import java.util.*; public class HashTableExample { public static void main(String[] args) { Map map = new Hashtable(); // Hashtable 생성 map.put("spring", "..
HashMap은 Map 인터페이스를 구현한 대표적인 Map 컬렉션이다. HashMap의 키로 사용할 객체는 hashCode()와 equals()메소드를 재정의해서 동등 객체가 될 조건을 정해야 한다. 그 이유는 객체가 달라도 동등 객체라면 같은 키로 간주하고 중복 저장되지 않도록 하기 위함이다. ※동등 객체의 조건은 hashCode()의 리턴값이 같아야 하며, equals() 메소드가 true를 리턴해야 한다. (주로 키는 String을 잘씀) HashMap을 생성하는 방법은 아래와 같다 Map map = new HashMap(); 주의 할 점으로는 키와 값의 타입은 기본타입을 사용할 수 없으며 클래스 및 인터페이스 타입만 사용이 가능하다. 밑은 키를 String타입, 값으로 Integer 타입을 사용하..
Map 컬렉션은 키(key)와 값(value)으로 구성된 Map.Entry 객체를 구성하는 구조를 가지고 있다. 여기서 말하는 Entry란 Map 인터페이스 내부에 선언된 중첩 인터페이스이다. ※여기서 키와 값은 모두 객체이다. Map 컬렉션에서 키는 중복저장이 불가능 하지만 값은 중복 저장이 가능하다. 따라서, 동일한 키로 값을 저장하면 새로운 값으로 저장이된다. Map 컬렉션에는 HashMap, Hashtable, LinkedHashMap, Properties, TreeMap 등이 있다. HashMap Hashtable LinkedHashMap Properties TreeMap 다음은 Map 컬렉션에서 공통적으로 사용이 가능한 Map 인터페이스의 메소드들을 나타낸 것이다. ※ 키로 객체들을 관리하기 ..
HashSet은 Set 인터페이스의 구현 클래스이다. HashSet을 생성하는 방법은 다음과 같이 기본 생성자를 호출하면 된다. Set set = new HashSet(); String 객체를 저장하는 HashSet은 다음과 같이 생성할 수 있다. Set set = new HashSet(); Set set = new HashSet(); 무언가 어디서 많이 본것 같은건 비밀.. HashSet은 객체들을 순서 없이 저장하고 동일한 객체는 중복 저장하지 않는다는게 포인트이다. HashSet이 판단하는 동일한 객체란 꼭 같은 인스턴스만을 의미하지 않는다. HashSet은 객체를 저장하기 전에 먼저 hashCode()메소드를 호출하여 해시코드를 얻고, 객체들의 해시코드를 비교한다. 만약 동일한 해시코드가 있다면 ..
앞서 살펴본 List 컬렉션은 객체의 저장 순서를 유지한다. 하지만 Set 컬렉션은 저장 순서가 유지되지 않는다. 또한 객체의 중복 저장이 불가능 하며, 하나의 null만 저장할 수 있다. Set 컬렉션은 수학의 집합 또는 구슬 주머니와도 비슷하다고 이야기를 한다고 한다. Set 컬렉션에는 HashSet, LinkedHashSet, TreeSet 등이 있다. HashSet LinkedHashSet TreeSet 다음은 Set 컬렉션에서 공통으로 사용가능한 Set 인터페이스의 메소드를 살펴본 것이다. 기능 메소드 설명 객체 추가 boolean add(E e) 주어진 객체를 저장. 객체가 저장되면 true 중복객체면 false를 리턴. 객체 검색 boolean contains(Object o) 객체가 저장되..
LinkedList는 List의 구현 클래스로 ArrayList와 사용방법은 같지만 내부구조는 완전히 다르다. ArrayList는 내부 배열에 객체를 저장하지만, LinkedList는 인접 참조를 이용한다. LinkedList에서 특정 인덱스의 객체를 제거하면 앞뒤 링크만 변경되고 나머지 링크는 변경되지 않는다. 이것은 삽입할 때도 마찬가지이다. ★LinkedList는 빈번한 객체 삭제와 삽입이 일어나는 곳에서는 좋은 성능을 발휘한다. 다음은 LinkedList를 생성하는법에 대하여 설명한다. List list = new LinkedList(); List list = new LinkedList(); 다음은 ArrayList와 LinkedList의 실행 성능을 비교하기 위해 List 인터페이스의 add메소..
Vector는 ArrayList와 동일한 내부 구조를 가지고 있지만 동기화된 메소드로 구성이 되어 있기때문에 멀티 스레드가 동시에 Vector의 메소드를 실행할 수 없다. 즉,하나의 스레드가 메소드를 실행을 완료해야만 다른 스레드가 메소드를 실행할 수 있다. 그래서 흔히들 "스레드에 안전하다"라고 말한다. 다음 글은 Vector를 생성하기 위한 방법을 설명한다. List list = new Vector(); List list = new Vecotr(); 여기서 E란 타입 파라미터를 이야기하며, 두번째것은 왼쪽 List에 지정된 타입을 따라간다. 다음은 Vector를 이용해서 Board 객체를 추가, 삭제, 검색하는 예제이다. import java.util.*; public class VectorExamp..
ArrayList는 List 인터페이스의 대표적인 구현 클래스이다. 밑은 ArrayList 객체를 생성하는 방법이다. 더보기 List list = new ArrayList(); ArrayList를 생성하려면 저장할 객체타입을 표기하고 기본 생성자를 호출하면 된다. 더보기 ex)String을 저장하는 ArrayList 생성 List list = new ArrayList(); List list = new ArrayList(); 항상 ();찍는 것을 주의하자. 그리고 두번째 코드는 왼쪽에 지정된 타입을 따라간다. 결론적으로 위 두코드는 동일하다. 기본 생성자로 ArrayList 객체를 생성하면 내부에 10개의 객체를 저장할 수 있는 용량이 생긴다. 저장할 객체 수가 늘어나면 용량이 자동적으로 증가한다고 한다...