6/19 Collection 정리 2

리무 rimu ·2023년 6월 19일
0

Co.

목록 보기
2/43

Map

  • Map계열의 자료구조는 쉽게 생각해서 지하철에 비치되어있는 물품 보관함을 생각하면 됨
  • 물품보관함의 경우 번호가 있지만 번호가 중요한 것이 아니라 해당 물품보관함의 키가 중요!
    즉, 키만 있으면 키에 해당하는 물품보관함을 이용할 수 있음 그게 바로 Map!
  • List 계열과는 달리 index가 없고 key / value 만 있음
  • key는 유니크해야하고 우리가 값을 관리하고자 한다면 키를 이용해서 값을 관리할 수 있음
  • value는 중복 데아터 가능!

HashMap

  • iterator(반복자) : 모든 collection에서는 반복자를 가지고 있음
  • hasNext 뜻: 다음거 있냐? ㅇㅅㅇ
import java.util.HashMap;
import java.util.Iterator;

public class HashMap_ex {


	public static void main(String[] args) {
		//  선언하고 초기화~
		HashMap<Integer, String> hashMap = new HashMap<Integer, String>();
		hashMap.put(0,"str");
		hashMap.put(1,"str1");
		hashMap.put(2,"str2");
		hashMap.put(3,"str3");

		System.out.println(hashMap.toString());

		// 지우기
		hashMap.remove(2);
		System.out.println(hashMap.toString());

		// 데이터 모두 삭제
		hashMap.clear();
		System.out.println(hashMap.toString());

		// 데이터 다시 넣기
		hashMap.put(0,"str");
		hashMap.put(1, "str2");
		hashMap.put(2,"srt3");
		System.out.println(hashMap.toString());

		// key들만 모아서 HashMap으로부터 iterator(반복자) 메서드를 구하면 iterator객체를 구할 수 있음!
		Iterator<Integer> iterator = hashMap.keySet().iterator();
		// 다음 데이터(key)가 있냐?
		// true 면 반복~
		while(iterator.hasNext()){
			// 구한 반복자의 다음 데이터를 구해조...
			System.out.println(hashMap.get(iterator.next()));
		}

	}
}

결과

Hash?

으깨다 라는 뜻! 해시 포테이토!!!!!!!!!! 으깬 감자!!!!!!!
데이터를 가리키고 있는 값을 정수화시키는 것 (-> 메모리 주소 값이 찍힘~)

HashSet

  • set계열 자료구조에서는 데이터의 순서는 없음 )출력시 순서 바뀜)
  • 중복된 데이터는 허락하지 않음
  • 메모리 주소 값이 다르니까 각 주소 비교해서 지워야 함!
import java.util.HashSet;

public class HashSet_ex {


	public static void main(String[] args) {

		HashSet<Student> hashSet = new HashSet<Student>();
		hashSet.add(new Student("어피치", 3));
		hashSet.add(new Student("라이언", 6));
		hashSet.add(new Student("춘식이", 1));

//		Student student = new Student("춘식이", 1);
//		hashSet.remove(student);

		System.out.println(hashSet.toString());

	}
}

public class Student {
	private String name;
	private int grade;

	public Student(String name, int grade) {
		this.name = name;
		this.grade = grade;
	}

	@Override
	public String toString() {
		return name + " : " + grade;
	}
}

결과

근데 춘식이를 지우고 싶네? 그러면


public class Student {
	private String name;
	private int grade;

	public Student(String name, int grade) {
		this.name = name;
		this.grade = grade;
	}

	@Override
	public String toString() {
		return name + " : " + grade;
	}

	@Override
	public boolean equals(Object obj) {
		String compareValue = obj.toString();
		String thisValue = toString();
		// 서로 같으면  true
		return thisValue.equals(compareValue);
	}

	@Override
	public int hashCode() {
		return toString().hashCode();
	}
}
import java.util.HashSet;

public class HashSet_ex {


	public static void main(String[] args) {

		HashSet<Student> hashSet = new HashSet<Student>();
		hashSet.add(new Student("어피치", 3));
		hashSet.add(new Student("라이언", 6));
		hashSet.add(new Student("춘식이", 1));

		Student student = new Student("춘식이", 1);
		hashSet.remove(student);

		System.out.println(hashSet.toString());

	}
}

결과 : 춘식이를 지웠다!

Iterator 자료구조

  • java에는 무수히 많은 자료구조형이 있음
  • 많은 자료구조형이 존재하는 것은 결국 데이터를 잘 관리하기 위해서임
  • 잘 관리한다는 것은 저장하고 정렬하고 검색하는 것 (이 중 데이터의 검색은 무엇보다 중요)
    그래서 java에서는 Iterator라는 인터페이스가 있음!
  • Iterator라는 의미는 '반복자' 라는 의미로 데이터를 반복적으로 검색하는데 아주 유용한 인터페이스임
  • 모든 자료구조형에는 iterator()메서드를 지원함
profile
JAVA / SQL / Spring 을 공부하고 있습니다 🐥

0개의 댓글