TreeMap이란? TreeMap은 이진트리를 기반으로 한 Map 컬렉션입니다. 같은 Tree구조로 이루어진 TreeSet과의 차이점은 TreeSet은 그냥 값만 저장한다면 TreeMap은 키와 값이 저장된 Map, Etnry를 저장한다는 점입니다. TreeMap에 객체를 저장하면 자동으로 정렬되는데, 키는 저장과 동시에 자동 오름차순으로 정렬되고 숫자 타입일 경우에는 값으로, 문자열 타입일 경우에는 유니코드로 정렬합니다. 정렬 순서는 기본적으로 부모 키값과 비교해서 키 값이 낮은 것은 왼쪽 자식 노드에 키값이 높은 것은 오른쪽 자식 노드에 Map.Etnry 객체를 저장합니다. TreeMap은 일반적으로 Map으로써의 성능이 HashMap보다 떨어집니다. TreeMap은 데이터를 저장할 때 즉시 정렬하기..
HashMap 이란? HashMap은 Map 인터페이스를 구현한 대표적인 Map 컬렉션입니다. Map 인터페이스를 상속하고 있기에 Map의 성질을 그대로 가지고 있습니다. Map은 키와 값으로 구성된 Entry객체를 저장하는 구조를 가지고 있는 자료구조입니다. 여기서 키와 값은 모두 객체입니다. 값은 중복 저장될 수 있지만 키는 중복 저장될 수 없습니다. 만약 기존에 저장된 키와 동일한 키로 값을 저장하면 기존의 값은 없어지고 새로운 값으로 대치됩니다. HashMap은 이름 그대로 해싱(Hashing)을 사용하기 때문에 많은 양의 데이터를 검색하는 데 있어서 뛰어난 성능을 보입니다. HashMap 선언 HashMap map1 = new HashMap();//HashMap생성 HashMap map2 = n..
Vector란? Vector는 ArrayList와 동일한 내부구조를 가지고 있습니다. ArrayList와 마찬가지로 Vector내부에 값이 추가되면 자동으로 크기가 조절되며 그다음 객체들은 한 자리씩 뒤로 이동됩니다. 하지만 모든 것이 다 똑같은 것은 아니고 Vector와 Arraylist의 한가지 다른 점이 있는데 Vector는 동기화된 메소드로 구성되어 있기 때문에 멀티 스레드가 동시에 이 메소드들을 실행할 수 없고, 하나의 스레드가 실행을 완료해야만 다른 스레드들이 실행할 수 있습니다. 그래서 멀티 스레드 환경에서 안전하게 객체를 추가하고 삭제할 수 있습니다. Vector의 단점 (ArrayList와의 비교) 벡터는 항상 동기화되는 장점이자 단점을 가지고 있습니다. 스레드가 1개일때도 동기화를 하기..
컬렉션 프레임워크란? 배열을 사용하다 보면 여러가지 비효율적인 문제가 생깁니다. 가장 큰 문제점은 크기가 고정적이라는 것입니다. 배열의 크기는 생성할 때 결정되며 그 크기를 넘어가게 되면 더이상 데이터를 저장할 수 없습니다. 또 데이터를 삭제하면 해당 인덱스의 데이터는 비어있어 메모리가 낭비되는 등 여러 문제점들이 발생합니다. 그렇기에 자바는 배열의 이러한 문제점을 해결하기 위해, 널리 알려져 있는 자료구조를 바탕으로 객체나 데이터들을 효율적으로 관리(추가, 삭제, 검색, 저장)할 수 있는 자료구조들을 만들어 놓았습니다. 이러한 자료구조들이 있는 라이브러리를 컬렉션 프레임워크라고 합니다. 대표적으로는 List, Set, Map, Stack, Queue 등이 있습니다. List 컬렉션 컬렉션 프레임워크를 ..
Map 컬렉션은 키(key)와 값(value)으로 구성된 객체를 저장하는 구조를 가지고 있는 자료구조입니다. 키는 중복으로 저장할 수 없고 값은 중복으로 저장할 수 있으며 중복된 key값이 들어온다면 기존의 값은 없어지고 새로운 값으로 대치됩니다. Map은 Key와 Value라는 것을 한 쌍으로 갖는 자료형입니다. Map은 사물함을 연상할 수 있습니다. 사물함도 사물함 번호가 있고 사물함 내부에 물건들이 있습니다. 사물함의 번호가 key가 되는 것이고 내부의 물건이 value가 되는 것입니다. 자바의 맵(Map)은 이러한 대응관계를 쉽게 표현할 수 있게 해 주는 자료형입니다. Map은 리스트나 배열처럼 순차적으로(sequential) 해당 요소 값을 구하지 않고 key를 통해 value를 얻습니다.. 맵..
Queue란 ? Queue의 사전적 의미는 무엇을 기다리는 사람, 차량 등의 줄 혹은 줄을 서서 기다리는 것을 의미하는데 이처럼 줄을 지어 순서대로 처리되는 것이 큐라는 자료구조입니다. 큐는 데이터를 일시적으로 쌓아두기 위한 자료구조로 스택과는 다르게 FIFO(First In First Out)의 형태를 가집니다. FIFO 형태는 뜻 그대로 먼저 들어온 데이터가 가장 먼저 나가는 구조를 말합니다. Enqueue : 큐 맨 뒤에 데이터 추가 Dequeue : 큐 맨 앞쪽의 데이터 삭제 Queue의 특징 1. 먼저 들어간 자료가 먼저 나오는 구조 FIFO(First In FIrst Out) 구조 2. 큐는 한 쪽 끝은 프런트(front)로 정하여 삭제 연산만 수행함 3. 다른 한 쪽 끝은 리어(rear)로 ..
Set컬렉션의 경우에는 저장 순서가 유지되지 않습니다. 그렇기에 Set컬렉션은 순서 자체가 없으므로 인덱스로 객체를 검색해서 가져오는 get(index) 메서드도 존재하지 않습니다. 대신 전체 객체를 대상으로 한 번씩 반복해서 가져오는 반복자(Iterator)를 제공합니다. 반복자(Iterator)는 iterator() 메서드를 호출하면 얻을 수 있습니다. 또한 Set은 객체를 중복해서 저장할 수 없고 하나의 중복 저장이 안 되기에 null값도 하나만 저장할 수 있습니다. Set컬렉션은 수학의 집합에 비유될 수 있습니다. 집합은 순서와 상관없고 중복이 허용되지 않기 때문입니다. Set 컬렉션을 구현하는 대표적인 클래스들은 HashSet과 TreeSet이 있습니다. 이 2가지 클래스는 Set 인터페이스를 ..
컬렉션 프레임워크란? 배열을 사용하다 보면 여러가지 비효율적인 문제가 생깁니다. 가장 큰 문제점은 크기가 고정적이라는 것입니다. 배열의 크기는 생성할 때 결정되며 그 크기를 넘어가게 되면 더이상 데이터를 저장할 수 없습니다. 또 데이터를 삭제하면 해당 인덱스의 데이터는 비어있어 메모리가 낭비되는 등 여러 문제점들이 발생합니다. 그렇기에 자바는 배열의 이러한 문제점을 해결하기 위해, 널리 알려져 있는 자료구조를 바탕으로 객체나 데이터들을 효율적으로 관리(추가, 삭제, 검색, 저장)할 수 있는 자료구조들을 만들어 놓았습니다. 이러한 자료구조들이 있는 라이브러리를 컬렉션 프레임워크라고 합니다. 대표적으로는 List, Set, Map, Stack, Queue 등이 있습니다. List 컬렉션 컬렉션 프레임워크를 ..
자바에서 배열이나 리스트를 정렬하려고 한다면 java.util.Arrays 클래스의 sort() 메서드를 사용하시면 따로 정렬 로직을 짜지 않아도 한번의 메소드 호출로 간편하게 배열이나 리스트를 정렬할 수 있습니다. Arrays클래스는 배열의 복사, 항목 정렬, 검색과 같은 배열을 조작 기능을 가지고 있습니다. 배열의 오름차순 정렬 Arrays.sort()메서드의 매개값으로 기본 타입 배열이나 String배열을 지정해주면 자동으로 오름차순 정렬이 됩니다. 기본타입 배열 오름차순 정렬 import java.util.Arrays; public class Sort{ public static void main(String[] args) { int arr[] = {4,23,33,15,17,19}; Arrays.s..
자바에서 객체를 복사하는 유형으로 깊은 복사와 얕은 복사가 있습니다. 깊은 복사의 경우 객체의 실제값을 새로운 객체로 복사하는 것이고 얕은 복사는 단순히 객체의 주소 값만을 복사하는 것입니다. 이 두가지 방식은 각각의 장단점이 있습니다. 먼저 얕은 복사의 경우 여러 객체가 같은 주소를 참조하기 때문에 하나의 값을 변경해버리면 다른 대상의 값 또한 바뀌어 버리는 문제 등이 발생합니다. 하지만 깊은 복사의 경우 실제로 대상이 두개가 생기므로 이러한 문제에서는 자유로울 수 있겠습니다. 반대로 메모리 측면에서 본다면 한 객체로 할 수 있는 일은 하나로 끝내는것이 좋습니다. 쓸데없이 두개 세개가 되면 그야말로 메모리 측면에서 본다면 비효율적이게 됩니다. 이렇듯 얕은 복사로 객체가 복사된다면 실제로는 하나의 주소 ..
자바에서는 문자열을 다루는 클래스로 String, StringBuffer, StringBuilder이라는 3가지 클래스가 있습니다. 위 3가지 클래스는 모두 문자열을 저장하고 관리하는 클래스이며 각 클래스 간에는 조금의 차이가 있습니다. String, StringBuffer, StringBuilder 차이점 String 객체는 한번 생성되면 할당된 공간이 변하지 않지만 StringBuffer나 StringBuilder의 경우 객체의 공간이 부족해지는 경우 버퍼의 크기를 유연하게 늘려줍니다. 이러한 특징을 일컬어 String은 불변(immutable)하고 StringBuffer와 StringBuilder는 가변(mutable)하다라고 합니다. StringBuffer와 StringBuilder의 차이점 St..
java.time.LocalTime import java.time.LocalTime; import java.time.format.DateTimeFormatter; public class CurrentDateTime { public static void main(String[] args) { // 현재 시간 LocalTime now = LocalTime.now(); // 현재시간 출력 System.out.println(now); // 06:20:57.008731300 // 포맷 정의하기 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH시 mm분 ss초"); // 포맷 적용하기 String formatedNow = now.format(formatt..
JAVA API를 사용하여 현재 날짜 현재 시간을 구하는 방법 java.time.LocalDate java.time.LocalTime java.time.LocalDateTime Java 8 이후부터는 java.time 패키지의 클래스들을 사용하여 날짜와 시간을 표현합니다. 그리고, java.time.format.DateTimeFormatter 클래스를 이용하여 날짜와 시간을 원하는 형식으로 출력할 수 있습니다. 1. java.time.LocalDate import java.time.LocalDate; import java.time.ZoneId; public class CurrentDateTime { public static void main(String[] args) { // 현재 날짜 구하기 (시스템 ..
Java에서 int와 boolean과 같은 일반적인 데이터 타입의 비교는 ==이라는 연산자를 사용하여 비교합니다. 하지만 String처럼 Class의 값을 비교할때는 ==이 아닌 equals()라는 메소드를 사용하여 비교를 합니다. equals와 == 은 어떤 차이점이 있을까요. String 변수 생성시 주소할당 1. 리터럴을 이용한 방식 2. new 연산자를 이용한 방식 위의 두 가지 방식에는 큰 차이점이 있습니다. 리터럴을 사용하게 되면 string constant pool이라는 영역에 존재하게 되고 new를 통해 String을 생성하면 Heap 영역에 존재하게 됩니다. String을 리터럴로 선언할 경우 내부적으로 String의 intern() 메서드가 호출되게 되고 intern() 메서드는 주어진..
자바에서 배열의 길이를 구하고 싶을떄는 length()이라는 메소드를 사용합니다. length() 메소드는 Static으로 이루어져 있어 Import나 클래스 선언 없이 바로 사용이 가능합니다. 문자열 길이 구하기 public class len { public static void main(String[] args) { String s = "abcdefg"; int s_len = s.length();//길이 구하기 System.out.println("문자열길이 : " + s_len); } } 결과 문자열길이 : 7 문자열 길이 제한하기 import javax.swing.JOptionPane; public class len { public static void main(String[] args) { JOp..
프로그래밍을 하다보면 특정 문자열에서 원하는 문자가 포함되어 있는지 확인해야하는 소스를 넣을때가 종종 있습니다. 문자열을 찾는 방법은 String클래스의 indexOf(), contains(), matches()메소드를 활용하여 찾을 수 있습니다. 다만 그 용도에 따라서 3가지의 메소드가 조금 다릅니다. indexOf() : 대상 문자열에서 찾고자 하는 문자의 index값을 찾고싶을때 contains() : 대상 문자열에서 찾고자 하는 문자열이 포함되어있는지 여부를 알고 싶을때 matches() : 대상 문자열에서 정규표현식(숫자, 영문자, 한글)등이 포함 되어있는지 여부를 알고 싶을때 indexOf() public class indexOf { public static void main(String[] ..
자바에서 특정값의 제곱을 구하려면 java.lang.Math 클래스의 pow()메소드를 사용하면 됩니다. java.lang.Math 클래스는 수학 계산에 사용할 수 있는 메소드를 제공하고 있습니다. Math 클래스가 제공하는 메소드는 모두 정적이므로 Import나 Math클래스 선언 없이 바로 사용이 가능합니다. 거듭 제곱 구하기 Math.pow() public class Pow { public static void main(String[] args) { double result = Math.pow(5, 2); //5의제곱 System.out.println("5의 제곱은 : "+result); } } >Math.pow() 메소드는 입력값과 출력값은 모두 double형이며 Math.pow(대상숫자,지수)를..
자바에서 String타입 알파벳의 대문자 혹은 소문자로 통일하고 싶다면 String클래스의 toUpperCase와 toLowerCase를 사용하면됩니다. toUpperCase()와 toLowerCase() 메소드는 모두 정적이므로 Import나 클래스 선언 없이 바로 사용이 가능합니다. 대문자로 변경(toUpperCase) public class toUpperCase { public static void main(String[] args) { String target = "abcdefg"; //대상 문자열 target = target.toUpperCase(); //대문자로 치환 System.out.println(target); //출력 } } toUpperCase()메소드는 문자열을 모두 대문자로 바꾼 ..
JRE(Java Runtime Environment)란? JRE는 자바 실행 환경(Java Runtime Environment)의 약자로 자바로 만들어진 프로그램을 실행시키는데 필요한 라이브러리들과 각종 API, 그리고 자바 가상 머신 (JVM)이 포함되어 있습니다. JRE는 자바로 "개발(쓰기)은 안되고 실행(읽기)만 된다"라고 생각해주시면 될 것 같습니다. JDK(Java Development Kit)란? JDK는 자바 개발키트(Java Development Kit)의 약자로 이름 그대로 개발자들이 자바로 개발하는 데 사용됩니다. JDK안에는 개발 시 필요한 라이브러리들과 javac, javadoc 등의 개발 도구들을 포함되어 있고 개발을 하려면 당연히 실행도 시켜줘야 하기 때문에 JRE (Java ..
JVM(Java Virtual Machine)이란? 자바 가상 머신 JVM(Java Virtual Machine)은 자바 프로그램 실행환경을 만들어 주는 소프트웨어입니다. 자바 코드를 컴파일하여 .class 바이트 코드로 만들면 이 코드가 자바 가상 머신 환경에서 실행됩니다. JVM은 자바 실행 환경 JRE(Java Runtime Environment)에 포함되어 있습니다. 현재 사용하는 컴퓨터의 운영체제에 맞는 자바 실행환경 (JRE)가 설치되어 있다면 자바 가상 머신이 설치되어 있다는 뜻입니다.
Scanner 클래스의 특징 - java.util 패키지에 포함되어 있어 java.util을 import를 해줘야 사용할 수 있다. - 기본적인 데이터 타입을 모두 입력받을 수 있다. - 토큰(공백, 개행, 탭)을 기준으로 데이터를 입력받는다. import java.util.Scanner; // java.util의 Scanner 클래스 import import java.util.*; // java.util에 있는 클래스 모두 import 1. Scanner는 java.util에 되어 있어 import를 해줘야 사용가능. java.util.Scanner만 import 하고 * 을 활용하여 util의 모든 클래스를 import 해도 됨 Scanner sc = new Scanner(System.in); // ..
1. 생성자 - 클래스명과 같다. - 반환하는 값이 없음. - default 생성자 : JVM이 자동으로 생성 - 오버로딩 지원. - this생성자 : 생성자의 첫번째 라인에서만 수행.(다른생성자의 것 불러오기) * 생성자 내에서 다른 생성자는 호출 불가하므로 this를 쓴다. - 인스턴스객체 생성시 멤버변수를 초기화하는 기능. 2. Static - 공유 - 로딩시점 : 클래스를 한 번 읽을 때 (new보다 전에) - 메모리 할당 : 클래스당 하나의 공간. (인스턴스 객체마다 메모리할당X) - 사용상 차이 * 일반 메소드에서 static변수, static메소드 호출가능 * static에서는 일반 메소드, 멤버변수 호출 불가. * class명.static메소드 3. 상속 - 재사용성과 확장성 : 부모의 것..
문자열 - 문자열은 기본자료형이 아닌 참조자료형이다. - Java에는 문자열을 받아주는 클래스가 3종 있다. String : 한번 생성된 다음 변하지 않는 문자열에 사용 String Buffer : 계속하여 변할 수 있는 문자열에 사용한다. 동기화에 적용 String Builder : 계속하여 변할 수 있는 문자열에 사용한다. 비동기화에 적용 String str = new String(); ​ char[] chars = {'A','B','C','D','E','F'}; str2 = new String(chars); String str3 = new String(chars, 1,3); // 범위지정도 가능. ​ System.out.println("str : ["+ str +"]"); System.out.pri..
문자열 탐색 - indexOf( ) //Hello World에서 'l'의 인덱스 반환하기. String str = "Hello World"; char ch = 'l'; System.out.println(str.indexOf(ch)); // 2 * 찾을 문자열.indexOf(찾을 문자) ; 문자열 변환 - substring( ) - 인덱싱 String str = "hello world"; String substr = str.substring(1,6); // 1포함 5 전까지 System.out.println(str + " --.substring(1,5)--> [" + substr+"]"); // hello world --.substring(1,5)--> [ello ] substr = str.substrin..
- 형변환을 통해 char ch일때, 잠시 정수형으로 인식하게 할 수 있다. (논리형은 불가) char ch = 'a'; System.out.println((int)ch); // (int)를 붙여준다. - 연산을 위해서는 기본적으로 데이터타입을 맞춰주어야 한다. - 자료형의 크기 비교 byte 85 (따로(int) 안붙여도 'A..
- 정수형 상수 - ex) 10, 20, -60 - 실수형 상수 - ex) 1.2 , 3,14321 - 문자형 상수 - ex) 'A', 'B' - 문자열 상수 - ex) "ABCD", "A" - 논리형 상수 - ex) true, false - 상수변수 : final 변수는 변수이름을 대문자로 지정 final boolean BOOL = true; - 아스키코드 (ASCII CODE) : 1byte , 대.소문자, 숫자, 공백, 특수문자 'A' -> 65 | 'a' -> 97 System.out.printf("%c%c\n", 'A','B'); //-> AB System.out.println('A'+'B'); //-> 131 System.out.println(""+'A'+'B'); //-> AB char ch..
1.작업표시줄 검색창에 내 PC를 검색한 후 내 PC 아이콘 우클릭 -> 속성 2. 고급 시스템 설정 > 고급 > 환경변수 3. 새로만들기 > 변수이름 > JDK 파일 경로 입력 변수 이름 : JAVA_HOME 변수 값 : JDK가 설치된 폴더의 경로 4. 환경 변수에서 새로 만들기 버튼을 클릭한 후 아래 정보를 넣고 확인 버튼을 클릭 변수 이름 : CLASSPATH 변수 값 : %JAVA_HOME%\lib 5. 시스템 변수 Path 더블클릭 편집창 이동 6. 좌측의 새로 만들기 버튼을 클릭한 후 %JAVA_HOME%\bin을 입력하고 위로 이동 버튼을 클릭하여 가장 위로 올려주고 확인 버튼을 클릭 %JAVA_HOME%\bin을 가장 위로 올려주는 이유는 명령 라인에서 명령어를 찾을 때, Path 환경변..
시원해지고 싶은 사람
NOTE