📕 배열 초기화
배열 초기화할 때 쓰는 3가지 방법
// 배열 초기화 방법 3가지 정리
import java.util.Arrays; // Arrays 클래스를 import 하기
public class Main {
public static void main(String[] args) {
//1. 배열에 특정값 대입하며 선언 - 중괄호 {} 를 사용해서 초기화
int[] intArray = {1, 2, 3, 4, 5};
String[] stringArray = {"a", "b", "c", "d"};
//2-1. for문을 통해 값을 대입하여 초기화
for (int i = 0; i < intArray.length; i++) {
intArray[i] = i;
}
//2-2. for-each문을 통한 배열 출력하여 초기화
for (int i : intArray) {
System.out.print(i); // 01234
}
System.out.println(); // 줄바꿈
//3. 배열의 주소를 모두 같은값으로 초기화(Arrays.fill)
Arrays.fill(intArray, 1);//배열의 모든 값을 1로 초기화
for (int i : intArray) {
System.out.print(i); // 11111
}
}
}
// 출력
// 01234
// 11111
📗 배열 복사 - Array.copyOf()
// a 배열을 b에 복붙하기
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
// 2. Arrays.copyOf() 메서드
int[] a = { 1, 2, 3, 4 };
int[] b = Arrays.copyOf(a, a.length); // 배열과 함께 length값도 같이 넣어준다
}
}
+) .clone()도 복사가 되지만 2차원 이상 배열에서는 얕은 복사(복사했는데 복사했던 배열도 똑같이 바뀌는..) 로 동작하기 때문에 Array.copyOf() 메소드 사용 권장
📘 String 기능 활용
메서드
|
응답값 타입
|
설명
|
length()
|
int
|
문자열의 길이를 반환한다.
|
charAt(int index)
|
char
|
문자열에서 해당 index의 문자를 반환한다.
|
substring(int from, int to)
|
String
|
문자열에서 해당 범위(from~to)에 있는 문자열을 반환한다. (to는 범위에 포함되지 않음)
|
equals(String str)
|
boolean
|
문자열의 내용이 같은지 확인한다. 같으면 결과는 true, 다르면 false가 된다.
|
toCharArray()
|
char[]
|
문자열을 문자배열(char[])로 변환해서 반환한다.
|
new String(char[] charArr)
|
String
|
문자배열(char[]) 을 받아서 String으로 복사해서 반환한다.
|
String str = "ABCD";
// length()
int strLength = str.length();
System.out.println(strLength); // 4 출력
// charAt(int index)
char strChar = str.charAt(2); // 순번은 0부터 시작하니까 2순번은 3번째 문자를 가리킨다
System.out.println(strChar); // C 출력
// substring(int from, int to)
String strSub = str.substring(0, 3); // 0~2순번까지 자르기 (3순번은 제외)
System.out.println(strSub); // ABC 출력
// equals(String str)
String newStr = "ABCD"; // str 값과 같은 문자열 생성
boolean strEqual = newStr.equals(str);
System.out.println(strEqual); // true 출력
// toCharArray()
char[] strCharArray = str.toCharArray(); // String 을 char[] 로 변환
// 반대로 char[] 를 String로 변환하는 방법
char[] charArray = {'A', 'B', 'C'};
String charArrayString = new String(charArray); // char[] 를 String 으로 변환
📙 ArrayList
ArrayList : 배열(Array)처럼 일렬로 데이터를 저장하고 조회하여 순번값(인덱스)로 값을 하나씩 조회할 수 있다.
+) Array 와 Array List의 차이점 Array : 메모리에 연속된 공간을 요청한 사이즈만큼 받고 실제값을 저장하는 기본형 변수 (=정적배열) ArrayList : 생성시점에 작은 연속된 공간을 요청하여 참조형 변수들을 담아놓고 값이 추가될 때 필요하면 더 큰 공간을 받아 저장 (=동적배열) |
// ArrayList
import java.util.ArrayList; // ArrayList 사용하려면 import 추가
public class Main {
public static void main(String[] args) {
ArrayList<Integer> intList = new ArrayList<Integer>(); // 선언 + 생성
intList.add(15); // <Integer>니 괄호 안에 숫자
intList.add(25);
intList.add(35);
System.out.println(intList.get(0)); // 15 출력
System.out.println(intList.get(1)); // 25 출력
System.out.println(intList.get(2)); // 35 출력
System.out.println(intList.toString()); // [1,2,3] 출력
// 2번째 있는 값(25)을 바꾸기 - .set()
intList.set(1, 10); // 1번순번의 값을 10으로 수정해보았음
System.out.println(intList.get(1)); // 10 출력
intList.remove(1); // 1번순번의 값을 삭제 - .remove()
System.out.println(intList.toString()); // [1,3] 출력
intList.clear(); // 전체 값을 삭제 - .clear()
System.out.println(intList.toString()); // [] 출력
}
}
📕 LinkedList
LinkedList : 메모리에 남는 공간을 요청해서 여기저기 나누어 실제값을 담아놓고, 실제값이 있는 주소값으로 목록을 구성하고 저장하는 자료구조(여기저기 나누어 담기 때문에 모든 값을 조회할 때는 느림.. 그러나 값을 중간에 추가/삭제할 때는 빠름!)
// LinkedList
import java.util.LinkedList; // LinkedList import 하기
public class Main {
public static void main(String[] args) {
LinkedList<Integer> linkedList = new LinkedList<>(); // 선언 + 생성
linkedList.add(1);
linkedList.add(2);
linkedList.add(3);
System.out.println(linkedList.get(0)); // 1 출력
System.out.println(linkedList.get(1)); // 2 출력
System.out.println(linkedList.get(2)); // 3 출력
System.out.println(linkedList.toString()); // [1,2,3] 출력 (전체라 속도 느림)
linkedList.add(2, 4); // 2번 순번에 4 값을 추가
System.out.println(linkedList); // [1,2,4,3] 출력
linkedList.set(1, 10); // 1번순번의 값을 10으로 수정
System.out.println(linkedList.get(1)); // 10 출력
linkedList.remove(1); // 1번순번의 값을 삭제
System.out.println(linkedList); // [1,4,3] 출력
linkedList.clear(); // 전체 값을 삭제
System.out.println(linkedList); // [] 출력
}
}
📗 stack
stack : 값을 수직으로 쌓아놓고 넣었다 빼는 데이터 관리 자료구조 (FIFO)
기능 : 넣기 - push(), 조회 - peek(), 꺼내기 - pop()
- 기능이 제한적인 이유 : 최근에 저장된 데이터를 나열하기, 데이터의 중복처리 막기 등으로 유용하게 쓸 수 있기 때문
// Stack
import java.util.Stack; // stack import 하기
public class Main {
public static void main(String[] args) {
Stack<Integer> intStack = new Stack<Integer>(); // 선언 + 생성
intStack.push(1);
intStack.push(2);
intStack.push(3);
while (!intStack.isEmpty()) { // 다 지워질때까지 출력
System.out.println(intStack.pop()); // 3,2,1 출력
}
// 다시 추가
intStack.push(1);
intStack.push(2);
intStack.push(3);
// peek() -조회
System.out.println(intStack.peek()); // 3 출력 - 가장 위에 있는거 집기 때문
System.out.println(intStack.size()); // 3 출력 (peek() 할때 삭제 안됐다는 증거)
// pop() - 꺼내기
System.out.println(intStack.pop()); // 3 출력
System.out.println(intStack.size()); // 2 출력 (pop() 할때 삭제 됐다는 증거)
System.out.println(intStack.pop()); // 2 출력
System.out.println(intStack.size()); // 1 출력 (pop() 할때 삭제 됐다는 증거)
while (!intStack.isEmpty()) { // 다 지워질때까지 출력
System.out.println(intStack.pop()); // 1 출력 (마지막 남은거 하나)
}
}
}
📘 Queue
Queue : 한쪽에서 데이터를 넣고 반대쪽에서 데이터를 뺄 수 있는 집합 (FIFO 가능)
기능 : 넣기 - add(), 조회 - peek(), 꺼내기 - poll()
주의) 생성자가 존재하는 클래스인 LinkedList를 사용해야지만 Queue를 생성하여 받을 수 있다
// Queue
import java.util.LinkedList; // LinkedList, Queue impot 하기
import java.util.Queue;
public class Main {
public static void main(String[] args) {
Queue<Integer> intQueue = new LinkedList<>(); // 선언 + 생성
intQueue.add(1);
intQueue.add(2);
intQueue.add(3);
while (!intQueue.isEmpty()) { // 다 지워질때까지 출력
System.out.println(intQueue.poll()); // 1,2,3 출력
}
// 다시 추가
intQueue.add(1);
intQueue.add(2);
intQueue.add(3);
// peek()
System.out.println(intQueue.peek()); // 1 출력 (맨먼저 들어간값이 1 이라서)
System.out.println(intQueue.size()); // 3 출력 (peek() 할때 삭제 안됐다는 증거)
// poll()
System.out.println(intQueue.poll()); // 1 출력
System.out.println(intQueue.size()); // 2 출력 (poll() 할때 삭제 됐다는 증거)
System.out.println(intQueue.poll()); // 2 출력
System.out.println(intQueue.size()); // 1 출력 (poll() 할때 삭제 됐다는 증거)
while (!intQueue.isEmpty()) { // 다 지워질때까지 출력
System.out.println(intQueue.poll()); // 3 출력 (마지막 남은거 하나)
}
}
}
📙 Set
set : 순서를 보장 안 하지만 중복 허용 안하는 데이터의 집합(배열)
기능 : 추가 - intSet.add({추가할 값})
조회 - intSet.get({초회할 순번})
삭제 - intSet.remove({삭제할 값})
포함 확인 - intSet.contains({포함확인 할 값})
주의) 생성자가 존재하는 클래스인 HashSet, TreeSet, LinkedHashSet 등으로 응용 사용해야지 set을 생성하여 받을 수 있다
그러나 set은 그냥 쓸 수도 있다 - Queue와 마찬가지로 생성자가 없는 껍데기라 바로는 생성할 수 없음
// Set
import java.util.HashSet; // HashSet(예시는 일단 hashset으로), Set import 하기
import java.util.Set;
public class Main {
public static void main(String[] args) {
Set<Integer> intSet = new HashSet<Integer>(); // 선언 + 생성
intSet.add(1);
intSet.add(2);
intSet.add(3);
intSet.add(3);
intSet.add(3);
for (Integer value : intSet) {
System.out.println(value); // 1,2,3 출력(중복된 값(3)은 덮어씀)
}
// contains()
System.out.println(intSet.contains(2)); // true 출력
System.out.println(intSet.contains(4)); // false 출력
// remove()
intSet.remove(3); // 3 삭제
for (Integer value : intSet) {
System.out.println(value); // 1,2 출력
}
}
}
📕 Map
map : 위에는 value값들만 넣어서 관리했다면 map은 key-value 구도로 구성된 데이터 구조
기능 : 추가 - intMap.put({추가할 값},{추가할 value값})
조회 - intMap.get({조회할 key값})
전체 key 조회 - intMap.keySet( )
전제 value 조회 - intMap.values( )
삭제 - intMap.remove({삭제할 key값})
set과 마찬가지로 HashSet, TreeSet, LinkedHashSet 등으로 응용하여 사용할 수 있다
// Map
import java.util.Map; // map import 하기
public class Main {
public static void main(String[] args) {
Map<String, Integer> intMap = new HashMap<>(); // 선언 + 생성
// 키 , 값
intMap.put("일", 11);
intMap.put("이", 12);
intMap.put("삼", 13);
intMap.put("삼", 14); // 중복 Key값은 덮어씀
intMap.put("삼", 15); // 중복 Key값은 덮어씀
// key 값 전체 출력
for (String key : intMap.keySet()) { // .keySet() : key만 빼서 배열로 만들기
System.out.println(key); // 일,이,삼 출력
}
// value 값 전체 출력
for (Integer key : intMap.values()) {
System.out.println(key); // 11,12,15 출력 - 마지막에 쓴 15로 덮어쓰기된 것
}
// get() - 해당 키의 value 출력
System.out.println(intMap.get("삼")); // "삼"이란 key를 가진 value 출력 : 15 출력
}
}
'JAVA' 카테고리의 다른 글
빌더 패턴(Builder pattern)을 써야할까?, @Builder (0) | 2024.02.23 |
---|---|
object 클래스의 메서드와 instance of (1) | 2024.01.23 |
지역변수, 다형성 형변환, instanceOf (0) | 2024.01.04 |
메서드, 매개변수, 인스턴스 멤버와 클래스 멤버의 차이점은? (0) | 2024.01.03 |
[JAVA] JAVA 이모저모 (0) | 2023.12.29 |