이번에는 Java의 자료구조들에 대해서 전체적으로 한번에 다뤄볼까 합니다.
자료구조 : 데이터를 효율적으로 사용할 수있도록 구조를 만들어서 저장해둔 것
(List, Map, Interface)
List
: 중복이 있고, 순서가 있습니다.
- Vector -> 동기화 : 속도가 느려질 수 있음
- ArrayList -> 비동기화
간단 예시)
*추가) ArrayList 정렬
Collection.sort(this); -> 올림차순
Collection.sort(this, Collection.reverseOrder()); -> 내림차순
Set
: 중복이 없고 순서도 없습니다.
- HashSet
- TreeSet(정렬)
간단 예시) - TreeSet
TreeSet에서 입력받을 때, 버퍼를 이용해서 입력을 받았습니다.
3번 입력을 받게 하였고, Iterator을 이용하여 출력하게 되었습니다.
TreeSet에서 주요하게 볼 부분은 임의의 값을 넣어주면, 정렬은 기본 오름차순으로 이루어진다는 부분입니다.
Map
: 검색할 때는 가장 빠르고, (Key, Value) 값으로 이루어 진 형태를 가집니다.
- HashTable -> 동기화
- HashMap -> 비동기화
위 TreeSet에서 보았듯이, TreeMap 또한 정렬을 제공합니다.
Map은 기본적으로 객체가 저장되며,
여러가지 타입이 저장 될 수 있습니다.
데이터를 꺼낼 때에는 Object형이기 때문에 적절하게 캐스팅 해줄 수 있습니다.
간단 예시)
- 해쉬맵을 사용하여 map을 생성해 준 후,
map.put() 을 이용하여 각각을 (Key, Value)의 형태로 설정해 줍니다.
이 때, <String, Integer> 형태이므로 Key는 String형태로, Value는 Integer형태로 저장 해주어야 합니다.
다음으로 Set을 이용하여 해쉬맵의 Key 테이블을 가져오게 됩니다. 또한 Key값이 String 형태이므로 Set<String>으로 가져와야 합니다.
그 후, set에 저장된 해쉬맵의 값을 String형태의 str로 값을 추출한 후,
map.get()함수를 이용하여 해당 키에 대한 Value의 값을 출력하게 됩니다.
이 때, HashMap은 정렬을 해주지 않는다는 것이 TreeMap과의 다른점입니다.
TreeMap은 HashMap과 비슷하지만 Key값을 기준으로 정렬됩니다.
HashMap과 사용 방법은 같으므로, 따로 정리하지는 않도록 하겠습니다.
*추가) <String, Integer> 또는 <String> 과 같은 형태를
Generics 라고 합니다. Generics는 간단히 정리하면 미리 들어갈 객체 타입을 넣어주는 것입니다.
마지막으로, 여러 자료구조를 복합하여 사용한 예제를 올려보도록 하겠습니다.
public class Test_HashMap {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String tmp = br.readLine();
int loop = Integer.parseInt(tmp);
// HashMap에 Data 넣기 (Key , Value) 형태
HashMap<String, Integer> testmap = new HashMap<String, Integer>();
for(int i=0; i<loop; i++) {
String test_s = br.readLine();
String[] test_info = test_s.split(" ");
testmap.put(test_info[0], Integer.parseInt(test_info[1]));
}
// HashMap에 포함된 Key , Value를 Set에 담고 iterator에 값을 Set 정보를 담아 준다.
Set<Entry<String, Integer>> test_set = testmap.entrySet();
Iterator<Entry<String, Integer>> test_iter = test_set.iterator();
//HashMap에 포함된 Key 중에 "최진우"라는 키를 가질 경우 true 리턴 (없을 경우 false)
if(testmap.containsKey("최진우")) {
System.out.println("최진우 발견!");
System.out.println(testmap.get("최진우"));
}
// HashMap에 포함된 key, value 값을 전부 호출 한다.
while(test_iter.hasNext()) {
Map.Entry<String, Integer> test_m = (Map.Entry<String, Integer>)test_iter.next();
System.out.println("이름:"+test_m.getKey() + ", 성적:" + test_m.getValue());
}
//Map에서 저장된 Key들을 가져올 Set을 만든다.
Set<String> test_set2 = testmap.keySet();
System.out.println("사람들"+ test_set2);
// Map에 저장된 value값들 Collection<Interger> 형태로 얻어 오고 iterator에 담는다.
Collection<String> test_name = testmap.keySet();
Collection<Integer> test_grade = testmap.values();
Iterator<String> test_itername = test_name.iterator();
Iterator<Integer> test_itergrade = test_grade.iterator();
while(test_itername.hasNext()) {
String sname = (String)test_itername.next();
Integer sgrade = (Integer)test_itergrade.next();
System.out.println("Name:"+sname);
System.out.println("Grade:"+sgrade);
}
}
}
결과 :
결과창에서, 위의 색있는 부분의 5줄이 입력을 받은 부분이며, 아래로는 출력된 부분입니다.
소스에 주석을 첨부하였으니, 설명은 생략하도록 하겠습니다.
'Programming > JAVA' 카테고리의 다른 글
Java - (2) 데이터타입(Data Type) (0) | 2016.05.04 |
---|---|
Java - (1) Java언어의 특징 (0) | 2016.05.04 |
리스트(List) TestList (0) | 2016.04.22 |
배열(Array) Test_Array (0) | 2016.04.22 |
function_test (2) | 2016.04.20 |
WRITTEN BY