java의 arrayDeque가 어떻게 구현되었는지 간단히 알아보겠습니다. 세세하게 뜯지는 않을 거고, 중요한 변수들과 메서드만 보도록 하겠습니다. 먼저, 이 메서드를 보도록 하겠습니다. 코드를 봐도 뭔 말인지 모르겠습니다. 이럴 때는 쪼개시면 됩니다. 먼저, if문을 만족하지 않는다면, MIN_INITIAL_CAPACITY개의 원소를 저장할 수 있는 배열이 생성됩니다. 이 값은 디폴트로 8입니다. 만약에, numElements가 8보다 크거나 같으면 어떻게 될까요? 그러면 이런 알 수 없는 코드들이 수행되는데요. 어렵지 않아요. 132번째 부터 136번째 줄까지는 bit or 연산을 하고 있어요. 우항을 보면, >>> 연산자가 있는데요. 이는 쉽게 말해서 우측으로 이동한다 정도로 생각하심 됩니다. in..
레퍼런스/분석 검색 결과
java에서 computeifabsent랑, computeifpresent는 꽤 유용하게 쓸 수 있는 Map 메소드입니다. 이 중에서, 저는 후자를 위주로 설명하도록 하겠습니다. 먼저, computeifpresent 메서드에 대한 설명을 보겠습니다. 어려울 것은 없고요. key와 Bifunction을 받습니다. key가 이미 있는 경우에는, key와 value를 가지고 새롭게 mapping하는 것을 시도하는 함수입니다. 그런데 이 설명만 보아서는 어떤 일을 하는 지 알기가 쉽지 않아 보입니다. 예제를 작성해 보겠습니다. 먼저, 3가지 연산을 한 후에, map에 있는 내용을 출력하게끔 하였습니다. 결과를 보고 이야기 해 보겠습니다. 먼저, 처음에 맵은 비어 있었을 겁니다. 2를 추가하려고 하니 없었으므로,..
예전에 네이버 블로그를 운영했을 때, 이 글에서 compare 메서드에 대해서 언급했던 적이 있었습니다. 이것에 대해서 혼동되게 설명한 것도 있고, 잘못 설명한 것도 있어서 다시 짚고 넘어가겠습니다. 먼저, Comparable interface에 정의된 CompareTo 메서드에 대한 설명입니다. 특정 object를 ordering을 위해서 비교한다고 되어 있습니다. 우선 순위가 높다. 낮다 보다는, 순서를 매기기 위해서 이 메서드를 호출한다고 보는 것이 적절해 보입니다. 그리고 리턴 부분을 보면, -1, 0, 1이 아닌 단순히 음수, 0, 양수를 리턴한다고 되어 있습니다. -1을 리턴하는 것과 음수를 리턴하는 것은 의미상 차이가 분명히 있는 부분입니다. 아래 예제 프로그램을 보시면 명확하게 다가옵니다...
카톡 방에서, Arrays.sort를 호출했을 때, compare 함수에서 키 순서가 바뀌는 거 같다고 누군가 질문을 해 주셨습니다. 이 질문에 대한 답을 상세 분석에서 정리하고자 합니다. 당연하게도, 이 글은 java나 python에서 쓰는 timsort에 대한 내용은 아닙니다. 그런데, 설명을 보다 보면, 팀소트가 상당히 많이 언급됩니다. 즉, 알아두면 좋으니 이해하기 쉽게 되어 있는 이 사이트나, 네이버 d2에 올라온 글을 먼저 읽고 오시는 것을 권해드립니다. 여기에 팀소트 전체를 쓰기에는 넘사급으로 길어지기 때문입니다. java 8u41에서 실행하였습니다. 해당 상황을 재현하기 위해서, 간단하게 MyObj 클래스를 만들어 보았습니다. 여기에는 간단하게 getx하고, toString만 재정의 되어 ..
자바에서 Array 둘을 비교할 때에는 어떻게 해야 할까요? 카톡방에 올라온 질문이였습니다. 이에 대한 제 대답은 Arrays.deepEquals를 써라였습니다. 이 글에서도 잠깐 언급을 한 적이 있긴 했습니다만, 질문을 받다 보니, Arrays.equals라던지 equals랑 혼동되는 경우가 있는 듯 하였습니다. 예제 프로그램 하나를 보면서 이해해 보도록 합시다. 2차원 배열이 있습니다. 이들은 각각 2x2짜리 배열입니다. 그리고, 같은 내용물을 담고 있습니다. 첫 번째는 Arrays의 deepEquals, 또 다른 하나는 그냥 Arrays의 equals, 다른 하나는 그냥 equals였습니다. 실행 결과는 어떻게 나왔을까요? 결과는 true, false, false가 나옵니다. 어떻게 된 일인지, 8..
최근댓글