toggle menu

JAVA 정리 - 자료구조

2012. 7. 25. 16:32 JAVA
List, Set, Map -> 인터페이스


List
중복이 있고 순서가 있음

- Vector -> 동기화 : 속도가 느려질 수 있음. 
- ArrayList -> 비동기화 

※ArrayList 정렬
Collections.sort(this); //올림차순
Collections.sort(this, Collections.reverseOrder() ); //내림차순


ArrayList 예제
import java.util.ArrayList;

public class ArrayListExam
{
	ArrayList<String> list = new ArrayList<String>(5);

	/**
	 * LIST에 항목추가
	 */
	public void addItem()
	{
		list.add("A");
		list.add("B");
		list.add("c");

		this.listPrint();

		list.remove(1);

		this.listPrint();

		list.add(0, "0");
		list.add(1, "1");

		this.listPrint();

	}

	/**
	 * LIST 출력
	 */
	public void listPrint()
	{
		System.out.println("size : " + list.size());
		System.out.println("list : " + list);
	}

	public static void main(String[] args)
	{
		ArrayListExam arrayListExam = new ArrayListExam();
		arrayListExam.addItem();
	}
}


객체를 요소로 갖는 ArrayList 응용 예제
import java.util.ArrayList;

class BoardVO
{
	private int articleNumber; //글 번호
	private String articleWriter; //글 작성자
	private String articleTitle; //글 제목
	private String articleContent; //글 내용
	
	
	//Getter와 Setter 설정
	public int getArticleNumber()
    {
    	return articleNumber;
    }
	public void setArticleNumber(int articleNumber)
    {
    	this.articleNumber = articleNumber;
    }
	public String getArticleWriter()
    {
    	return articleWriter;
    }
	public void setArticleWriter(String articleWriter)
    {
    	this.articleWriter = articleWriter;
    }
	public String getArticleTitle()
    {
    	return articleTitle;
    }
	public void setArticleTitle(String articleTitle)
    {
    	this.articleTitle = articleTitle;
    }
	public String getArticleContent()
    {
    	return articleContent;
    }
	public void setArticleContent(String articleContent)
    {
    	this.articleContent = articleContent;
    }
	
	
	//기본 생성자
	BoardVO()
	{
		
	}
	
	//인수로 받은 값을 전역변수에 넣는 생성자
	BoardVO(int articleNumber, String articleWriter, String articleTitle, String articleContent)
	{
		this.articleNumber = articleNumber;
		this.articleWriter = articleTitle;
		this.articleTitle = articleTitle;
		this.articleContent = articleContent;
	}
}


public class BoardBL extends ArrayList<BoardVO>
{
	/**
	 * BoardVO ArrayList에 글번호, 작성자, 제목, 내용을 넣는 메소드
	 * 이 메소드를 사용하면 자동으로 ArrayList가 추가된다. 
	 * @param articleNumber
	 * @param articleWriter
	 * @param articleTitle
	 * @param articleContent
	 */
	public void addArticle(int articleNumber, String articleWriter, String articleTitle, String articleContent)
	{
		BoardVO vo = new BoardVO();

		vo.setArticleNumber(articleNumber);
		vo.setArticleWriter(articleWriter);
		vo.setArticleTitle(articleTitle);
		vo.setArticleContent(articleContent);

		this.add(vo);
	}

	/**
	 * BoardVO ArrayList에 저장된 내용들을 모두 출력해주는 메소드
	 * for 문으로 모든 내용을 형식에 맞추어 출력해준다.
	 */
	public void printArticle()
	{
		for(BoardVO vo : this)
		{
			System.out.printf("%-2d번글\t%-12s\n[%s]\n\"%s\"%n%n%n", vo.getArticleNumber(), vo.getArticleWriter(), vo.getArticleTitle(), vo.getArticleContent());
		}

	}

	public static void main(String[] args)
	{
		BoardBL boardBL = new BoardBL();

		//임의의 글내용을 추가해준다.
		boardBL.addArticle(1, "홍길동", "첫번째글 제목", "안녕하세요. 첫번째 글입니다.");
		boardBL.addArticle(2, "손오공", "두번째글 제목", "안녕하세요. 두번째 글입니다.");
		boardBL.addArticle(3, "브루스웨인", "다크나이트 라이즈 개봉", "안녕하세요. 세번째 글입니다.");
		boardBL.addArticle(4, "손오공", "두번째글 제목", "안녕하세요. 네번째 글입니다.");
		boardBL.addArticle(5, "손오공", "두번째글 제목", "안녕하세요. 다섯번째 글입니다.");

		//입력한 글들을 출력해준다.
		boardBL.printArticle();

	}

}


Set
중복이 없고 순서도 없음
-HashSet
-TreeSet(정렬)


TreeSet 예제
import java.util.Iterator;
import java.util.TreeSet;

public class LottoTreeSet
{
	TreeSet<integer> tree = new TreeSet<integer>(); //Integer 오브젝트를 담는 트리셋 선언
	
	public void lottoNumber()
	{
		//TreeSet의 사이즈가 6개가 될때까지 반복된다.
		while( tree.size() != 6 )
		{
			//TreeSet에 임의의 숫자를 넣게되는데, TreeSet의 특성상 중복된 숫자는 들어가지 않는다.
			tree.add((int)(Math.random()*45) + 1); 
		}
		
		//TreeSet 자체로는 출력하기 어려우므로, Iterator를 사용해 출력한다.
		//출력을 위한 Integer 오브젝트를 담는 Iterator를 선언
		Iterator<integer> i = tree.iterator(); 

		while (i.hasNext()) //다음 오브젝트가 존재할 경우에만,
		{
			System.out.println(i.next() + "\t"); //로또 번호 출력
		}
	}
	
