Java
Collections는 컬렉션과 관련된 메서드를 제공한다. 주의해야 할 것은 java.util.Collection은 인터페이스이고 java.util.Collections는 클래스이다. 컬렉션의 동기화 멀티 쓰레드 프로그래밍에서는 하나의 객체를 여러 쓰레드가 동시에 접근할 수 있다. 그렇기 때문에 데이터의 일관성(consistency)을 유지하기 위해선 공유되는 객체에 동기화(synchronization)가 필요하다. Vector, Hashtable과 같은 구버전(JDK1.2 이전)의 클래스들은 자체적으로 동기화 처리가 되어있다. 하지만 멀티쓰레드 프로그래밍이 아닌 경우 이는 불필요한 기능이 되어 성능을 떨어뜨리는 요인이 된다. 이러한 이유로 JDK1.2 버전 부터 새로 나온 ArrayList, HashM..
HashMap은 Map 인터페이스를 구현한 컬렉션 클래스이다. Map의 특징, 키(key)와 값(value)을 묶어 하나의 데이터(entry)로 저장한다는 특징을 갖는다. 가장 눈여겨볼 특징은 해싱(hashing)을 사용하기 때문에 뛰어난 성능을 보인다. import java.util.HashMap; HashMap hs = new HashMap(); // Object, Object 타입으로 아무 객체나 가능 hs.put(1, 3); // put(key, value) hs.put(2, 3); hs.put(3, 3); System.out.print(hs); // {1=3, 2=3, 3=3} System.out.println(hs.entrySet()); // [1=3, 2=3, 3=3] hs.put(3, 5)..
HashSet은 Set 인터페이스를 구현한 가장 대표적인 컬렉션이다. 저장순서를 유지하고자 한다면 LinkedHashSet을 사용해야 한다. HashSet은 중복된 요소를 저장하지 않는다. HashSet은 add() 혹은 addAll() 메서드를 사용하는데 중복된 요소를 추가하고자 하면 false를 반환한다. 그러므로 중복된 요소만 가져오고자 한다면 이를 이용할 수 있다. import java.util.Arrays; import java.util.HashSet; int[] arr = {1, 1, 2, 3, 4, 4, 5}; int[] dupSet = {}; HashSet duplicate = new HashSet(); dupSet = Arrays.stream(arr).filter(data -> !dupl..
Comparable을 구현한 클래스들은 기본적으로 오름차순으로 정렬 Comparator을 구현하면 내림차순 혹은 다른 기준으로 정렬 Comparator와 Comparable은 모두 인터페이스로 컬렉션을 정렬하는데 필요한 메서드를 정의하고 있다. 그 중 Comparaable은 java.lang 패키지에 있고 Comparator는 java.util 패키지에 있다. 따라서 Comparable은 따로 import가 필요없다. 인터페이스 주요 메서드 설명 Comparable compareTo(Object o) → int 비교하는 값보다 작으면 음수(-1), 크면 양수(1), 같으면 0을 반환한다. Comparator compare(Object o1, Object o2) → int 비교하는 값보다 작으면 음수(-1..
Iterator, ListIterator, Enumeration 모두 컬렉션에 저장된 요소를 접근하는데 사용되는 인터페이스이다. 컬렉션에 저장된 요소들을 읽어오는 방법을 표준화한 것이다. Iterator Collection 인터페이스에는 Iterator (Iterator를 구현한 클래스의 인스턴스)를 반환하는 iterator()를 정의하고 있다. Iterator()는 Collection 인터페이스에 정의된 메서드이므로 Collection 인터페이스의 자식인 List와 Set에도 포함되어 있다. List, Set에 포함되어 있다. Map 인터페이스를 구현한 컬렉션 클래스는 은 직접 호출할 수 없고 KetSet() or entrySet() 등으로 Set형태로 얻어 온 후 Iterator()를 호출해야 Ite..
Stack: LIFO (시누크) Queue: FIFO (C130) 연습문제들: https://school.programmers.co.kr/learn/courses/30/parts/12081 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 스택 스택은 순차적으로 데이터를 추가하고 삭제한다. 그러므로 ArrayList와 같은 배열기반의 컬렉션이 적합하다. 메서드 설명 empty() → boolean Stack이 비어있는지 true or false peek() → Object Stack의 맨 위에 저장된 객체를 반환 (만약 스택이 비었다면 EmptyStackEx..
컬렉션 프레임워크는 컬렉션, 다수의 데이터를 다루는데 필요한 다양하고 풍부한 클래스를 제공해 준다. 자바의 컬렉션 프레임워크는 데이터 군을 저장하는 클래스들을 표준화한 설계를 뜻한다. 컬렉션 프레임워크의 핵심 인터페이스와 특징은 다음과 같다. 인터페이스 특징 List 순서가 있는 데이터의 집합. 데이터의 중복을 허용한다. Set 순서를 유지하지 않는 데이터의 집합. 데이터의 중복을 허용하지 않는다. Map key(키)와 value(값)의 쌍으로 이루어진 데이터의 집합. 순서는 유지되지 않으며, 키는 중복을 허용하지 않고, 값은 중복을 허용한다. >> ArrayList ArrayList는 List 인터페이스를 구현하기 때문에 데이터의 저장순서가 유지되고 중복을 허용한다는 특징을 갖는다. ArrayList..
배열을 사용하면 많은 양의 데이터를 손쉽게 다룰 수 있다. > 배열의 특징 배열은 각 저장공간이 연속적으로 배치되어 있다. 배열 선언: 배열을 다루기 위한 참조변수를 위한 공간 할당 배열 생성: 값을 저장할 수 있는 공간 생성 int[] arr = new int[5]; // 타입[] 변수이름: 배열 선언 / new int[길이]: 길이만큼의 배열 생성 배열이름.length는 상수 배열이 한번 선언되면 길이를 변경할 수 없다. 하지만 배열을 복사해서 새로운 배열에 붙여넣는 방식으로 길이를 변경한다. > 배열의 복사 int[] arr = new int[5]; // {1, 2, 3, 4, 5} 라고 가정 int[] temp = new int[arr.length * 2]; // arr보다 길이가 2배인 배열 생..
값 연산시 자료형을 주의해야한다. 특징들을 모아놓자. > 산술 연산자 >> 일반 산술 변환 일반 산술 변환이란 연산 수행 직전에 발생하는 피연산자의 자동 형변환이다. 두 가지 특징이 있다. 두 피연산자의 타입을 큰 타입으로 일치시킨다. 피연산자의 타입이 int보다 작은 타입이면 int로 변환된다. >> 증감 연산자 ++, -- 증감연산자의 피연산자로 정수와 실수 모두 가능하다. 상수는 불가능하다. 피연산자의 값을 변경시킨다. 증감연산자는 일반 산술 변환에 의한 자동 형변환이 발생하지 않고 연산결과의 타입은 피연산자의 타입과 같다. 타입 설명 전위형 값이 참조되기 전에 증가시킨다. 후위형 값이 참조된 후에 증가시킨다. >> 산술 연산 산술 연산시 변수의 자료형을 신경써야한다. 큰 자료형에서 작은 자료형으로..