
int[] intArray = {1, 2, 3, 4, 5};
//1. 중괄호를 이용한 초기화
for (int i = 0; i < intArray.length; i++) {
intArray[i] = i;
}
//2. 반목문을 이용한 초기화
Arrays.fill(intArray, 1);
//3. 배열의 주소를 모두 같은값으로 초기화
복사
복사의 종류에는 2가지가 있는데 얕은 복사, 깊은 복사가 있다.
-얕은 복사 : 배열은 참조형 변수로 대입 연사자인 '=' 를 이용해서 복사를 하게 되면 주소값이 복사되고 실제값은 1개로 유지된다. 즉 2개의 변수가 같은 주소를 가르킨다.
// 얕은 복사
int[] a = { 1, 2, 3, 4 };
int[] b = a; // 얕은 복사
b[0] = 3; // b 배열의 0번째 순번값을 3으로 수정했습니다. (1 -> 3)
System.out.println(a[0]); // 출력 3 <- a 배열의 0번째 순번값도 3으로 조회됩니다.
-깊은 복사 : 새로운 배열을 만들고 싶을때 배열의 기본형 값을 꺼내주어 복사를 해주면 되는데 for 문을 통해서 하나씩 꺼내주는 방법도 있지만 Arrays 클래스의 copyOf 함수를 활용하면 된다.
int[] a = { 1, 2, 3, 4 };
int[] b = Arrays.copyOf(a, a.length); // 배열과 함께 length값도 같이 넣어줍니다.
String 배열
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";
char[] strCharArray = str.toCharArray();
// String 을 char[] 로 변환
char[] charArray = {'A', 'B', 'C'};
String charArrayString = new String(charArray);
// char[] 를 String 으로 변환
참조형 변수는 기본형 변수와 대개 대소문자로 구분한다. 1.double -> Double
2.int -> Integer
3.String은 자체로 참조형 변수이다.
아래 그림은 컬렉션 프레임워크의 상속관계를 나타낸다.

List 는 순서가 있는 데이터의 집합(데이터의 중복 허용) 으로 ArrayList, LinkedList, Stack으로 구성되어있다.
선언, 생성, 핵심 내장함수로는 다음과같다.
ArrayList<Integer> initList = new ArrayList<Integer>(); intList.add({추가할 값}),set({수정할 순번}, {수정할 값}), toString()
LinkedList<Integer> linkedList = new LinkedList<Integer>();
Stack<Integer> intStack = new Stack<Integer>(); iniStack.peek(), pop(), isEmpty(), size(), push();
Queue는 들어간 순서대로 값이 조회되는 FIFO(First In First Out)의 형태이다. 기능으로는 add(), peek(), poll() 이 존재한다. Queue는 생성자가 없는 인터페이스 이기에 바로 생성이 불가합니다. 때문에 선언및 생성은 생성자가 존재하는 클래스인 LinkedList를 통해 생성이 가능하다.
Queue<Integer> intQueue = new LinkedList<Integer>(); intQueue.add(), peek(), poll();
Set 은 순서가 없고 중복이 없는 배열이다. Set은 HashSet, TreeSet등으로 응용하여 사용 가능하다. 또한 Queue 와 마찬가지로 생성자가 없는 인터페이스 이다. 즉 생성자가 존재하는 HashSet을 이용한다.
Set<Integer> intSet = new HashSet<Integer>(); intSet.add(), get(), contains();
key-value 형태로 데이터를 저장하기 때문에 key 값을 기준으로 value를 조회할 수 있다.
key는 unique한 성격을 지니기에 중복이 허용하지 않으며 Set과 마찬가지로 생성자가 존재하는 HashMap, TreeMap, ConcurrentHashMap 등이 있다.
Map<String, Integer> intMap = new HashMap<>(); for(String key : iniMap.ketSet()){} for(Integer key : initMap.values()){} intMap.put("일",11); intMap.get("일"); //result = 11
HashMap 은 중복된 키 가 존재하면 마지막으로 put() 된 value 값으로 덮혀 쓰인다.
HashMap : 중복을 허용하지 않고 순서를 보장하지 않음 , 키와 값으로 null이 허용TreeMap : key 값을 기준으로 정렬을 할 수 있습니다. 다만, 저장시 정렬(오름차순)을 하기 때문에 저장시간이 다소 오래 걸림HashMap vs TreeMap
ConcurrentHashMap
1. length
length는 배열의 길이를 조회해줍니다.2. length()
length()는 문자열의 길이를 조회해줍니다. (ex. “ABCD”.length() == 4)3. size()
size()는 컬렉션 타입목록의 길이를 조회해줍니다.자바 컬렉션의 대한 개념을 다시 복습할 수 있는 시간이였다. 다음 3주차에는 자바의 객체지향의 특징에 대해 알아본다.