본문 바로가기

JAVA

(30)
Collection 클래스 정리 ArrayList (new) / Vector (old) - 순서 O, 중복 O (ex. 식당 대기 리스트) - 배열 기반 - 데이터의 추가와 삭제에 불리 - 순차적인 추가와 삭제는 제일 빠름 - 임의의 요소에 대한 접근성이 뛰어남 LinkedList - 순서 O, 중복 O - 연결 기반 - 데이터의 추가와 삭제에 유리 - 임의의 요소에 대한 접근성이 좋지 않음 HashMap - 순서 X, 키 중복 X, 값 중복 O (ex. 아이디와 비밀번호) - 배열과 연결이 결합된 형태 - 추가, 삭제, 검색, 접근성이 모두 뛰어남 - 특히 검색에 최고 성능 TreeMap - 순서 X, 키 중복 X, 값 중복 O - 연결 기반 - 정렬과 범위 검색에 적합 (검색은 HashMap이 나음) Stack - LIFO - 배열..
Collections Collections란? Arrays가 배열과 관련된 메서드를 제공하는 것처럼, Collections는 컬렉션과 관련된 메서드를 제공한다. 모든 메서드가 static으로 import static java.util.Collections.*; 선언을 해주면 메서드만 적어서 사용 가능하다. 아래 예제를 통해 다양한 메서드를 살펴보자. addAll(list, 1, 2, 3, 4, 5) : list에 1, 2, 3, 4, 5를 추가 rotate(list, 2) : list의 요소를 오른쪽으로 두 칸씩 이동 swap(list, 0, 2) : list의 첫 번째와 세 번째를 교환 shuffle(list) : 저장된 요소의 위치를 임의로 변경 (실행할 때마다 위치가 바뀜) sort(list) : 오름차순 정렬 sort..
HashMap HashMap이란? 키(Key)와 값(Value)을 묶어서 하나의 데이터(Entry)로 저장 순서 X / 키는 중복 X / 값은 중복 O 만약, 순서를 유지하고 싶다면 LinkedHashMap을 사용해라. 해싱 기법을 사용하기 때문에 많은 양의 데이터를 검색하는데 유리 왜 빠르다고 하는지? 배열의 인덱스를 값으로 출력하여 찾기 쉬움. 서랍 정리 해놓았다고 생각하자. 예를 들어, 주민번호 880101-2xxxxxx의 사람의 정보가 담긴 서랍을 찾아야 한다고 가정하자. 880101-2xxxxxx이 해시 함수를 거쳐 8이라는 인덱스를 출력했다면, 그 8이라는 인덱스만 찾으면 되므로 빠르게 찾을 수 있다. 아이디와 비밀번호를 저장하고 출력하는 예제 아이디를 key, 비밀번호를 value로 저장 put(Objec..
TreeSet TreeSet이란? 이진 검색 트리라는 자료구조의 형태로 데이터를 저장하는 컬렉션 클래스로 정렬, 검색, 범위 검색에 유리하다. 중복된 데이터의 저장을 허용하지 않으며 정렬된 위치에 저장하므로 저장 순서를 유지하지도 않는다. (중복 X, 순서 X) 다만, 순차적으로 저장하지 않기 때문에 추가 삭제에 시간이 걸린다는 단점이 있다. 정렬에 유리함을 보여주는 예제 아래 예제는 set.add()를 통해 set에 값을 저장하고 이를 출력하는 예제이다. TreeSet은 저장할 때 이미 정렬하기 때문에 읽어올 때 따로 정렬할 필요가 없다. 어떻게 이럴 수가 있지? TreeSet에 Integer 인스턴스를 저장했을 때 정렬되는 기준이 compareTo()이기 때문이다. 즉, Integer 클래스가 이미 Comparab..
HashSet HashSet Set 인터페이스를 구현한 가장 대표적인 컬렉션 중복 X 순서 X -> 이러한 특징으로 컬렉션 내의 중복 요소들을 제거할 때 주로 사용 cf) 중복을 제거하는 동시에 저장한 순서를 유지하고 싶으면 LinkedHashSet 사용 boolean add() 새로운 객체를 저장 -> 성공하면 true, 실패하면 false import java.util.HashSet; import java.util.Iterator; import java.util.Set; public class Ex11_9 { public static void main(String[] args) { Object[] objArr = { "1", new Integer(1), "2", "2", "3", "3", "4", "4", "4" ..
Arrays 클래스 Arrays 클래스에는 배열을 다루는데 유용한 메서드가 정의되어 있다. toString() 배열의 모든 요소를 문자열로 출력. 일차원 배열에 사용. deepToString() 배열의 모든 요소를 문자열로 출력. 다차원 배열에 사용. int[] arr = { 1,2,3,4,5 }; int[][] arr2D = {{11,22}, {21,22}}; System.out.println(Arrays.toString(arr)); System.out.println(Arrays.deepToString(arr2D)); fill() 배열의 모든 요소를 지정된 값으로 채움. int[] arr = new int[5]; Arrays.fill(arr, 9); // arr = [9,9,9,9,9] sort() 배열을 오름차순으로 정..
BufferedReader / BufferedWriter / StringTokenizer BufferedReader / BufferedWriter는 버퍼를 이용해서 입출력의 효율을 높여준다. 버퍼(buffer)란? 데이터를 한 곳에서 다른 한 곳으로 전송하는 동안 일시적으로 그 데이터를 보관하는 메모리 영역 버퍼링(buffering)은 버퍼를 활용하는 방식 또는 버퍼를 채우는 동작을 말한다. "버퍼링이 왜 이렇게 느려~" = "저기에서 여기까지 데이터 전송이 왜 이렇게 느려~" BufferedReader BufferedReader는 Enter, Spacebar 모두 경계로 인식하는 Scanner와 달리, Enter만 경계로 인식하고 받은 데이터가 String으로 고정되기 때문에 입력받은 데이터를 가공하는 작업이 필요할 경우가 많다. 그럼에도 불구하고 많은 양의 데이터를 입력받을 경우 Buff..
JDK / JRE / JVM 자바는 어떤 운영체제에서도 동일한 형태로 실행시킬 수 있는 특징이 있다. 이를 가능하게 해주는 것은 다름 아닌 JVM이다. 어떻게 해주는데? 자바 컴파일러는 코드가 실행되면 .java 파일을 .class 파일로 변환해주는 과정을 거치는데 .class 파일은 운영체제가 알지 못한다. 이때, JVM이 운영체제에 상관없이 동작할 수 있게 해준다. Java의 동작 원리 사람이 이해할 수 있게 만들어진 컴퓨터 언어 "java"로 소스코드를 입력한다. (.java) 컴파일하면 이클립스가 컴퓨터가 이해할 수 있는 언어로 변환한다. (.class) 실행을 누르면 이클립스가 컴퓨터에 설치된 java virtual machine으로 사인을 보낸다. 사인을 받은 java virtual machine은 컴퓨터에 사인을 보낸다..