Study/java 58

[Java] Collection - ConcurrentModificationException: toString

리스트의 remove 메소드를 사용하지 않았는데 ConcurrentModificationException이 발생하는 경우가 있습니다. [Java] Collection - ConcurrentModificationException보통은 컬렉션의 remove 메소드를 사용했을 때 해당 예외가 자주 발생합니다.최근에 다른 상황에서 해당 예외가 발생했어서 이에 대해 정리해보려 합니다. toString()컬렉션을 문자열로 변환할 때 예외가 발생할 수 있습니다.List list = new ArrayList();Thread thread1 = new Thread(() -> { for (int i = 0; i { for (int i = 0; i 코드를 설명하자면, 첫번째 스레드에서 리스트에 값을 계속 추가하는..

[Java] Stream - sort, min, max

sort()sort는 Stream을 정렬해주는 메소드입니다.매개변수가 없는 것과 Comparator를 매개변수로 받는 것 두 가지가 있습니다.List list = new ArrayList();list.add(12);list.add(83);list.add(35);list.add(7);list.add(90);list.stream() .sorted() .forEach(n -> System.out.print(n + " "));sort()를 사용하면 스트림의 요소들을 순서대로 정렬됩니다.숫자면 오름차순으로, 문자열이면 사전순으로 정렬합니다. 정렬 기준을 지정해줄수도 있습니다.List list = new ArrayList();list.add("eee");list.add("ggg");list.add("bb..

[Java] Stream - filter : 스트림 데이터 필터링

Stream.filter란?filter는 특정 조건에 맞는 요소만을 추출하여 새로운 스트림을 생성하는 데 사용됩니다.Predicate로 조건을 만들어서 filter 메서드에 매개변수로 넣어주면 조건에 맞는 요소만 가지고 새로운 스트림이 만들어집니다.Java Stream Filter 메소드 공식 문서 바로가기 w.getColor() == RED) .mapToInt(w -> w.getWeight()) " data-og-host="docs.oracle.com" data-og-source-url="https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html#filter-java.util.function.Predicate-" data-og-url=..

[Java] Stream - forEach

Java 8부터 도입된 메소드로, for문이나 향상된 for문처럼 반복할 수 있는 방법 중 하나입니다. Stream.forEach, Collection.forEach의 차이 forEach 메소드는 Stream에도 있고, Collection에도 존재합니다. List list = new ArrayList(); list.add(1); list.add(2); list.add(3); System.out.print("Collection.forEach: "); list.forEach(num -> System.out.print(num + " ")); System.out.println("\\n========================="); System.out.print("Stream.forEach: "); list...

[Java] String - hashcode(), trim() 공백 제거, intern() 사용법

hashcode()String 객체의 hashcode를 변환해줍니다.해시코드는 간단하게 말하면 객체의 고유한 값이라고 합니다.Object클래스로 구현된 객체라면 이 메소드를 모두 가지고 있습니다.그래서 값을 서로 비교할때 사용됩니다. 사용방법은 다음과 같습니다.String str1 = "WORD";String str2 = "WORD";System.out.println("str1's hashcode : " + str1.hashCode());System.out.println("str2's hashcode : " + str2.hashCode());String str3 = new String("WORD");System.out.println("str3's hashcode : " + str3.hashCode());..

[Java] String - getBytes, toCharArray

getBytes()문자열을 byte배열로 변환해주는 메소드입니다.매개변수로 Charset charset이나 String charsetName을 받기도 합니다.String str = "abc";System.out.println("getBytes() : " + Arrays.toString(str.getBytes()));System.out.println("getBytes(Charset charset) : " + Arrays.toString(str.getBytes(Charset.defaultCharset()))); try { System.out.println("getBytes(String charsetName) : " + Arrays.toString(str.getBytes("UTF-8")..

[Java] Stream - map: 스트림 값 변환

자바 Stream의 map 메서드는 주어진 함수를 적용한 새로운 스트림을 만들어주는 메서드입니다. mapmap은 다음과 같이 사용합니다.List list = new ArrayList();list.add(1);list.add(2);list.add(3);list.stream().map(num -> num * 3).forEach(num -> System.out.println(num));정수 리스트의 각 요소에 3을 곱한 값으로 새로운 스트림을 만들었습니다.map의 결과값은 Stream이기 때문에 map의 결과에 Stream 메서드를 또 사용할 수 있습니다. 또 다른 예로, 컬렉션의 타입을 바꾸고 싶을 때 사용하기도 합니다.List list = new ArrayList();list.add(1);list.add(..

[Java] Collection remove 사용 시 ConcurrentModificationException 발생

ConcurrentModificationException 예외가 발생하는 여러 상황이 있지만, 그 중에서 Collection의 remove 메소드를 사용해서 예외가 발생하는 경우와, 예외를 방지하는 방법에 대해 설명드리겠습니다. removeList list = new ArrayList();for (int i = 0; i List의 remove 메소드를 사용할 때 ConcurrentModifiedException이 발생할 수 있습니다. foreach(향상된 for문)를 통해 순회하는 경우 내부에서 Iterator를 사용하는데, Iterator의 next() 메소드를 호출하면 동시 수정 여부를 체크하게 됩니다.동시 수정 여부는 ArrayList 내부에 있는 Iterator의 카운트(expectedModCou..

[Java] Collection - UnsupportedOperationException

Collection을 사용할 때 생길 수 있는 예외 중 하나인 UnsupportedOperationException에 대해서 살펴보겠습니다. List integers = Arrays.asList(1, 2, 3);integers.add(4);위 코드는 UnsupportedOperationException을 발생시킵니다.  UnsupportedOperationException은 특정 작업이 해당 클래스에서 지원하지 않을 때 발생합니다.  List에는 add 메소드가 있지만 UnsupportedOperationException 예외가 발생하는 이유는 asList 메서드에 의해 생성된 컬렉션은 크기가 고정되어 있기 때문입니다.그래서 add 메소드로 컬렉션에 요소를 추가하려고 하면 예외가 발생합니다. 정확하게 설..

[Java] Collection - toArray() : 컬렉션을 배열로 변환

toArray(), toArray(T[] a) 메소드는 컬렉션을 배열로 변환해주는 메소드입니다.List list = new ArrayList();list.add("a");list.add("b");list.add("c");Object[] toArray = list.toArray();System.out.println("toArray = " + Arrays.deepToString(toArray));toArray()는 Object 배열로 변환해줍니다. 만약에 Object가 아닌 다른 클래스 배열로 변환하고자 한다면 toArray(T[] a) 메소드를 사용하면 됩니다.List list = new ArrayList();list.add("a");list.add("b");list.add("c");String[] toA..

728x90