List<Integer>에서 숫자 1 대신 두 번째 값이 지워지는 이유
List<Integer>의 remove(1)은 인덱스 1의 원소를 지운다. 수정 가능한 ArrayList에서 값 삭제와 반환값·목록을 비교하고, 없는 값의 false와 잘못된 인덱스의 예외를 구별해 호출 의도를 명시한다.
빌드노트
Java·JVM 카테고리의 글입니다.
총 48개의 글
List<Integer>의 remove(1)은 인덱스 1의 원소를 지운다. 수정 가능한 ArrayList에서 값 삭제와 반환값·목록을 비교하고, 없는 값의 false와 잘못된 인덱스의 예외를 구별해 호출 의도를 명시한다.
ByteBuffer에 값을 넣은 뒤 엉뚱한 영역을 읽는 이유를 position·limit·remaining으로 확인한다. 작은 heap 버퍼와 메모리 채널의 실제 비교로 flip, clear, rewind의 선택 기준과 내용 보존을 설명한다.
Collectors.toMap은 같은 ID가 다시 나오면 값을 덮어쓰지 않고 예외를 던진다. JShell에서 정상·중복 입력을 비교하고, 수량 합산은 병합 함수로, 원본 행 보존은 groupingBy로 선택하는 기준을 확인한다.
unmodifiableList는 원본 변경이 보이는 읽기 전용 뷰다. 짧은 JShell 예제로 원본 add·set과 뷰의 수정 거부를 비교하고, List.copyOf가 보존하는 원소 구성과 공유되는 원소 상태를 구별한다.
파일 처리와 close()가 함께 실패하면 수동 finally는 정리 오류만 전달할 수 있다. 짧은 코드와 실제 primary·suppressed 출력을 비교해 try-with-resources로 바꿀 위치와 예외 객체를 보존하는 로깅 방식을 판단한다.
HashMap의 getOrDefault는 키가 없을 때만 기본값을 반환한다. 짧은 JShell 입력으로 키 부재와 null 매핑을 구분하고, 저장된 null도 기본값으로 바꿀지 결정한다.
Optional에 값이 있어도 orElse의 인자로 쓴 함수는 먼저 실행된다. 실제 호출 횟수·반환값·예외를 비교해 orElseGet의 람다 안으로 옮길 작업을 구분하고, 미리 계산한 값을 감싸는 함정을 확인한다.
Arrays.asList는 원본 배열과 연결된 고정 크기 뷰라서 set은 되지만 원소 추가·삭제는 실패한다. 실제 Java 출력으로 양방향 연결과 ArrayList 복사 뒤의 크기 변경·연결 해제를 비교하고 List.of와의 차이를 설명한다.
Path.resolve는 절대 입력을 받으면 기준 경로 대신 입력을 반환한다. Windows 11·OpenJDK 17.0.2에서 상대·절대·루트 입력을 비교하고, 상대 경로만 허용하는 검사와 normalize의 한계를 설명한다.
문자열로 정확히 만든 BigDecimal도 1/3의 정확한 몫은 담을 수 없다. JShell에서 1/2와 1/3을 비교하고, 10/3으로 scale 2와 precision 2의 차이를 확인한다. UNNECESSARY와 0으로 나누기의 실패도 구별한다.
Stream.of(int[])는 배열 한 개를 담는 Stream<int[]>를 만든다. 같은 세 값으로 원소 수·요소 타입·합계와 Integer[]의 차이를 직접 비교하고, 숫자별 연산에는 Arrays.stream을, Integer 스트림이 필요할 때는 boxed()를 선택한다.
Math.abs(int)는 Integer.MIN_VALUE에서 같은 음수를 반환한다. JShell로 호출 전후의 long 변환과 absExact를 비교하고, 결과 범위를 넓힐지 int 범위 초과를 거부할지 고른다.