Explain
스택 (Stack)
: 하노이탑에 개체를 쌓듯 데이터가 LIFO(Last-In First-Out) 구조로 쌓이는 자료구조
큐 (Queue)
: 가로형태의 원통형 구조라고 가정할 수 있고, 맨 좌측 front, 맨 우측 rear(꼬리) 의 자료구조
: 데이터가 FIFO(First-In First-Out) = 가장 먼저 들어간 것이 가장 먼저 나오는 구조
해시세트 (HashSet)
: Set 인터페이스의 구현 클래스로 객체를 중복해서 저장할 수 없고
: 하나의 null 값만 저장할 수 있는 Set의 성질을 그대로 상속받음
>> 저장순서가 중요하지 않음
>> 같은 Set 인터페이스의 하위 클래스 중 TreeSet은 데이터를 자동정렬해주는 특징이 있지만 HashSet은 그렇지 않음
실습코드
<StackTest.java>
package chapter12_collection.arraylist;
import java.util.ArrayList;
class MyStack
{
private ArrayList<String> arrayStack = new ArrayList<String>();
public void push(String data) // 스택의 데이터 추가 push 구현
{
arrayStack.add(data);
}
public String pop()
{
int len = arrayStack.size(); // 스택의 사이즈를 len으로 간편히 표현
if(len == 0) // 스택에 들어있는 데이터가 없으면
{
System.out.println("스택이 비었습니다");
return null;
}
String data = arrayStack.remove(arrayStack.size() - 1); // 스택은 맨 뒤의 데이터를 삭제하므로 구현한 방법
return data;
}
public String peek() // pop과는 달리 맨 위의 값을 단지 꺼내기만하므로 pop()메서드 코드와 동일하고, 밑 return부분만 수정해줌.
{
int len = arrayStack.size(); // 스택의 사이즈를 len으로 간편히 표현
if(len == 0) // 스택에 들어있는 데이터가 없으면
{
System.out.println("스택이 비었습니다");
return null;
}
String data = arrayStack.get(arrayStack.size() - 1); // get()함수로 단지 꺼내기만하는 기능 구현
return data;
}
}
public class StackTest {
public static void main(String[] args) {
MyStack stack = new MyStack();
stack.push("A"); // 데이터 삽입
stack.push("B");
stack.push("C");
System.out.println(stack.pop()); // c 반환
System.out.println(stack.pop()); // b 반환
System.out.println(stack.pop()); // a 반환
System.out.println(stack.pop()); // 스택이 비어있음.
}
}
Result

<QueueTest.java>
package chapter12_collection.arraylist;
import java.util.ArrayList;
class MyQueue
{
private ArrayList<String> arrayQueue = new ArrayList<String>();
public void enQueue(String data) // enQueue의 경우는 삽입의 경우이므로 반환할 값이 없으므로 void로 반환할 데이터 타입을 정하지 않음을 보인다.
{
arrayQueue.add(data);
}
public String deQueue() // deQueue의 경우는 삭제의 경우이므로 반환데이터형이 있어야하므로 enQueue에서 지정했던 String을 그대로 적어준다.
{
int len = arrayQueue.size(); // 큐의 사이즈를 len으로 관리
if(len == 0) // 스택과 마찬가지로 자료공간이 비어있을 경우의 예외를 만듦
{
System.out.println("큐가 비었습니다.");
return null;
}
return arrayQueue.remove(0); // 실제로 반환값을 주고 실제값도 지워짐. get과는 다른 개념. 개념은 단지 꺼내주기만함
}
}
public class QueueTest {
public static void main(String[] args) {
MyQueue queue = new MyQueue();
queue.enQueue("A"); // 데이터 삽입
queue.enQueue("B"); // 데이터 삽입
queue.enQueue("C"); // 데이터 삽입
System.out.println(queue.deQueue()); // A 반환
System.out.println(queue.deQueue()); // B 반환
System.out.println(queue.deQueue()); // C 반환
System.out.println(queue.deQueue()); // 큐가 비어있음.
}
}
Result

