Day07 JAVA Studying
by 효기’s
- 강사님
final을 ~쓰면
1. field → 상수
2. method → 오버라이드 금지
3. class → 상속 금지
- 강사님
* 제네릭 클래스 = 기능은 똑같은데 타입이 다른것을 해결하려고 하는 것.
* 타입 제한이 없다. (타입 제한이 없어서 int인데 float도 사용가능하다.)
*
* 제네릭은 객체 타입만 사용가능하다.
* EX) <int> (x) -> <Integer> (o)
*
* 미결정 타입 = T (나중에 타입을 결정해)
* 강제 타입 변환이 필요없어짐.
*
* EX) 컵의 근본은 변하지 않지만 안에 뭘 넣느냐에 따라 물컵, 사이다컵이 된다.
*
* import static java.lang.System.out; (println 으로 출력가능)
제네릭 클래스는 타입 매개변수를 사용하여 다양한 타입의 데이터를 처리할 수 있는 클래스입니다.
타입 매개변수는 클래스 내부에서 사용되는 변수의 타입을 나타내는데,
실제 사용 시에 구체적인 타입으로 대체됩니다. 이를 통해 코드의 재사용성과 타입 안정성을 높일 수 있습니다.
package Test;
public class study38_0711<T>{
public T content; // 타입을 선언해주지 않음.
public static void main(String[] args) {
study38_0711<String> box1 = new study38_0711<String>(); // string으로 타입 입력
box1.content = "안녕하세요.";
String str = box1.content;
System.out.println(str); // 안녕하세요 출력
study38_0711<Integer> box2 = new study38_0711<Integer>(); // int로 타입 변경
box2.content = 100;
int value = box2.content;
System.out.println(value); // 100 출력
}
}
package Test;
import static java.lang.System.out;
public class study39<T> {
T[] v;
public void set(T[] n) {
v = n;
}
public void print() {
for(T s : v)
out.println(s);
}
public static void main(String[] args) {
// 타입 제한이 없음.
study39<String> t = new study39<String>();
String[] ss = {"애", "아", "서"};
t.set(ss);
t.print(); // 애 아 서
study39 t1 = new study39();
Integer[] s = {1, 2, 3};
t1.set(s);
t1.print(); // 1 2 3
}
}
컬렉션 프레임워크
List(ArrayList(가장많이씀, 한칸씩 밀림, 쓰레드 동기화o), Vector, LinkedList(하나만 빼고 연결할수있음, 쓰레드 동기화x)
= 순서 유지하고 저장, 중복 저장가능. (데이터를 모을때)
Set(HashSet, TreeSet)
= 순서 유지하지 않고 저장, 중복 저장 안됨.(중복 입력자체가 안됨)
Map(HashMap(null을 혀용, 쓰레드 동기화x), Hashtable, TreeMap, Properties)
= 키와 값으로 구성된 엔트리 저장, 키는 중복 저장 안됨.
HashSet
package Test;
import java.util.*;
import static java.lang.System.out;
public class study40 {
public static void main(String[] args) {
String[] str = {"Java", "Beans", "Java", "XML"};
HashSet<String> hs1 = new HashSet<String>();
HashSet<String> hs2 = new HashSet<String>();
for (String n : str) {
if(!hs1.add(n)) // str 값이 아니면
hs2.add(n); // hs2에 넣어라.
}
out.println("hs1:" + hs1); // 중복된 값 넣지 못해서 java, beans, xml
hs1.removeAll(hs2); // 2번 배열에 있는 java를 제거
out.println("hs1:" + hs1); // beans, xml 출력
out.println("hs2:" + hs2); // hs2는 자바 인덱스라서 java출력
}
}
Map Ex1
package Test;
import java.util.*;
import static java.lang.System.out;
public class study41 {
public static void main(String[] args) {
String[] msg = {"Berlin", "Dortmund", "Frankfurt", "Gelsenkirchen", "Hamburg"};
HashMap<Integer, String> map = new HashMap<Integer, String>();
for(int i = 0; i < msg.length; i++) // msg의 길이만큼 반복
map.put(i, msg[i]); // (0, msg[0] ~ 4, msg[4]를 map에 넣음)
Set<Integer> keys = map.keySet(); // map의 key를 담은 객체 keys를 생성 (set은 중복x)후 keys에 저장
for(Integer n : keys) // keys의 요소(int)를 순회후 int n에 저장.
out.println(map.get(n)); // 가져온 값을 출력.
/*
Berlin
Dortmund
Frankfurt
Gelsenkirchen
Hamburg
*/
}
}
List
List는 순서가 있는 데이터의 집합으로, 데이터를 중복으로 포함할 수 있습니다.
데이터를 인덱스를 사용하여 접근하고, 순서를 유지합니다.
import java.util.ArrayList;
import java.util.List;
public class ListExample {
public static void main(String[] args) {
List<String> fruits = new ArrayList<>();
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Orange");
fruits.add("Apple"); // 중복된 데이터
System.out.println(fruits); // 출력: [Apple, Banana, Orange, Apple]
}
}
Set
Set은 순서가 없는 고유한 데이터의 집합으로, 중복된 데이터를 포함할 수 없습니다.
import java.util.HashSet;
import java.util.Set;
public class SetExample {
public static void main(String[] args) {
Set<String> countries = new HashSet<>();
countries.add("USA");
countries.add("Canada");
countries.add("India");
countries.add("Canada"); // 중복된 데이터
System.out.println(countries); // 출력: [USA, Canada, India]
}
}
Map
Map은 키와 값의 쌍으로 데이터를 저장하는 구조입니다.
각각의 키는 고유해야 하며, 키를 사용하여 값에 접근할 수 있습니다.
import java.util.HashMap;
import java.util.Map;
public class MapExample {
public static void main(String[] args) {
Map<String, Integer> studentScores = new HashMap<>();
studentScores.put("John", 85);
studentScores.put("Alice", 92);
studentScores.put("Bob", 78);
int johnScore = studentScores.get("John");
System.out.println("John's score: " + johnScore); // 출력: John's score: 85
}
}
ArrayList
ArrayList는 크기가 가변적인 동적 배열을 구현한 클래스로,
내부적으로 배열을 사용하여 요소를 저장합니다.
요소의 삽입, 삭제, 검색 등의 작업에 효율적이며, 임의의 인덱스로 접근할 수 있습니다.
import java.util.ArrayList;
import java.util.List;
public class ArrayListExample {
public static void main(String[] args) {
List<String> names = new ArrayList<>();
names.add("Alice");
names.add("Bob");
names.add("Charlie");
System.out.println(names); // 출력: [Alice, Bob, Charlie]
String secondName = names.get(1);
System.out.println("Second name: " + secondName); // 출력: Second name: Bob
names.remove(0);
System.out.println(names); // 출력: [Bob, Charlie]
}
}
Vector
Vector는 ArrayList와 유사한 기능을 제공하는 클래스로, 동적 배열을 구현합니다.
Vector는 스레드 동기화를 지원하므로 멀티스레드 환경에서 안전하게 사용할 수 있습니다.
import java.util.Vector;
import java.util.List;
public class VectorExample {
public static void main(String[] args) {
List<Integer> numbers = new Vector<>();
numbers.add(10);
numbers.add(20);
numbers.add(30);
System.out.println(numbers); // 출력: [10, 20, 30]
int firstNumber = numbers.get(0);
System.out.println("First number: " + firstNumber); // 출력: First number: 10
numbers.remove(2);
System.out.println(numbers); // 출력: [10, 20]
}
}
LinkedList
LinkedList는 이중 연결 리스트(doubly linked list)를 구현한 클래스로,
각 요소가 이전 요소와 다음 요소에 대한 참조를 유지합니다.
요소의 삽입, 삭제, 검색 작업에서 유연하게 동작할 수 있습니다.
그러나 임의의 인덱스로의 접근은 ArrayList나 Vector보다 느리게 될 수 있습니다.
import java.util.LinkedList;
import java.util.List;
public class LinkedListExample {
public static void main(String[] args) {
List<String> colors = new LinkedList<>();
colors.add("Red");
colors.add("Green");
colors.add("Blue");
System.out.println(colors); // 출력: [Red, Green, Blue]
String lastColor = colors.get(colors.size() - 1);
System.out.println("Last color: " + lastColor); // 출력: Last color: Blue
colors.remove(1);
System.out.println(colors); // 출력: [Red, Blue]
}
}
HashSet
HashSet은 순서를 유지하지 않는 고유한 요소들의 집합을 나타내는 클래스입니다.
중복된 요소를 허용하지 않으며, 해시 함수를 사용하여 요소들을 저장하고 검색합니다.
import java.util.HashSet;
import java.util.Set;
public class HashSetExample {
public static void main(String[] args) {
Set<String> fruits = new HashSet<>();
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Orange");
fruits.add("Apple"); // 중복된 요소
System.out.println(fruits); // 출력: [Apple, Orange, Banana]
}
}
TreeSet
TreeSet은 순서가 정렬된 고유한 요소들의 집합을 나타내는 클래스입니다.
요소들은 기본 정렬 순서 또는 사용자가 지정한 정렬 순서에 따라 정렬됩니다.
import java.util.TreeSet;
import java.util.Set;
public class TreeSetExample {
public static void main(String[] args) {
Set<Integer> numbers = new TreeSet<>();
numbers.add(5);
numbers.add(2);
numbers.add(8);
numbers.add(2); // 중복된 요소
System.out.println(numbers); // 출력: [2, 5, 8]
}
}
HashMap
HashMap은 키-값 쌍으로 데이터를 저장하는 클래스입니다.
키와 값은 모두 중복을 허용하지 않으며, 해시 함수를 사용하여 데이터를 저장하고 검색합니다.
import java.util.HashMap;
import java.util.Map;
public class HashMapExample {
public static void main(String[] args) {
Map<String, Integer> studentScores = new HashMap<>();
studentScores.put("John", 85);
studentScores.put("Alice", 92);
studentScores.put("Bob", 78);
int johnScore = studentScores.get("John");
System.out.println("John's score: " + johnScore); // 출력: John's score: 85
}
}
Hashtable
Hashtable은 HashMap과 비슷한 키-값 쌍을 저장하는 클래스입니다.
Hashtable은 스레드 동기화를 지원하여 멀티스레드 환경에서 안전하게 사용할 수 있습니다.
다만, HashMap에 비해 성능 면에서는 약간 떨어질 수 있습니다.
import java.util.Hashtable;
import java.util.Map;
public class HashtableExample {
public static void main(String[] args) {
Map<String, Integer> studentScores = new Hashtable<>();
studentScores.put("John", 85);
studentScores.put("Alice", 92);
studentScores.put("Bob", 78);
int johnScore = studentScores.get("John");
System.out.println("John's score: " + johnScore); // 출력: John's score: 85
}
}
TreeMap
TreeMap은 키-값 쌍을 정렬된 순서로 저장하는 클래스입니다.
기본 정렬 순서 또는 사용자가 지정한 정렬 순서에 따라 정렬됩니다.
import java.util.TreeMap;
import java.util.Map;
public class TreeMapExample {
public static void main(String[] args) {
Map<Integer, String> students = new TreeMap<>();
students.put(3, "Alice");
students.put(1, "Bob");
students.put(2, "John");
System.out.println(students); // 출력: {1=Bob, 2=John, 3=Alice}
}
}
Properties
Properties는 키와 값이 모두 String 타입인 설정 정보를 저장하는 클래스입니다.
일반적으로 설정 파일이나 구성 파일을 처리하는 데 사용됩니다.
import java.util.Properties;
public class PropertiesExample {
public static void main(String[] args) {
Properties properties = new Properties();
properties.setProperty("name", "John");
properties.setProperty("age", "25");
String name = properties.getProperty("name");
String age = properties.getProperty("age");
System.out.println("Name: " + name); // 출력: Name: John
System.out.println("Age: " + age); // 출력: Age: 25
}
}
Stack
스택은 후입선출(LIFO, Last-In-First-Out) 원칙을 따르는 자료구조로,
마지막에 삽입된 요소가 가장 먼저 제거됩니다. 삽입과 제거가 스택의 상단(top)에서 이루어집니다.
import java.util.Stack;
public class StackExample {
public static void main(String[] args) {
Stack<String> stack = new Stack<>();
stack.push("Apple");
stack.push("Banana");
stack.push("Orange");
System.out.println(stack); // 출력: [Apple, Banana, Orange]
String top = stack.pop();
System.out.println("Removed: " + top); // 출력: Removed: Orange
String peek = stack.peek();
System.out.println("Top: " + peek); // 출력: Top: Banana
}
}
queue
큐는 선입선출(FIFO, First-In-First-Out) 원칙을 따르는 자료구조로,
가장 먼저 삽입된 요소가 가장 먼저 제거됩니다. 삽입은 큐의 뒤(rear)에서, 제거는 큐의 앞(front)에서 이루어집니다.
import java.util.Queue;
import java.util.LinkedList;
public class QueueExample {
public static void main(String[] args) {
Queue<String> queue = new LinkedList<>();
queue.offer("Apple");
queue.offer("Banana");
queue.offer("Orange");
System.out.println(queue); // 출력: [Apple, Banana, Orange]
String front = queue.poll();
System.out.println("Removed: " + front); // 출력: Removed: Apple
String peek = queue.peek();
System.out.println("Front: " + peek); // 출력: Front: Banana
}
}
'Studying > JAVA' 카테고리의 다른 글
JAVA 최댓값 최소값 쉽게 구하기 (7) | 2023.07.17 |
---|---|
Day08 JAVA Studying (0) | 2023.07.14 |
Day06 JAVA Studying (1) | 2023.07.10 |
Day05 JAVA Studying (0) | 2023.07.07 |
Day04 JAVA Studying (0) | 2023.07.06 |
블로그의 정보
감성 개발자 효기
효기’s