본문 바로가기

java6

java 중복 없애주는 set, 객체는? 코딩테스트 문제를 풀때 중복되는 객체를 걸러줬으면 했는데 생각처럼 되지 않아서 어떻게 해야 하는지 찾아보았다. 안에 내용은 똑같은데 아무리 set에 넣어도 중복이 제거되지 않고 add되는 것이 이상했다. 결론은, 객체가 아닐 경우엔 중복을 자동으로 제거해줄 수 있지만, 객체일 경우 중복을 제거하려면 추가로 구현해야 할 것이 있다. 참고로, 문자열로부터 정수의 해시코드값을 얻고 int hashCode = "keyValue".hashCode(); // 해시코드 : 492250706 hash table의 크기로 나눈 나머지의 인덱스에 데이터가 저장된다. 그 이유에는 hash set이 데이터를 저장할 때 hash table을 사용하기 때문이다. 저장할 데이터로부터 hashcode를 얻고 그것을 key로 하여 데.. 2022. 5. 11.
java optional stream() Optional은 java8부터 생겨났다. 탄생배경은 null값을 반환할때의 위험성을 없애기 위함이다. 메서드가 반환할 결과값이 ‘없음’을 명백하게 표현할 필요가 있고, null을 반환하면 에러를 유발할 가능성이 높은 상황에서 메서드의 반환 타입으로 Optional을 사용하자는 것이 Optional을 만든 주된 목적이다. Optional 타입의 변수의 값은 절대 null이어서는 안 되며, 항상 Optional 인스턴스를 가리켜야 한다. 옵셔널 사용법을 공부해볼만한 링크들 java8, 9, 10까지의 Optional https://jdm.kr/blog/234 옵셔널 올바르게 쓰기: https://homoefficio.github.io/2019/10/03/Java-Optional-%EB%B0%94%EB%A5.. 2022. 2. 3.
eclipse, gradle 환경설정 오류 지난 1-2주간 너무 많은 오류들이 있었다... 다시 발생하면 시간 절약하기 위해 작성하는 글.. 결론적으론 전체적으로 문제가 많았다. 그래도 전엔 괜찮다가 gradle프로젝트를 실행시키려다 보니 발생한 에러들이라서 gradle의 설정의 문제인 것은 같았다. - java.lang.UnsupportedClassVersionError: this version of the Java Runtime (class file version 53), this version of the Java Runtime only recognizes class file versions up to 55 - linkageerror occurred while loading main class gradle설정과 프로젝트, 컴파일러 수준, j.. 2022. 1. 28.
[String] replace, replaceAll과 정규식 java.lang.String에서 정규식을 자주 사용하게 된다. 그 중 replace와 replaceAll 이 문자열을 다룰 때 많이 쓰인다. 그래서 replaceAll에서 쓰이는 정규식도 같이 정리해보려고 한다. 먼저 replace() 와 replaceAll()의 차이는 정규식을 사용할 수 있느냐 없느냐 이다. 공통점은 둘다 문자열 자체를 바꾸지 않고 변형된 새 문자열을 반환한다. 문자열 "{{2,1},{2},{2,1,3,4},{2,1,3}}" 을 2,1,2,2,1,3,4,2,1,3으로 바꾸고 싶다면 어떻게 해야 할까? replace를 사용하면 {와 }를 직접 바꿔줘야 한다. String s = "{{2,1},{2},{2,1,3,4},{2,1,3}}"; String s2 = s.replace("{", .. 2021. 11. 17.
제네릭 클래스 Generics, 제너릭 클래스 메서드, <T> '제너릭 generic'을 잘 알고 썼다고 생각했지만, 모르겠는 것들이 점차 생기면서 내가 잘 알고 있지 못하다는 생각이 들어 차근차근 알아보려고 한다. 먼저 제네릭 클래스의 코드를 보자. class FruitBox{ Object item; public void store(Object item){ this.item = item; } public Object pullOut(){ return item; } } class FruitBox{ //제네릭 클래스를 사용하려는 형태. 타입 T에 꼭 써워야 한다. T item; public void store(T item){ this.item = item; } public T pullOut(){ return item; } } 는 제네릭 클래스를 사용하려는 형태이고, T.. 2021. 9. 13.
[java] 이중 콜론 연산자 :: 이중 콜론 연산자 (Double Colon Operator) 람다(Lamda)식과 함께 살펴보려고 한다. 람다식과 이중 콜론 연산자를 이용하면 간결하게 표현할 수 있는데, 예를 들어 comparator를 생성해보자 #1 lamda Comparator c = (Computer c1, Computer c2) -> { c1.getAge().compareTo( c2.getAge() ) }; #2 lamda Comparator c = (c1, c2) -> { c1.getAge().compareTo( c2.getAge() }; #3 :: Comparator c = Comparator.comparing(Computer::getAge()); 위에 두 람다식보다 이중콜론 연산자가 훨씩 읽기 쉽고 짧게 표현할 수 있다. .. 2021. 9. 12.