개발 13

[Java] HashSet.contains() 를 사용하기 위한 @override hashcode()

2차원 배열에 대한 좌표 x, y를 필드로 가지는 객체를 생성후 equals() 를 정의했다. @Override public boolean equals(Object o) { if(o instanceof Pos) { Pos p = (Pos) o; return this.x == p.x && this.y == p.y; } else { return false; } } 하지만, HashSet.contains() 메서드를 사용할 때, 동일한 좌표를 가지는 객체가 존재하더라도 false를 리턴하였다. HashSet은 내부적으로 HashMap을 사용하며, HashMap은 두 객체가 동일한 키임을 판단할 때, 두 hashcode가 같아야 하며, 두 객체가 동일하거나(== 연산결과가 true) 동등해야한다.(equals(..

개발/Java 2022.04.30

[Java] HashMap의 computeIfAbsent(), computeIfPresent(), putIfAbsent() 사용정리

computeIfAbsent() 키가 존재하지 않을때 해당 람다식 실행 해당 키가 존재하던 존재하지 않던 해당 value값을 리턴한다. Map map = new HashMap(); map.computeIfAbsent(1, v -> 1); //키 1이 존재하지 않으므로 1을 삽입 map.computeIfAbsent(1, v -> 2); //키 1이 이미 존재하므로 람다식 실행안됨 System.out.println("size: " + map.size()); map.forEach((k, v) -> System.out.println(k + " " + v)); size: 1 1 1 putIfAbsent() 위의 예시처럼 단순 put 연산을 할 것이라면 putIfAbsent() 메서드를 사용하는게 더 편하다. 이 ..

개발/Java 2021.11.09

[Tomcat] 톰캣서버 Servlet 한글 깨짐문제 해결 + 이유

한글이 깨지는 이유 서버에서 웹 문서를 전송할 때, 한글을 지원하지 않는 인코딩 방식을 사용할 경우 서버에서는 올바르게 인코딩 하였으나 브라우저가 다른 인코딩 방식으로 해석한 경우 2번같은 경우는 브라우저가 문서를 받았을 때 해당 문서가 어떠한 방식의 인코딩을 사용하였는지 알지 못하기 때문에 브라우저가 자의적으로 해석하였기 때문이다. 따라서 페이지의 인코딩 방식과 패킷 헤더에 해당 인코딩 방식을 명시함으로써 문제를 해결할 수 있다. 해결방법으로는 몇 가지가 있는데 첫번쨰로는 인코딩 방식을 web.xml파일에서 지정해줄 수 있다. 하지만 일반적으로 하나의 웹 서버는 다수의 페이지가 공유하기 때문에 서버 설정파일은 잘 건드리지 않는다. 두 번째로는 각각의 페이지마다 인코딩 방식을 정해주는 것이다. respo..