이번에는 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
SiriusJ

,