JAVA_Collection

개발중·2021년 9월 24일
0
post-thumbnail

Collection은 여러 원소를 담을 수 있는 자료 구조이다.

다수의 데이터를 다루는 데에 필요하며, 다형성을 이용한 객체지향적 설계를 통해 표준화되어 있다. 또한 재사용성이 높은 코드를 작성할 수 있다는 장점이 있다.

Interface특징
List순서가 있는 데이터의 집합으로 데이터의 중복을 허용함
구현 클래스:ArrayList, LinkedList, Stack, Vector
Set순서가 없는 데이터의 집합으로 데이터의 중복을 불허함
구현 클래스:HashSet, TreeSet
MapKey, Value의 쌍으로 이루어진 데이터의 집합으로 순서가 없고 키 중복 불허, 값 중복 허용
구현 클래스:HashMap, TreeMap, HashTable, Properties

List

ArrayList_객체 추가

  • add(object);
	public ArrayList<Object> listAdd() { // 리스트에 값 삽입
		a.add("Array"); // 0번
		a.add("List"); // 1번
		
		return a;
	}

ArrayList_객체 삭제

  • remove(index);
public ArrayList<Object> listRemove() { // 리스트에 있는 값을 번지수를 찾아 삭제
		a.remove(0); // 0 번에 있는 값을 삭제하고,
		return a; // 뒤에 있던 값을 당겨 온다. List가 0 번이 됨
	}

ArrayList_객체 검색

  • contains(찾고자 하는 값);
    해당 메서드는 대소문자를 구별한다.
public boolean listContains(Object value) {
		
		return a.contains(value); // 파라미터를 받아 값을 확인하고 참, 거짓을 리턴함
	}

ArrayList_Iterator을 통한 객체 값 출력

	public void listAll() {
		Iterator iter = a.iterator(); // 반복자 | 리스트에 담겨 있는 값을 반복자에게 넘김
		
		while(iter.hasNext()) { // 다음 값이 있으면 반복한다
			System.out.println(iter.next()); // 프린트문으로 현재 인덱스의 값을 출력
		}
	}

ArrayList_객체 검색

  • contains(찾고자 하는 값);
    해당 메서드는 대소문자를 구별한다.
public boolean listContains(Object value) {
		
		return a.contains(value); // 파라미터를 받아 값을 확인하고 참, 거짓을 리턴함
	}

ArrayList_객체의 길이 값

  • size();
    길이 값은 0이 아닌 1부터 시작하여 카운트한다.
	public int listSize() {
		return a.size(); // a 변수가 가리키는 리스트의 갯수를 리턴
	}

ArrayList_원하는 번지에 값 넣기

  • add(index, value);
    번지 수는 0부터 시작한다.
		public void listWantIndexAdd() { // 내가 원하는 번지에 값 넣기
		a.add(1, "TBZ"); // 이렇게 넣게 되면 출력되는 값은 List TBZ Java Spring xml 순이 된다
	}

ArrayList 총 코드

package jaeil.com.collection;

import java.util.ArrayList;
import java.util.Iterator;

public class list{
	ArrayList<Object> a = new ArrayList<Object>();
	
	public ArrayList<Object> listAdd() { // 리스트에 값 삽입
		a.add("Array"); // 0번
		a.add("List"); // 1번
		a.add("Java");
		a.add("Spring");
		a.add("xml");
		
		return a;
	}
	
	public Object listGet(){ // 리스트 값 받아 오기
		a.get(0); // 0 번에 있는 값을 가지고 옴
		
		return a.get(0); // 0 번에 있는 값을 리턴함
	}
	
	public ArrayList<Object> listRemove() { // 리스트에 있는 값을 번지수를 찾아 삭제
		a.remove(0); // 0 번에 있는 값을 삭제하고,
		return a; // 뒤에 있던 값을 당겨 온다. List가 0 번이 됨
	}
	
	public boolean listContains(Object value) {
		
		return a.contains(value); // 파라미터를 받아 값을 확인하고 참, 거짓을 리턴함
	}
	
	public void listAll() {
		Iterator iter = a.iterator(); // 반복자 | 리스트에 담겨 있는 값을 반복자에게 넘김
		
		while(iter.hasNext()) { // 다음 값이 있으면 반복한다
			System.out.println(iter.next()); // 프린트문으로 현재 인덱스의 값을 출력
		}
	}
	
	public int listSize() {
		return a.size(); // a 변수가 가리키는 리스트의 갯수를 리턴
	}
	
	public void listWantIndexAdd() { // 내가 원하는 번지에 값 넣기
		a.add(1, "TBZ"); // 이렇게 넣게 되면 출력되는 값은 List TBZ Java Spring xml 순이 된다
	}
	
	public static void main(String[] args) {
		list list = new list();
		System.out.println(list.listAdd());
		System.out.println(list.listRemove());
		list.listWantIndexAdd();
		System.out.println(list.listContains("list")); // 대소문자를 구분함
		list.listAll();
		System.out.println(list.listSize());
	}
	

}

Stack

스택은 쌓는다는 의미를 가진 자료구조이며, last in first out(LIFO) 방식이 특징이다. 나중에 들어간 값이 먼저 나오는 구조이다. 정형화돼 있는 컵 안에 딱 맞는 물체를 넣어 하나씩 꺼낸다고 생각하면 된다.

Stack_객체 추가

  • push(value);
public Stack<Object> stackPush(){
		stack.push("Collection");
		stack.push("Stack");
		stack.push("Vector");
		
		return stack;
	}

