CHAPTER5 - QnA #54
Replies: 3 comments
-
A1 - 1) 이 부분은 자바의 java.util.HashMap 혹은 HashSet이 어떻게 구현되어 있는지 보시면 좋을 것 같습니다. A 3 - 2) 일단 가변 누적자 패턴에서 가변은 ~.parallelStream.reduce(0 -> Integer::sum) 여기서 가변 변수는 보이지 않습니다.
|
Beta Was this translation helpful? Give feedback.
-
질문 2
배열은 참조 자료형이므로 주소가 각각 다르기 때문에 적용이 안 되지 않지 않나 싶습니다.
질문을 정확하게 이해 못했어요 ㅠㅠ |
Beta Was this translation helpful? Give feedback.
-
2023-07-04 @crupy 님이 질문 주셨던 3.2 번째 질문에 대한 참조 자료 입니다. |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
질문 1.
P.157에서
distinct
메서드의 고유 여부는 스트림에서 만든 객체의 hashCode, equals로 결정된다고 합니다.그래서
distinct
메서드를 호출하면 각 요소의hashCode()
를 계산하고 중복된 요소를 제거하고,같은 요소끼리는
equals()
메서드를 호출해서 동등성 비교를 수행하여equals()
가 true를 반환하면 중복되었다고 생각하여 제거한다고 합니다.그러면 여기서
equals()
의 결과가 true인 객체들은 같은 해시코드를 가져야 되는데 만약 다른 해시 코드를 반환할 수도 있을까요?-> 예를 들어 해시충돌과 같은 이유 때문에…?
그리고
distinct
를 사용하는 컬렉션의 크기가 큰 경우에는 그 구성 요소마다hashCode()
와equals()
메서드를 하나하나 다 호출해서 사용하기 때문에 좀 시간이 오래 걸리고 비효율적일 것 같은데 혹시 이럴 경우엔 다른 방법이 있나요?질문 2.
P. 163 ~ 164의
위의 코드에서
map(word -> word.split(“”)) 가
Hello Word
라는 글자를[“H”], [“e”], [“l”], [“l”], [“o”], [“W”], [“o”], [“r”], [“d”]
이런 식으로 배열에 하나하나 들어가서
distinct()
가 적용이 안되는 것이라고 이해를 했는데 제가 올바르게 이해를 한건가요?1번에 제가 이해한 것이 맞다면
flatMap(Arrays::stream)
은 저렇게 나뉘어진 배열을“Hello World”라는 String의 형태로 만들어주는 것이 맞나요?
질문 3
기존의 반복을 이용해서 합이나 count를 하는 것이랑 reduce를 이용한 것의 차이는
reduce를 이용하면 내부반복이 추상화되면서 내부 구현에서 병렬로 reduce를 실행할 수 있게 되지만
기존의 반복을 이용한 합에서는 sum 변수를 공유해야 하므로 쉽게 병렬화하기 어렵다는 차이가 있다라는 것을 알았습니다.
그렇다면 굳이 함수형 프로그래밍 대신 일반적인 자바 코드 형태로 사용해서 가변 상태를 사용하면 되는데 왜 가변 누적자 패턴이라는 것을 만들고 사용하는 것인지 궁금해서 다른 분들의 의견을 듣고 싶어서 질문을 올렸습니다.
Beta Was this translation helpful? Give feedback.
All reactions