안녕하세요. 톡방에서 Long 객체에 저장된 값을 Integer type으로 conversion을 할 수 있는지에 대한 질문을 받았습니다. 이에 대한 제 답은 그냥 intValue 메서드를 써서 int type으로 강제 형변환한 값을 꺼낸 다음에, boxing 시키라는 것이였습니다. 이 답변을 하고 난 후에, 코드를 보니, Number 클래스가 있어서 간단하게 알아보았습니다. 이 클래스 안에는, intValue, longValue, floatValue, doubleValue, byteValue, shortValue 메소드가 있어요. 이들이 boxing 되어 있는 value를 type conversion하기 위한 것이다. 나름 합리적인 추론일 겁니다. 설명을 봐도 유추할 수 있는데요. super class..
레퍼런스/분석 검색 결과
java 9 버전 부터 Map.of 메소드가 생겼습니다. 이것을 언제 쓸 법 한지 알아보고, 간단하게 내부를 보도록 하겠습니다. 보시면, unmodifiable map을 리턴하게끔 되어 있습니다. 수정할 수 없는 맵을 리턴한다고 보면 맞겠네요. 예제 프로그램을 하나 보겠습니다. 먼저 key와 value값이 (1, 1)인 쌍과 (2, 2)인 쌍을 넣은 다음에, m에 들어있는 내용들을 toString으로 출력해 보겠습니다. 그러면, (2, 2)쌍과 (1, 1)쌍이 출력됩니다. 만약에 이 상황에서, 키를 추가한다고 하면 어떻게 될까요? 예제는 이렇습니다. 일단, Map.of는 둘 이상의 (k, v)쌍을 호출하게 되면 ImmutableCollections 안에 있는 MapN 객체를 만들어 내게 됩니다. 이것은 ..
retainAll이라는 메소드의 시간 복잡도에 대해서 질문이 들어왔습니다. AbstractCollection에 있는 메소드인데요. 결론부터 말씀드리겠습니다. 간단하게 정리하면, 인자로 넘어가는 Collection의 contains에 따라서 갈리게 됩니다. 그런데, retainAll이 따로 재정의된 케이스도 있기 때문에 시간 복잡도를 분석하실 때 주의가 필요합니다. 밑에서 후술하겠습니다. 먼저 이 메서드의 설명을 봅시다. Collection에서 retainAll을 호출할 때 이 메서드를 볼 일이 적지 않기 때문입니다. c에 있는 원소들만을 획득한다. 라고 설명이 되어 있네요. 그리고, UnsupportedOperation 예외를 떨굴 수도 있다고 하는데요. 삭제 연산을 지원하지 않는다면 떨어트려지게 됩니다..
python에서 dictionary가 어떻게 구현되었을까요? 아니 그 전에 최악의 경우에 뭔가를 찾는 연산은 O(n)일까요? insert 하는 연산도? 사실, 저는 자바에서 본 것 처럼 그냥 chaining 으로 관리하지 않을까 싶었는데 그건 아니였습니다. 니다. 제 무지함이 또. 그 전에, 정말 최악의 경우에 insert나 find 연산 등이 비효율적으로 동작할까? 에 대한 의문부터 해결해 봅시다. 최악의 경우를 인위적으로 만드는 방법은 그리 어렵지 않습니다. 어디까지나 인위적으로 조작할 뿐, 실제로 제가 출제한 문제에서 최악 케이스를 만드는 건 쉽지 않습니다. 왜냐하면, python에서 int object가 모든 hashcode 값이 0일 리는 없기 때문입니다. 이에 대한 건 나중에 언급하도록 하겠습..
BinarySearch에 대해서 잘못된 부분을 수정하기 위해서, 프로그램을 작성하게 되었습니다. 코드 제너레이터를 이용해서, 게터, 세터, equals, hashCode 등을 자동으로 생성하게 되었습니다. 중요한 부분만 코드로 보도록 하겠습니다. Obj 클래스입니다. binarySearch를 할 때, key가 여러개 나올 때 lower_bound나 upper_bound를 이용할 수 없다고 없다고 하였습니다. 그것이 가능하게 하려면, unique 한 속성으로 떨어트려야 하는데요. 키가 등장한 위치 lo는 unique 합니다. 따라서, (x, lo) 쌍도 unique 할 겁니다. hashCode를 재정의 한 것을 보니까 Objects.hash(x, lo); 가 보이는데요. 이것이 무엇을 하는지는 모르겠지만,..
최근댓글