Collection은 여러 원소를 담을 수 있는 자료 구조이다.
다수의 데이터를 다루는 데에 필요하며, 다형성을 이용한 객체지향적 설계를 통해 표준화되어 있다. 또한 재사용성이 높은 코드를 작성할 수 있다는 장점이 있다.
Interface | 특징 |
---|---|
List | 순서가 있는 데이터의 집합으로 데이터의 중복을 허용함 구현 클래스:ArrayList, LinkedList, Stack, Vector |
Set | 순서가 없는 데이터의 집합으로 데이터의 중복을 불허함 구현 클래스:HashSet, TreeSet |
Map | Key, Value의 쌍으로 이루어진 데이터의 집합으로 순서가 없고 키 중복 불허, 값 중복 허용 구현 클래스:HashMap, TreeMap, HashTable, Properties |
ArrayList_객체 추가
public ArrayList<Object> listAdd() { // 리스트에 값 삽입
a.add("Array"); // 0번
a.add("List"); // 1번
return a;
}
ArrayList_객체 삭제
public ArrayList<Object> listRemove() { // 리스트에 있는 값을 번지수를 찾아 삭제
a.remove(0); // 0 번에 있는 값을 삭제하고,
return a; // 뒤에 있던 값을 당겨 온다. List가 0 번이 됨
}
ArrayList_객체 검색
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_객체 검색
public boolean listContains(Object value) {
return a.contains(value); // 파라미터를 받아 값을 확인하고 참, 거짓을 리턴함
}
ArrayList_객체의 길이 값
public int listSize() {
return a.size(); // a 변수가 가리키는 리스트의 갯수를 리턴
}
ArrayList_원하는 번지에 값 넣기
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());
}
}
스택은 쌓는다는 의미를 가진 자료구조이며, last in first out(LIFO) 방식이 특징이다. 나중에 들어간 값이 먼저 나오는 구조이다. 정형화돼 있는 컵 안에 딱 맞는 물체를 넣어 하나씩 꺼낸다고 생각하면 된다.
Stack_객체 추가
public Stack<Object> stackPush(){
stack.push("Collection");
stack.push("Stack");
stack.push("Vector");
return stack;
}
Stack_객체 추가
public Stack<Object> stackPush(){
stack.push("Collection");
stack.push("Stack");
stack.push("Vector");
return stack;
}
Stack_객체 값 가져오기
public Object stackPeek(){
return stack.peek(); // 가장 마지막에 들어온 값을 리턴
}
Stack_객체 값 삭제
public Stack<Object> stackPop(){
stack.pop(); // 가장 마지막에 들어온 값을 삭제
return stack;
}
Stack_Iterator를 통한 값 출력
public void stackAll() {
Iterator<Object> iter = stack.iterator();
while(iter.hasNext()) { // ArrayList와 동일하게 순서대로 출력됨
System.out.println(iter.next());
}
}
Stack_For문을 통한 값 출력
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();
}
}
HashMap_객체 추가
HashMap_객체 값 가져오기
HashMap_키, 값이 있는지 확인
HashMap_객체 삭제
HashMap_키가 없을 때 추가
HashMap_키가 없을 때 추가
HashMap_map의 크기가 0인지 확인
HashMap_key 값만 가지고 오기
for(String key : m.map.keySet()){
System.out.println(key); // 향상된 for문으로 key 값을 모두 가지고 오는 방법
}
HashMap_key, value 둘 다 가지고 오기
for(Object value:m.map.entrySet()) {
System.out.println(value); // 키와 값을 향상된 for문으로 출력한다
}
HashMap_Value만 출력하는 방법
for(String key:m.map.keySet()) {
System.out.println(m.map.get(key)); // 향상된 for문을 이용해 get으로 값만 출력한다
}
set은 중복을 허용하지 않는다.
set은 순서를 보장해 주지 않는다.
add();를 할 때 이미 삽입돼 있는 값을 또 삽입해도 삽입되지 않는다.