Iterator를 이용한 인스턴스 순차적 접근
Iteratora의 메소드
boolean hasNext() : 다음번 요소가 있으면 true 반환
E next() : 다음번 요소를 반환
void remove() : 현재 위치의 요소 삭제
동작의 원리
간단한 코드예시
public class Iterator_Ex {
ArrayList<String> list = new ArrayList<String>(); // 리스트 생성
public static void main(String[] args) {
Iterator_Ex iter = new Iterator_Ex();
iter.init(); // 메소드 실행
iter.execute();
}
public void init() {
list.add("아옳옳");
list.add("아옳옳옳");
list.add("아옳옳옳옳");
}
public void execute() {
for (int i = 0; i < list.size(); i++) { // 포문이용 출력
System.out.println(list.get(i));
}
System.out.println("-------------------------------");
for (String lis : list) { // 포이치문 출력
System.out.println(lis);
}
System.out.println("-------------------------------");
Iterator<String> iter = list.iterator(); // 이터럴 실행
while (iter.hasNext()) {
System.out.println(iter.next());
}
}
}
이렇게 ArrayList 객체인 list의 내부 객체를 반복 처리하는 세 가지 방법
마지막 배열처럼 선언과 동시에 넣어 줄수도 있다 .
List<String> list = array.asList("Toy", "Dog" )
new ArrayList<>(list)
Collections 클래스
중요한 포인트는 모든 메소드가 static 이므로 클래스 이름으로 바로 호출 가능하다
Hashset
특징!
데이터 저장순서를 유지 않함
데이터의 중복 허용 안함
옆 그림처럼 다른 리스트들은 나란히 있다고 생각한다면 이것은 포대에 담아서 뒤죽박죽 된다라고 생각하면됨
자 동일한 데이터의 중복 저장을 허용 하지 않는다고 헀는데 그렇다면 어떤 기준으로 동일한지 안한지를 알 수 있을까?
오브젝트 클래스에 있는 해쉬코드 메소드와 이퀄스 메소드를 통해서 해줄 수 있다.
1.단계는 분류의 목적 이고 2. 는 같은 것을 찾기위함이다 .
여기서 알아야할 것은 바로 해시 알고리즘
위처럼 알고리즘을 통하여 만들어 줄 수도 있지만 간단한 코드를 통하여 할 수도 있다.
코드주석을 보자
public class Student {
int sno;
String name;
public Student(int sno, String name) {
this.sno = sno;
this.name = name;
}
// 가운데 getter setter 생략
@Override
public int hashCode() { // 1. 자동호출
//return (sno + name.hashCode())/2; 해쉬 알고리즘 사용
return Objects.hash(sno,name); //해쉬 알고리즘 간편화
//해쉬 알고리즘 간편화는 사실 내가 직접만드는것 보다는 좋은 알고리즘은 아니다. (중간정도)
}
@Override
public boolean equals(Object obj) { // 2. 자동호출
if(obj instanceof Student) {
Student student = (Student)obj;
return (sno == student.sno)&&(name.equals(student.name));
}else return false;
}
}
//////////메인
public class Hahset_Ex {
public static void main(String[] args) {
HashMap<Student, Integer> map = new HashMap<Student, Integer>();
map.put(new Student(1,"아옳옳"), 95);
map.put(new Student(1,"아옳옳"), 95);
System.out.println("총 entry 수: " +map.size());
}
}
결과값 총 entry 수: 1
hashmap<K,V>
이건 생각보다 쉽다 예전에 봐오던 번들처럼 키와 값으로 구성되어 있다.
요소삽입 put() , 요소 검색 get()
해쉬맵은 iterator를 사용못하기 때문에 Set <K> keyset() 을 이용하여 iterator 을 사용한다 .
해쉬맵을 사용한 self chek 코드
///////////////////////////// 멀록 클래스 //////////////////////////////
public class Mullock {
String name; // 이름
String jop; // 직업
String skill; // 멀록의 기술
int rank;
public Mullock(String name, String jop, String skill, int rank) {
this.name = name;
this.jop = jop;
this.skill = skill;
this.rank = rank;
}
@Override
public int hashCode() {
return Objects.hash(rank);
}
@Override
public boolean equals(Object obj) {
if(obj instanceof Mullock) {
Mullock mullock = (Mullock)obj;
return rank==mullock.rank;
}else {
return false;
}
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getJop() {
return jop;
}
public void setJop(String jop) {
this.jop = jop;
}
public String getSkill() {
return skill;
}
public void setSkill(String skill) {
this.skill = skill;
}
public int getRank() {
return rank;
}
public void setRank(int rank) {
this.rank = rank;
}
//////////////// 멀록 태스트 클래스(메인) /////////////////
public class Mullock_Ex {
public static void main(String[] args) {
HashMap<Integer, Mullock> hash = new HashMap<Integer, Mullock>();
hash.put(1, new Mullock("아옳이", "총잽이", "두두다다", 1));
hash.put(2, new Mullock("아옳", "멀록왕", "아옳옳옳옳", 2));
hash.put(3, new Mullock("아아옳", "칼잽이", "쓱쓱싹싹", 3));
hash.put(4, new Mullock("아오기", "활잽이", "쑉쑉쇼쇽", 4));
hash.put(1, new Mullock("아옳이", "총잽이", "두두다다", 1));
Scanner scan = new Scanner(System.in);
while (true) {
for (int i = 1; i < hash.size() + 1; i++) {
Mullock m1 = hash.get(i);
System.out.println(m1);
}
System.out.println("===============================");
System.out.println("원하는 아옳이의 랭크를 입력하시오 (종료는-1입력하시오)");
int a = scan.nextInt();
Mullock m = hash.get(a);
if (a == -1)break;
if (m != null) {
System.out.println(m);
} else {
System.out.println("해당번호는 없습니다.");
}
}
}
}
이렇게 중복된 아옳이도 빠져있고 , 원하는 숫자를 입력했을때 키 값으로 원하는 아옳이를 찾아오는걸 볼수있다~!
'아옳옳의 코딩공부 > 아옳옳 자바코딩공부' 카테고리의 다른 글
2021-04-28자바공부(람다식 lambda함수형 인터페이스2) (0) | 2021.04.28 |
---|---|
2021-04-27자바공부(람다식 lambda함수형 인터페이스) (0) | 2021.04.27 |
2021-04-12 자바공부 (컬렉션 프레임워크 LinkedList ) (0) | 2021.04.12 |
2021-04-12 자바공부 (컬렉션 프레임워크 ArrayList ) (0) | 2021.04.12 |
2021-04-12 자바공부 (컬렉션 프레임워크 Vector) (0) | 2021.04.12 |