[Java] 코딩테스트 기초문법 - 3 : 배열, 리스트의 합계 구하기

DEINGVELOP·2022년 8월 8일
0

리스트/배열의 합계 구하기

💡 기존의 많은 언어들이 제공하는 SUM 기능이 Java에는 없다!!

  1. for으로 구하기
  2. stream 사용하여 lambda함수 사용하기

    주의! 속도적으로는 일반적으로 stream 람다 방식이 loop문보다 비효율적이다.



for문으로 list의 합계 구하기

1. for 이용

int sum = 0;
for (int i = 0; i < list.size(); i++)
	sum += list.get(i);
return sum;
  • .size : 리스트안에 들어있는 원소 수 구하기
    - .length : 배열의 길이(전체 크기!) 구하기
    - .length() : 문자열의 길이 구하기

    💡 잠깐!
    배열과 리스트는 차이가 있다. 구체적인 내용은 다음 포스팅에서 정리하도록 하고, 이번엔 우선 가장 중요한 차이만 짚고 넘어가자.

    📌 Java의 Array vs ArrayList vs List

    • Array(배열) : 클래스
      • index는 값에 대한 유일무이한 식별자(고유함)
      • 객체 생성시 크기 할당 필수
      • 길이 조정 불가

    • ArrayList : 클래스
      • List 인터페이스를 상속받은 클래스 중 하나
      • index는 몇 번째 데이터인가를 가리킴 (그 공간이 비면 다른 데이터가 대체 가능)
      • 크기 할당 필요 없음! (Java에서는 자동으로 1.5배씩 늘어남)

    • List(리스트) : 인터페이스
      • 크기가 정해져있다는 배열의 한계로 만들어진 인터페이스
      • 동적으로 자료형의 개수를 늘릴 수 있다.
  • .get(index) : 이 인덱스의 위치에 있는 객체 반환


2. for each 이용

int sum = 0;
for(int i : list)
	sum += i;
return sum;
  • for(int i : iterate한 객체) : iterate한 객체에서 한 개씩 순차적으로 i에 대입되어 for문이 수행됨



Streams

: 람다를 활용할 수 있는 기술 중 하나. 데이터의 흐름.

  • Java 8에서 추가되었다. (이전에는 배열, 컬렉션 인스턴스를 다루는 방법은 for 또는 foreach문을 돌면서 하나씩 꺼내서 다뤄야 했음)

  • 배열과 컬렉션 인스턴스에 함수 여러 개를 조합해서 원하는 결과를 필터링하고 가공된 결과를 얻을 수 있음

  • 람다를 이용해서 코드의 양을 줄이고 간결하게 표현할 수 있음

    👉🏻 즉, 배열과 컬렉션을 함수형으로 처리할 수 있음

  • 간단히 병렬처리(Multi-Threading)가 가능함. 하나의 작업을 둘 이상의 작업으로 잘게 나누어 동시에 진행하는 것이 가능함. 즉, 쓰레드를 이용해 많은 요소들을 한 번에 처리 가능


1. stream을 이용하여 List의 합계 구하기

  • Stream.of(리스트).mapToInt(i -> i).sum(); : 기본형 특화 스트림에서만 사용 가능함
  • Sream.of(리스트).reduce(0, Integer::sum); : reduce(초기값, 연산) 형식으로 사용함. 초기값부터 각 원소를 차례대로 순회하며 연산 수행. 이전 연산의 결과를 다음 연산의 초기값으로 넘김

2. stream을 이용하여 Array의 합계 구하기

  • import java.util.Arrays; 한 후 Arrays.stream(배열이름).sum();



참고자료

0개의 댓글