'IT > 코딩 팁' 카테고리의 다른 글
문자열 복사시 역슬래시 자동 삽입 시키기 (0) | 2020.05.21 |
---|
문자열 복사시 역슬래시 자동 삽입 시키기 (0) | 2020.05.21 |
---|
이퀄스가 트루면 해쉬코드도 무조건 같아야함
해쉬코드가 같더라도 이퀄스는 펄스 일 수 있음.
이퀄스에서 사용하는 변수는, 해쉬코드에서도 사용해야 함
https://jeong-pro.tistory.com/172
31이 많이 쓰이는 이유 : https://johngrib.github.io/wiki/Object-hashCode/
https://nesoy.github.io/articles/2018-06/Java-equals-hashcode
객체, 클래스, 인스턴스 용어 구분 (0) | 2020.05.18 |
---|---|
자료구조 정리 잘된 곳 (0) | 2020.05.13 |
해쉬맵 (0) | 2020.05.08 |
자바 디컴파일 (0) | 2020.05.07 |
Volatile 이란? (0) | 2020.05.07 |
해쉬맵 정리 - https://d2.naver.com/helloworld/831311
해쉬테이블은 NODE객체를 담는 1차원 배열이다. (자바8 이전에는 Entry객체를 담음)
배열에 길이는 최초 16으로 할당되고, 2배씩 증가한다(2의 제곱이라는 것이 중요! 이유는 뒤에 설명)
NODE객체는 hash, key value, next 4개의 멤버변수를 담고있다.
Key에서 받아온 해쉬값을 가지고 저장될 인덱스를 결정하는데, 배열의 크기가 16이라면 해쉬%16 해서 나머지값을 인덱스로 두면 된다. 근데 여기서 해쉬%16이 아니라 (16-1) & hash 를 통해 인덱스를 구한다. 배열의 길이가 2의 제곱일 경우 해쉬%배열길이 = (배열길이-1)&hash 이며, and연산을 하는것이 더 빠르다(위에서 중요하다고 한 이유).
(참고: https://stackoverflow.com/questions/27230938/why-hashmap-insert-new-node-on-index-n-1-hash)
같은 인덱스에 또 node객체가 들어오면, 앞 노드의 next 멤버변수에 들어가는 형태(링크드 리스트임)
자료구조 정리 잘된 곳 (0) | 2020.05.13 |
---|---|
해쉬코드, 이퀄스 (0) | 2020.05.08 |
자바 디컴파일 (0) | 2020.05.07 |
Volatile 이란? (0) | 2020.05.07 |
자바 정렬 (0) | 2020.04.24 |
javap -c -p -v 컴파일된 클래스파일.class
-v는 라인넘버
자료구조 정리 잘된 곳 (0) | 2020.05.13 |
---|---|
해쉬코드, 이퀄스 (0) | 2020.05.08 |
해쉬맵 (0) | 2020.05.08 |
Volatile 이란? (0) | 2020.05.07 |
자바 정렬 (0) | 2020.04.24 |
출처: https://tourspace.tistory.com/11?category=788398, https://tourspace.tistory.com/12?category=788398
(자바 컴파일? java 파일이 class 파일로 변환되는 과정. class파일은 byte코드이다.)
더 자세히는
자바 최적화 - 가장 빠른 성능을 구현하는 검증된 10가지 기법 책 읽어보는게 나을듯.
람다 원리 및 값 캡쳐란? (0) | 2020.05.07 |
---|---|
클로져(Closure, Close-over), 쉐도잉 (0) | 2020.05.06 |
Identity 함수? (0) | 2020.04.29 |
자주쓰는 람다 (0) | 2020.04.29 |
람다 사용법 및 규칙 (0) | 2020.04.23 |
익명클래스는 클래스파일이 생성되지만, 람다는 생성되지 않고 람다 레시피가 생성되어 런타임에 인보크 다이나믹을 통하여 타입과 오브젝을 생성 하고, 람다 메타 팩토리라는 부트스트랩 메쏘드가 결정을 해서 오브젝을 리턴하고, 다음에 똑같은걸 요구하면 저장해놨다가 바로 넘겨주고, 상태가 없는 람다표현식(non-local variable을 사용하지 않는)은 캐쉬했던걸 바로 사용하므로 빠름. (상태가 없는 펑션은 바이트코드만 디슈가해서 사용함)
람다 내부 구현 설명 및 슈가, 디슈가링이란? (0) | 2020.05.07 |
---|---|
클로져(Closure, Close-over), 쉐도잉 (0) | 2020.05.06 |
Identity 함수? (0) | 2020.04.29 |
자주쓰는 람다 (0) | 2020.04.29 |
람다 사용법 및 규칙 (0) | 2020.04.23 |
무조건 메인메모리를 쓰게함.
출처
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
public class TestMain {
private int A = 180;
public static void main(String ...args) {
TestMain testMain = new TestMain();
testMain.run();
}
@Override
public String toString() {return "toString 오버라이드";}
public String toString(int i) {return "toString 오버로딩";}
void call1() {System.out.println("you called call1 method");}
public static void call2() {System.out.println("you called call2 method");}
public void noOverriding() {System.out.println("you called noOverriding method");}
public void noOverriding(int i) {System.out.println("you called noOverriding method, overriding");}
void run() {
int B = 39;
InterA interA = new InterA() {
int A = 130;
@Override
public String InterA() {
System.out.println(TestMain.this.A);
call2();
System.out.println(toString());
// toString은 쉐도잉이 일어남. (스코프 범위 밖에서 오버라이딩 메쏘드 구현되어있어도 찾지못함)
// System.out.println(toString(1));
//무조건 클래스이름.this.로 접근해야ㅐ함
System.out.println(TestMain.this.toString(1));
//noOverriding은 오버라이딩이 된 메쏘드가 아니므로 쉐도잉이 일어나지 않음.
noOverriding();
noOverriding(1);
return null;
}
};
interA.InterA();
}
}
interface InterA {
public abstract String InterA();
}
|
cs |
람다 내부 구현 설명 및 슈가, 디슈가링이란? (0) | 2020.05.07 |
---|---|
람다 원리 및 값 캡쳐란? (0) | 2020.05.07 |
Identity 함수? (0) | 2020.04.29 |
자주쓰는 람다 (0) | 2020.04.29 |
람다 사용법 및 규칙 (0) | 2020.04.23 |