<HashSetTest.java>
package chapter12_collection.hashset;
import java.util.HashSet;
public class HashSetTest {
public static void main(String[] args) {
HashSet<String> set = new HashSet<String>();
set.add("aaa");
set.add("bbb");
set.add("ccc");
System.out.println(set); // HashSet에는 toString 이 구현이 되어있으므로 바로 출력 가능
set.add("aaa"); // 이처럼 추가를 해도 중복을 허용하지 않기 때문에
System.out.println(set); // 똑같은 출력값을 가진다.
}
}
중복을 허용하지 않는다는 것을 확인하기 위해 논리형으로
출력해 확인할 수 있다.
Result

package chapter12_collection.hashset;
import java.util.HashSet;
public class HashSetTest {
public static void main(String[] args) {
HashSet<String> set = new HashSet<String>();
boolean d1 = set.add("ddd");
set.add("aaa");
set.add("bbb");
set.add("ccc");
System.out.println(d1);
boolean d2 = set.add("ddd"); // 이처럼 추가를 해도 중복을 허용하지 않기 때문에
System.out.println(d2); // 똑같은 출력값을 가진다.
// 처럼 추가해주면, d1출력값은 true = 잘 삽입되어있음을 확인가능
// d2출력값은 false = 중복을 허용하지 않아 삽입이 되어있지않음으로 확인이 가능하다.
}
}
Result

'Programming > Java_자바' 카테고리의 다른 글
[JAVA 기초] 내부클래스, '람다식' 이란? (0) | 2022.02.11 |
---|---|
[JAVA 기초] Comparable 와 Comparator 인터페이스 (0) | 2022.01.17 |
[JAVA 기초] Collection 인터페이스 (컬렉션 인터페이스)와 ArrayList 예제 실습 (0) | 2022.01.15 |
[JAVA 기초] 스택(Stack), 큐(Queue), 트리(Tree) (0) | 2022.01.14 |
[JAVA 기초] 제네릭 프로그래밍, 컬렉션 프레임워크 (0) | 2022.01.13 |
Explain
스택 (Stack)
: 하노이탑에 개체를 쌓듯 데이터가 LIFO(Last-In First-Out) 구조로 쌓이는 자료구조
큐 (Queue)
: 가로형태의 원통형 구조라고 가정할 수 있고, 맨 좌측 front, 맨 우측 rear(꼬리) 의 자료구조
: 데이터가 FIFO(First-In First-Out) = 가장 먼저 들어간 것이 가장 먼저 나오는 구조
해시세트 (HashSet)
: Set 인터페이스의 구현 클래스로 객체를 중복해서 저장할 수 없고
: 하나의 null 값만 저장할 수 있는 Set의 성질을 그대로 상속받음
>> 저장순서가 중요하지 않음
>> 같은 Set 인터페이스의 하위 클래스 중 TreeSet은 데이터를 자동정렬해주는 특징이 있지만 HashSet은 그렇지 않음
실습코드
<StackTest.java>
package chapter12_collection.arraylist;
import java.util.ArrayList;
class MyStack
{
private ArrayList<String> arrayStack = new ArrayList<String>();
public void push(String data) // 스택의 데이터 추가 push 구현
{
arrayStack.add(data);
}
public String pop()
{
int len = arrayStack.size(); // 스택의 사이즈를 len으로 간편히 표현
if(len == 0) // 스택에 들어있는 데이터가 없으면
{
System.out.println("스택이 비었습니다");
return null;
}
String data = arrayStack.remove(arrayStack.size() - 1); // 스택은 맨 뒤의 데이터를 삭제하므로 구현한 방법
return data;
}
public String peek() // pop과는 달리 맨 위의 값을 단지 꺼내기만하므로 pop()메서드 코드와 동일하고, 밑 return부분만 수정해줌.
{
int len = arrayStack.size(); // 스택의 사이즈를 len으로 간편히 표현
if(len == 0) // 스택에 들어있는 데이터가 없으면
{
System.out.println("스택이 비었습니다");
return null;
}
String data = arrayStack.get(arrayStack.size() - 1); // get()함수로 단지 꺼내기만하는 기능 구현
return data;
}
}
public class StackTest {
public static void main(String[] args) {
MyStack stack = new MyStack();
stack.push("A"); // 데이터 삽입
stack.push("B");
stack.push("C");
System.out.println(stack.pop()); // c 반환
System.out.println(stack.pop()); // b 반환
System.out.println(stack.pop()); // a 반환
System.out.println(stack.pop()); // 스택이 비어있음.
}
}
Result

