java의 bit 연산자 중에 >>와 >>> 연산자가 있습니다. 이 둘의 차이에 대해 간단하게 알아보겠습니다. 먼저, 위에 2개는 -2 >> 1과 -2 >>> 1의 값을 출력합니다. 아래 2개는 2 >> 1과 2 >>> 1을 출력합니다. 출력 결과를 봅시다. -1, 2147483647이 나오고, 밑에 2개는 1, 1이 나옵니다. 이게 어떻게 된 것일까요? 먼저 -2의 2의 보수 표현법으로 표기해 봅시다. 2를 2진법으로 표현하면 위 그림과 같습니다. 여기서 비트가 0인 것은 1로 바꾸고, 1인 것은 0으로 바꿔보겠습니다. 그러면 1...1101이 됩니다. 여기서 1을 더해보겠습니다. 그러면 11..110이 됩니다. 여기에서, 부호를 결정하는 비트는 1로 표시했습니다. t가 -2인 경우, 표현 방식은 위와..
Java 검색 결과
java의 Array에는 배열의 모든 원소를 특정한 값으로 초기화 하기 위한 메서드가 있습니다. fill과 setAll이라는 메소드입니다. 간단하게 차이점을 알아보겠습니다. 먼저 fill입니다. specified int value. specified value. 특정한 값으로 모든 원소를 초기화 합니다. 예를 들어 배열 내의 원소를 모두 5로 초기화 시키거나 할 때 쓸 법 합니다. 이 메서드는 int형 배열 뿐만이 아니라, long, char, ... 등의 배열을 받기도 합니다. 오버로딩 되어있다고 보면 됩니다. 이 블로그에서는 int형 배열만 다룹니다. 예제를 보겠습니다. 단순하게 Arrays.fill(a, 5);를 호출합니다. 그러면 10개의 원소를 저장하는 배열의 원소들이 모두 5로 초기화 됨을 볼..
java에는 equals랑 compareTo가 있습니다. 이 둘을 언제 쓰는지, 차이점을 간단하게 알아보겠습니다. 먼저 compareTo는 비교를 하기 위해 쓰입니다. 순서를 정하기 위해서. 뒤에 for order가 붙은 것을 보면 알 수 있습니다. 당연하게도, comparator의 compare도 같은 용도로 쓰입니다. Compares object for order. 위에서 말한 순서는 무엇일까요? 랭킹을 정한다고 생각해 봅시다. 이름과 점수로 이루어진 object가 있습니다. 우리는 점수별로 순서를 정하려고 합니다. Obj 클래스는 이 상황에서 학생에 대한 데이터를 저장할 거에요. score와 name이 있는데요. 각각 받은 점수와 이름을 저장하고 있습니다. compareTo는 아래와 같이 오버라이딩..
자바에는 TreeMap이 있습니다. 키 오브젝트가 Obj의 인스턴스라고 해 봅시다. Obj 클래스에서 equals를 override 하지 않고 compareTo를 비교하거나, Obj를 비교하는 방법인 comparator만 생성자로 넘기면 어떻게 될까요? 그래도 잘 동작할까요? 우리가 걱정하는 부분은 equals입니다. equals는 두 객체의 동등성을 비교합니다. 이 메서드가 어디에서 쓰이는지 TreeMap 내부에서 한 번 찾아보도록 합시다. putAll에 등장합니다. Objects.equals이네요. comparator를 넘기는 것으로 보아서는, 비교하는 객체를 넘기는 것으로 보입니다. 따라서, 키 값과는 아무런 연관이 없습니다. 다음 replace 입니다. 이 부분도 잘 보면, value에 대해서만 ..
java stream에서 maptoobj 함수는 중간 연산이라 되어 있습니다. 길이 n짜리 배열을 obj object n개로 채우려고 합니다. obj 클래스에는 int 자료형만 하나 있고, 우리는 이 n개의 obj가 깊은 복사가 되어야 해요. 이걸 stream을 써서 할 때, Intstream의 range 메서드와, maptoObj를 사용하면 손쉽게 처리할 수 있습니다. mapToObj 메서드를 봅시다. Intstream 뿐만이 아니라, Longstream과 DoubleStream에도 있습니다. 설명을 보면, 스트림으로부터 해당 함수를 적용한 객체 값들의 stream을 반환한다고 되어 있어요. 즉 입력 스트림으로부터 무언가를 받아서, 새로운 결과 가지고 있는 스트림으로 변환합니다. n개의 크기를 가진 리..
최근댓글