	public static void main(String[] args)
	{
		LottoTreeSet lotteTreeSet = new LottoTreeSet();
		lotteTreeSet.lottoNumber(); //로또 번호 생성 메소드
	}
}



Map 
검색할 때는 가장 빠름. 키값과 밸류값.
-HashTable -> 동기화
-HashMap -> 비동기화
TreeMap은 정렬 제공


기본적으로 객체가 저장된다.
또한 여러가지 타입이 저장될 수 있다.
꺼낼때는 Object형이므로 적절하게 다운캐스팅.
잘못 다운캐스팅하면 클래스캐스팅 오류가 실행시에 발생된다.


HashMap 예제 - Key와 Value로 저장된다.
import java.util.HashMap;
import java.util.Set;

public class MapExam
{
	//Key와 Value형태로 넣는 HashMap선언
	HashMap<Integer, String> map = new HashMap<Integer, String>();
	
	public void addMap()
	{
		//임의의 값을 해쉬맵에 추가
		map.put(22, "서울");
		map.put(44, "부산");
		map.put(66, "대구");
		map.put(55, "광주");
		map.put(11, "전주");
	}
	
	public void printMap()
	{
		//해쉬맵의 키 테이블을 가져오기
		Set<Integer> set = map.keySet();
		
		//해쉬맵의 값을 출력
		for(Integer i : set)
			System.out.println(i + "번의 값 : " + map.get(i));
		
	}
	
	public static void main(String[] args)
	{
		MapExam mapExam = new MapExam();
		
		mapExam.addMap();
		mapExam.printMap();
	}
}

// 정렬되지 않는 값이 출력된다.




TreeMap 예제 - HashMap과 비슷하지만 키값을 기준으로 정렬된다.
import java.util.Set;
import java.util.TreeMap;

public class MapExam
{
	//Key와 Value형태로 넣는 TreeMap선언
	TreeMap<Integer, String> map = new TreeMap<Integer, String>();
	
	public void addMap()
	{
		//임의의 값을 트리맵에 추가
		map.put(22, "서울");
		map.put(14, "부산");
		map.put(62, "대구");
		map.put(53, "광주");
		map.put(16, "전주");
	}
	
	public void printMap()
	{
		//트리맵의 키 테이블을 가져오기
		Set<Integer> set = map.keySet();
		
		//트리맵의 값을 출력
		for(Integer i : set)
			System.out.println(i + "번의 값 : " + map.get(i));
	}
	
	public static void main(String[] args)
	{
		MapExam mapExam = new MapExam();
		
		mapExam.addMap();
		mapExam.printMap();
	}
}

// 정렬된 값이 출력된다.






Generics -> 미리 들어갈 객체 타입을 넣어주는 것. <Integer>




Integer intObject = 5; // autoBoxing
int intVar = intObject; // unBoxing




HashMap, Object 인수, Set 등을 활용한 예제
import java.util.HashMap;
import java.util.Set;

class Person
{
	private String name;
	private int age;
	private String addr;
	
	
	
	public String getName()
    {
    	return name;
    }
	public void setName(String name)
    {
    	this.name = name;
    }
	public int getAge()
    {
    	return age;
    }
	public void setAge(int age)
    {
    	this.age = age;
    }
	public String getAddr()
    {
    	return addr;
    }
	public void setAddr(String addr)
    {
    	this.addr = addr;
    }
	
	public Person()
	{
		
	}
	
	public Person(String name, int age, String addr)
	{
		this.setName(name);
		this.setAge(age);
		this.setAddr(addr);
	}
	
	@Override
	public String toString()
	{
	    return getName() + "\t" + getAge() + "\t" + getAddr();
	}

}

public class PersonProcess extends HashMap<String, Person>
{
	/**
	 * HashMap에 값 추가하는 메소드
	 */
	public void addPerson()
	{
		this.put("a", createPerson("안재하", 29, "서울"));
		this.put("b", createPerson("홍길동", 28, "울릉도"));
		this.put("c", createPerson("유오성", 27, "부산"));
		this.put("d", createPerson("웨인", 26, "고담시"));
	}

	/**
	 * Person객체를 생성하여 리턴해주는 메소드
	 */
	public Person createPerson(String name, int age, String addr)
	{
		Person person = new Person(name, age, addr);

		return person;
	}

	/**
	 * HashMap의 모든 정보 출력하기
	 */
	public void printHashMap()
	{
		Set<String> aaa = this.keySet();

		for (String s : aaa)
		{
			printHashMap2(s);
		}
	}

	/**
	 * HashMap에서 특정 key값에 해당하는 정보 출력하기
	 */
	public void printHashMap2(String key)
	{
		if( this.containsKey(key) )
		{
			System.out.println(this.get(key));
			System.out.println();
		}
	}

	/**
	 * @param args
	 */
	public static void main(String[] args)
	{
		PersonProcess personProcess = new PersonProcess();

		personProcess.addPerson();
		personProcess.printHashMap();

	}

}




JAVA 관련 포스팅 더보기