<QueueTest.java>
package chapter12_collection.arraylist;
import java.util.ArrayList;
class MyQueue
{
private ArrayList<String> arrayQueue = new ArrayList<String>();
public void enQueue(String data) // enQueue의 경우는 삽입의 경우이므로 반환할 값이 없으므로 void로 반환할 데이터 타입을 정하지 않음을 보인다.
{
arrayQueue.add(data);
}
public String deQueue() // deQueue의 경우는 삭제의 경우이므로 반환데이터형이 있어야하므로 enQueue에서 지정했던 String을 그대로 적어준다.
{
int len = arrayQueue.size(); // 큐의 사이즈를 len으로 관리
if(len == 0) // 스택과 마찬가지로 자료공간이 비어있을 경우의 예외를 만듦
{
System.out.println("큐가 비었습니다.");
return null;
}
return arrayQueue.remove(0); // 실제로 반환값을 주고 실제값도 지워짐. get과는 다른 개념. 개념은 단지 꺼내주기만함
}
}
public class QueueTest {
public static void main(String[] args) {
MyQueue queue = new MyQueue();
queue.enQueue("A"); // 데이터 삽입
queue.enQueue("B"); // 데이터 삽입
queue.enQueue("C"); // 데이터 삽입
System.out.println(queue.deQueue()); // A 반환
System.out.println(queue.deQueue()); // B 반환
System.out.println(queue.deQueue()); // C 반환
System.out.println(queue.deQueue()); // 큐가 비어있음.
}
}
Result

<HashSetTest.java>
package chapter12_collection.hashset;
import java.util.HashSet;
public class HashSetTest {
public static void main(String[] args) {
HashSet<String> set = new HashSet<String>();
set.add("aaa");
set.add("bbb");
set.add("ccc");
System.out.println(set); // HashSet에는 toString 이 구현이 되어있으므로 바로 출력 가능
set.add("aaa"); // 이처럼 추가를 해도 중복을 허용하지 않기 때문에
System.out.println(set); // 똑같은 출력값을 가진다.
}
}
중복을 허용하지 않는다는 것을 확인하기 위해 논리형으로
출력해 확인할 수 있다.
Result

package chapter12_collection.hashset;
import java.util.HashSet;
public class HashSetTest {
public static void main(String[] args) {
HashSet<String> set = new HashSet<String>();
boolean d1 = set.add("ddd");
set.add("aaa");
set.add("bbb");
set.add("ccc");
System.out.println(d1);
boolean d2 = set.add("ddd"); // 이처럼 추가를 해도 중복을 허용하지 않기 때문에
System.out.println(d2); // 똑같은 출력값을 가진다.
// 처럼 추가해주면, d1출력값은 true = 잘 삽입되어있음을 확인가능
// d2출력값은 false = 중복을 허용하지 않아 삽입이 되어있지않음으로 확인이 가능하다.
}
}
Result

'Programming > Java_자바' 카테고리의 다른 글
[JAVA 기초] 내부클래스, '람다식' 이란? (0) | 2022.02.11 |
---|---|
[JAVA 기초] Comparable 와 Comparator 인터페이스 (0) | 2022.01.17 |
[JAVA 기초] Collection 인터페이스 (컬렉션 인터페이스)와 ArrayList 예제 실습 (0) | 2022.01.15 |
[JAVA 기초] 스택(Stack), 큐(Queue), 트리(Tree) (0) | 2022.01.14 |
[JAVA 기초] 제네릭 프로그래밍, 컬렉션 프레임워크 (0) | 2022.01.13 |