Stack_객체 추가

  • push(value);
public Stack<Object> stackPush(){
		stack.push("Collection");
		stack.push("Stack");
		stack.push("Vector");
		
		return stack;
	}

Stack_객체 값 가져오기

  • peek();
    가장 마지막에 넣은 값을 가져온다.
	public Object stackPeek(){
		return stack.peek(); // 가장 마지막에 들어온 값을 리턴
	}

Stack_객체 값 삭제

  • pop();
    가장 마지막에 넣은 값을 삭제한다.
	public Stack<Object> stackPop(){
		stack.pop(); // 가장 마지막에 들어온 값을 삭제
		return stack;
	}

Stack_Iterator를 통한 값 출력

  • Iterator를 통해 값을 출력하려고 하니 LIFO이 아닌 인덱스대로 출력된다.
    ArrayList를 Iterator로 출력한 것과 동일하다.
public void stackAll() {
		Iterator<Object> iter = stack.iterator();
		
		while(iter.hasNext()) { // ArrayList와 동일하게 순서대로 출력됨
			System.out.println(iter.next());
		}
	}

Stack_For문을 통한 값 출력

  • 이 방법에서는 pop을 하면 stack.size의 값이 줄기 때문에 원하는 바대로 출력되지 않는다.
public void stackAllPrint() {
		for(int i=0; i<=stack.size(); i++) { // pop을 하면 사이즈가 줄기 때문에 하나가 나오지 않음
			System.out.println(stack.size());
			System.out.println(stack.pop()+" "+i);
		}
	}

Stack에서 get 메서드를 사용할 수 있고 향상된 for문으로 출력할 수도 있다.

	public void stackAllPrint() {
		for(int i=0; i<stack.size(); i++) { // pop을 하면 사이즈가 줄기 때문에 하나가 나오지 않음
			System.out.println(stack.size());
			System.out.println(stack.get(i)+" "+i);
		}
		
		for(Object o:stack){
			System.out.println(o);
		}
	}

다만 pop으로 원래 stack의 출력 순서대로 출력하는 방법은 못 찾았다.
임시 방편으로 size에 +1을 해 주면 가능했는데 값이 커지거나 변수가 생기면 오류가 날 수도 있을 것 같다.

ArrayList와 contains, empty, size 메서드가 동일하게 사용된다.

Stack 총 코드

package jaeil.com.collection;

import java.util.Iterator;
import java.util.Stack;

public class stack {
	Stack<Object> stack = new Stack<Object>();
	
	public Stack<Object> stackPush(){
		stack.push("Collection");
		stack.push("Stack");
		stack.push("Vector");
		
		return stack;
	}
	
	public Object stackPeek(){
		return stack.peek(); // 가장 마지막에 들어온 값을 출력
	}
	
	public Stack<Object> stackPop(){
		stack.pop(); // 가장 마지막에 들어온 값을 삭제
		return stack;
	}
	
	public void stackAll() {
		Iterator<Object> iter = stack.iterator();
		
		while(iter.hasNext()) { // ArrayList와 동일하게 순서대로 출력됨
			System.out.println(iter.next());
		}
	}
	
	public void stackAllPrint() {
		for(int i=0; i<=stack.size(); i++) { // pop을 하면 사이즈가 줄기 때문에 하나가 나오지 않음
			System.out.println(stack.size());
			System.out.println(stack.pop()+" "+i);
		}
	}
	
	public static void main(String[] args) {
		stack stack = new stack();
		System.out.println(stack.stackPush());
		//System.out.println(stack.stackPeek());
		//System.out.println(stack.stackPop());
		//stack.stackAll();
		stack.stackAllPrint();
	}

}

Map

HashMap_객체 추가

  • put(key, value);
    키와 값을 넣어야 생성되며, 이미 키가 있더라도 덮어 쓰기가 가능하다.

HashMap_객체 값 가져오기

  • get(key);
    키에 해당하는 값을 가지고 온다.

HashMap_키, 값이 있는지 확인

  • containKey(key);
  • containValue(value);

HashMap_객체 삭제

  • remove(key);
    키와 값을 삭제한다.

HashMap_키가 없을 때 추가

  • putIfAbsent(key, value);

HashMap_키가 없을 때 추가

  • putIfAbsent(key, value);

HashMap_map의 크기가 0인지 확인

  • isEmpty();

HashMap_key 값만 가지고 오기

  • keySet();
		for(String key : m.map.keySet()){
			System.out.println(key); // 향상된 for문으로 key 값을 모두 가지고 오는 방법
		}

HashMap_key, value 둘 다 가지고 오기

  • entrySet();
		for(Object value:m.map.entrySet()) {
			System.out.println(value); // 키와 값을 향상된 for문으로 출력한다
		}

HashMap_Value만 출력하는 방법

  • 다른 방법도 있겠지만 나는 향상된 for문으로 keySet을 가지고 와서 get 안에 파라미터로 넣어 주는 방법이 가장 편했다.
for(String key:m.map.keySet()) {
			System.out.println(m.map.get(key)); // 향상된 for문을 이용해 get으로 값만 출력한다
		}

Set

set은 중복을 허용하지 않는다.
set은 순서를 보장해 주지 않는다.

add();를 할 때 이미 삽입돼 있는 값을 또 삽입해도 삽입되지 않는다.

profile
공부한 것 정리하는 개발 입문자

0개의 댓글