본문 바로가기
반응형

DEV/Java28

[자바] HashSet HashSet은 Set 인터페이스를 구현한 가장 대표적인 컬렉션이며, 중복된 요소를 저장하지 않는다. 만약 이미 저장되어 있는 요소와 중복된 요소를 추가하고자 한다면 add나 addAll 메서드들은 false를 반환함으로써 중복된 요소이기 때문에 추가에 실패했다는것을 알린다. HashSet의 특징을 이용하면, 컬렉션 내의 중복 요소들을 쉽게 제거할 수 있다. ArrayList와 같이 List 인터페이스를 구현한 컬렉션과 달리 HashSet은 저장순서를 유지하지 않고 저장순서를 유지하려면 LinkedHashSet을 사용하면 된다. HashSet은 내부적으로 HashMap을 이용해서 만들어졌으며, HashSet이란 이름은 해싱(hashing)을 이용해서 구현했기 때문에 붙여진 것이다. 생성자 또는 메서드 설.. 2023. 2. 15.
[자바] Comparator 와 Comparable Arrays.sort()를 호출하면 컴퓨터가 알아서 배열을 정렬하는 것처럼 보이지만 사실 Character 클래스의 Comparable의 구현에 의해 정렬되었던 것이다. Comparator 와 Comparable은 모두 인터페이스로 컬렉션을 정렬하는데 필요한 메서드를 정의하고 있으며, Comparable 을 구현하고 있는 클래스들은 같은 타입의 인스턴스끼리 서로 비교할 수 있는 클래스들, 주로 Integer와 같은 wrapper 클래스와 String, Date, File 과 같은 것들이다. 기본적으로 오름차순(작은 -> 큰)으로 정렬되도록 구현되어 있다. 즉, Comparable을 구현한 클래스는 정렬이 가능하다는 것을 의미한다. public interface Comparator { int compare.. 2023. 2. 14.
[자바] Arrays Arrays 클래스에는 배열을 다루는데 유용한 메서드가 정의되어 있다. 참고로 Arrays 에 정의된 메서드는 모두 static이다. 배열의 복사 - copyOf(), copyOfRange() copyOf() 배열 전체를 복사해서 새로운 배열을 만들어 반환 copyOfRange() 배열의 일부를 복사해서 새로운 배열을 만들어 반환 - 지정된 범위의 끝은 포함되지 않는다. int[] arr = {0, 1, 2, 3, 4}; int[] arr2 = Arrays.copyOf(arr, arr.length); //arr2 = [0, 1, 2, 3, 4] int[] arr3 = Arrays.copyOf(arr, 3); //arr3 = [0, 1, 2] int[] arr4 = Arrays.copyOf(arr, 7);.. 2023. 2. 14.
[자바] Stack(스택)과 Queue(큐) Stack 스택은 마지막에 저장한 데이터를 가장 먼저 꺼내는 LIFO(Last In First Out) 구조 Queue 큐는 처음에 저장한 데이터를 가장 먼저 꺼내게 되는 FIFO(First In First Out) 구조 스택은 들어간 순서의 역순으로 꺼내어진다. 반대로 큐는 들어간 순서대로 꺼내게 된다. 순차적으로 데이터를 추가하고 삭제하는 스택에는 ArrayList와 같은 배열기반의 컬렉션 클래스가 적합하다. 큐는 항상 첫 번째 저장된 데이터를 삭제하고 꺼내므로 배열기반의 ArrayList 클래스를 사용하면 데이터를 꺼낼때마다 빈 공간을 채우기 위해 데이터의 복사가 발생하므로 비효율적이다. 그래서 큐는 LinkedList로 구현하는 것이 적합하다. import java.util.LinkedList; .. 2023. 2. 12.
[자바] LinkedList 배열은 구조가 간단하며 사용하기 쉽고 데이터를 읽어오는데 걸리는 시간이 가장 빠르다는 장점을 가지고 있지만, 단점도 있다. 1. 크기를 변경할 수 없다. - 크기를 변경할 수 없으므로 새로운 배열을 생성해서 데이터를 복사해야 한다. - 실행속도를 향상시키기 위해서는 충분히 큰 크기의 배열을 생성해야 하므로 메모리가 낭비된다. 2. 비순차적인 데이터의 추가 또는 삭제에 시간이 많이 걸린다. - 차례대로 데이터를 추가하고 마지막에서부터 데이터를 삭제하는것은 빠르지만 배열의 중간에 데이터를 추가하려면 빈자리를 만들기 위해 다른 데이터들을 복사해서 이동해야 한다. 이러한 배열의 단점을 보완하기 위해서 링크드 리스트(linked list) 라는 자료구조가 고안되었다. 배열은 데이터가 연속적으로 존재하지만 link.. 2023. 2. 11.
[자바]ArrayList ArrayList 는 프로젝트하면서 정말 많이 사용한다. 저장순서가 유지되고 중복을 허용한다는 특징을 갖고 있다. Vector와 비슷한데, Vector는 기존에 작성된 소스와의 호환성을 위해 남겨 둔 거라서 Vector보다는 ArrayList를 사용하는 것이 좋다. ArrayList는 Object배열을 이용해서 데이터를 순차적으로 저장한다. 만약, 배열에 더 이상 저장 할 공간이 없다면 새로운 배열을 생성해서 기존의 배열에 저장된 내용을 새로운 배열로 복사한 다음 저장된다. public class ArrayList extends AbstractList { implements List, RandomAccess, Cloneable, java.io.Serializable { ... transient Objec.. 2023. 2. 6.
[자바] 컬렉션 프레임워크(Collections Framework) 컬렉션 프레임워크 데이터를 군을 저장하는 클래스들을 표준화 한 설계. 컬렉션은 다수의 데이터를 의미하고, 프레임워크는 표준화된 프로그래밍 방식을 의미한다. 인터페이스와 다형성을 이용한 객체지향적 설계로 표준화되어 있어서 사용법도 쉽고, 재상용성이 높은 코드를 작성할 수 있는 장점이 있다. 인터페이스 특징 List 순서가 있는 데이터의 집합. 데이터의 중복 허용. Set 순서를 유지하지 않는 데이터의 집합. 데이터의 중복을 허용하지 않음. Map 키와값의 쌍으로 이루어진 데이터의 집합. 순서를 유지하지 않고, 키의 중복을 허용하지 않음. 값의 중복은 허용. 참고로 Vector, Stack, Hashtable, Properties와 같은 클래스들은 컬렉션 프레임워크가 만들어지기 이전부터 존재하던 것들이기 때.. 2023. 2. 5.
[자바] java.time 패키지 자바 Date와 Calendar가 가지고 있던 단점들을 해소하기 위해 JDK1.8부터 'java.time 패키지'가 추가되었다. 이 패키지는 아래와 같이 4개의 하위 패키지를 가지고 있다. java.time | 날짜와 시간을 다루는데 필요한 핵심 클래스들을 제공 java.time.chrono | 표준(ISO)이 아닌 달력 시스템을 위한 클래스들을 제공 java.time.format | 날짜와 시간을 파싱하고, 형식화하기 위한 클래스들을 제공 java.time.zone | 시간대(time-zone)와 관련된 클래스들을 제공 날짜나 시간을 변경하는 메서들은 기존의 객체를 변경하는 대신 항상 변경된 새로운 객체를 반환한다. 기존 Calendar 클래스는 변경 가능하므로, 멀티 쓰레드 환경에서 안전하지 못 하다.. 2023. 2. 3.
[자바] MessageFormat 정해진 양식에 맞춰 출력해야 될 때 MessageFormat을 사용하면 편리하다. MessageFormat의 parse를 이용하면 지정된 양식에서 필요한 데이터만 손쉽게 추출해낼 수 있다. import java.text.*; public class MessageFormatEx { public static void main(String[] args) { String msg = "{0}님, 안녕하세요. {1}에 방문해주셔서 감사합니다."; Object[] objArgs = {"방문자", "개발하는고양이 블로그"}; System.out.println(MessageFormat.format(msg, objArgs)); } } 결과 방문자님, 안녕하세요. 개발하는고양이 블로그에 방문해주셔서 감사합니다. {숫자} 로.. 2023. 2. 2.
반응형