요새 이것 저것 코드를 보면서 궁금했던 점을 하나씩 채워나가고 있습니다. 그 중 하나는, LinkedHashMap입니다. 사용 방법은 많이 나와 있으니, 여기에서는 따로 언급하지 않겠습니다. 이 글에서는 HashMap과 다른 점이 무엇인지 보면서 어떤 자료구조가 어떤 연산에서 상대적으로 오버헤드가 많이 걸리는지 분석해 보도록 하겠습니다. 먼저 hashMap입니다. 간단하게 "AA", "AE", "BA", "BE", "DA"를 넣고, hashMap에 있는 모든 키를 순회하면서 출력하는 예제입니다. HashMap의 구조를 그려보면 아래와 같습니다. 삭제를 하기 위해서, 각 버킷에서 해당 Key를 찾아서 remove를 할 겁니다. 그리고 insert 연산을 수행하기 위해서 Key가 어느 번호의 버킷에 들어가는..
레퍼런스/분석 검색 결과
네이버 블로그에 올린 옛날 글에 질문이 하나 달렸습니다. 그 질문에 대한 답변을 해 보겠습니다. java에서 어떠한 구분자를 기준으로 나누기 위해서 StringTokenizer를 쓰는 방법이 있습니다. 그런데, split라는 메서드도 존재합니다. 이 둘은 언제 잘 쓰면 좋을까요? 그리고 토크나이저를 쓰는 게 항상 올바른 선택이고, 항상 빠를까요? StringTokenizer의 내부를 보겠습니다. 먼저 토크나이저의 생성자를 보면, 3개의 인자를 가지는 생성자를 호출한다는 것을 알 수 있습니다. 여기에서, delimiters, currentPosition, newPosition 등을 setting 하는 것을 알 수 있습니다. hasSurrogate 라는 boolean 변수도 있다는 것을 알 수 있습니다. 그..
Java는 utf16으로 데이터를 저장한다는 이야기는 많이 들어보았을 듯 싶습니다. 이모지는 2byte로 커버가 되지 않을 텐데 어떻게 저장할까요? 2개의 쌍을 가진 서러게이트로 나누어서 저장합니다. Java 시간에도 잠깐 언급을 했었는데, 그리고 sql을 할 때도 언급을 한 거 같은데, 또 언급하는 이유는 그만큼 중요하기 때문입니다. 몇 메소드에 대해서 더 알아가실 겸. 겸사 겸사. 예를 들어, 강아지 이모티콘은 16진수로, 0x1F415입니다. 이는 2byte의 한계인 0xFFFF보다는 큰 수입니다. Character의 toChars는 codepoint 값을 받아서, 이것을 char형 배열로 리턴해 주는 함수입니다. 이는 Unicode의 코드값을 의미합니다. 예를 들어, '가'는 0xAC00이니까, ..
Collection 중에는, SynchronizedMap이 있습니다. 대충 Synchronizedxxx라고 해 보겠습니다. 이것들은 어떠한 구조로 되어 있을까요? 먼저 Collcetions.Synchronizedxxx로 호출하는 것을 보아서는, 내부 class로 선언이 되어 있는 것을 알 수 있습니다. 이들은, Map 꼴의 맵 객체와, Object 객체인 mutex를 가지고 있습니다. 생성자 안에는, 인자로 넘겨받은 Map을 대입하는 부분이 있습니다. HashMap도 있고, TreeMap도 있을 텐데. 이렇게 해도 문제가 없나요? 고양이는 동물이고, 개도 동물이잖아요. 그러니 이들을 동물이라고 하는 것은 크게 무리는 없습니다. 다만, 넘겨받은 객체를 가지고 bark를 호출할 때에는 이야기가 달라지는데요...
안녕하세요. chogahui05입니다. Java에는 HashTable이 있습니다. hash 기반의 자료구조를 동기화 했다고 생각하시면 편합니다. HashMap과 다른 부분 중 하나입니다. 먼저, 주요 필드들을 보도록 하겠습니다. table입니다. 이는, 무엇을 의미할까요? putVal 함수의 일부분입니다. tab에 table을 넣고 있습니다. 그리고 hash는 key 객체의 hashCode를 의미합니다. 이것과 무엇인가를 연산해서, index라는 값을 만들었습니다. 466번째 줄까지 보았을 때, index는 버킷 번호와 관련이 깊어 보입니다. 그리고 entry 값을 하나 받는데요. hashtable이나, hashmap은 키의 중복을 허용하지 않는 구조입니다. 그렇다면, 해당 버킷에 key가 있는지를 확인..
최근댓글