자바 자료구조

김주언·2022년 7월 13일

JAVA

목록 보기
4/10
post-thumbnail

자바에서 제공하는 자료구조 구현 클래스를 알아본다.


1. 컬렉션 프레임워크

프로그램 구현에 필요한 자료구조를 구현해놓은 JDK 라이브러리이다.
java.util 패키지에 구현되어 있다.

1.1 Collection 인터페이스

하나의 객체를 관리하기 위한 메서드가 선언된 인터페이스의 하위에 List와 Set 인터페이스가 있음

List 인터페이스

  • 객체를 순서에 따라 저장하고 관리하는데 필요한 메서드가 선언된 인터페이스
  • 배열과 연결리스트를 구현하기 위한 인터페이스
  • 중복 허용
  • ArrayList, Vector, LinkedList, Stack, Queue

Set 인터페이스

  • 순서 관계 없이 중복허용하지 않고 유일한 값을 관리하는데 필요한 메서드가 선언되어 있다.
  • 아이디, 주민번호, 사번 등 관리에 유용
  • 저장된 순서와 출력되는 순서가 다를 수 있다.
  • HashSet, TreeSet 등

Map 인터페이스

  • 쌍으로 이루어진 객체 관리를 위한 메서드들이 선언되어 있는 인터페이스

  • 객체는 키-값 쌍으로 이루어지며 키는 중복을 허용하지 않는다.

  • HashTable, HashMap, Properties, TreeMap 등



2. Iterator

컬렉션 요소를 순회한다.

  • boolean hasNext() : 이후에 요소가 더 있는지 체크한다. 있으면 true 반환
  • E next(): 다음에 있는 요소 반환

2.1 예제

public boolean removeMember(int memberId){  // 멤버 아이디를 매개변수로, 삭제 여부를 반환
	
		Iterator<Member> ir = arrayList.iterator();
		while(ir.hasNext()) {
			Member member = ir.next();
			int tempId = member.getMemberId();
			if(tempId == memberId){            // 멤버아이디가 매개변수와 일치하면 
				arrayList.remove(member);           // 해당 멤버를 삭제
				return true;                   // true 반환
			}
		}
		
		System.out.println(memberId + "가 존재하지 않습니다");  //for 가 끝날때 까지 return 이 안된경우
		return false;                   
}

TreeSet 클래스 예제

정렬을 위해 Comparable과 Comparator 인터페이스 구현하기

TreeSet 클래스

  • 객체의 정렬에 사용
  • Set 인터페이스를 구현하여 중복을 허용하지 않고 오름차순이나 내림차순으로 객체를 정렬한다.
  • 내부적으로 이진 검색트리로 구현된다.
  • 이진검색트리에 저장하기 위해서 각 객체를 비교한다. 이 때 비교대상이 되는 객체에 Comparable이나 Comparator 인터페이스를 구현해야 TreeSet에 추가될 수 있다.

TreeSetTest.java

import java.util.TreeSet;

public class TreeSetTest {

	public static void main(String[] args) {

		TreeSet<String> treeSet = new TreeSet<String>();
		treeSet.add("홍길동");
		treeSet.add("강감찬");
		treeSet.add("이순신");
		
		for(String str : treeSet) {
			System.out.println(str);
		}
	}
}

String 클래스는 이미 Comprable 인터페이스가 구현되어 있으므로 오름차순으로 정렬되어 출력됨

MemberTreeSet.java

public class MemberTreeSet {

	private TreeSet<Member> treeSet;

	public MemberTreeSet(){
		treeSet = new TreeSet<Member>();
	}
	
	public void addMember(Member member){
		treeSet.add(member);
	}
	
	public boolean removeMember(int memberId){
		
		Iterator<Member> ir = treeSet.iterator();
		
		while( ir.hasNext()){
			Member member = ir.next();
			int tempId = member.getMemberId();
			if( tempId == memberId){
				treeSet.remove(member);
				return true;
			}
		}
		
		System.out.println(memberId + "가 존재하지 않습니다");
		return false;
	}
	
	public void showAllMember(){
		for(Member member : treeSet){
			System.out.println(member);
		}
		System.out.println();
	}
}

MemberTreeSetTest.java

public class MemberTreeSetTest {

	public static void main(String[] args) {

		MemberTreeSet memberTreeSet = new MemberTreeSet();
		
		Member memberKim = new Member(1003, "김유신");
		Member memberLee = new Member(1001, "이순신");
		Member memberKang = new Member(1002, "강감찬");
		
		memberTreeSet.addMember(memberKim);
		memberTreeSet.addMember(memberLee);
		memberTreeSet.addMember(memberKang);
		memberTreeSet.showAllMember();
		
	}
}
  • Member클래스가 아이디 오름차순으로 정렬되게 하기 위해 Comparable 인터페이스를 구현

Member.java

public class Member implements Comparable<Member>{

	......

	@Override
	public int compareTo(Member member) {
		
		//return (this.memberId - member.memberId);   //오름차순
		return (this.memberId - member.memberId) *  (-1);   //내림 차순
	}
}
  • Comparator의 활용 : 이미 Comparable이 구현된 경우 Comparator로 비교하는 방식을 다시 구현할 수 있음
class MyCompare implements Comparator<String>{

	@Override
	public int compare(String s1, String s2) {
		return (s1.compareTo(s2)) *-1 ;
	}
}

public class ComparatorTest {
	
	public static void main(String[] args) {
		
		Set<String> set = new TreeSet<String>(new MyCompare());
		set.add("aaa");
		set.add("ccc");
		set.add("bbb");
				
		System.out.println(set);
	}
}
profile
학생 점심을 좀 차리시길 바랍니다

0개의 댓글