쿠릉쿠릉 쾅쾅
쿠릉쿠릉 쾅쾅
쿠릉쿠릉 쾅쾅
250x250
전체 방문자
오늘
어제
  • 분류 전체보기
    • HTML CSS
    • 잡담
    • 프로그래밍 꿀팁 사이트
    • 코딩 도서
    • [자바]
      • 디자인 패턴
      • 자바의 정석 - 3판
      • 자바
      • 자바 문법
    • git
    • [TDD]
    • 개발 서적 독후감
      • 클린 코더
      • 토비 스프링3
      • 객체지향의 사실과 오해
      • 모던 자바 인 액션
      • 엘레강트 오브젝트
    • CS
      • 운영체제
      • HTTP
    • [SQL]
      • SQL 기초
      • 혼자공부하는SQL
    • [ Spring ]
      • REST API
      • Spring Toy
      • Spring 에러
      • Spring
      • Spring 입문
      • Spring 핵심 원리
      • SpringMVC 1편
      • SpringMVC 2편
      • Spring Boot를 이용한 RESTful We..
      • Batch
    • [JPA]
      • JPA
      • JPA 에러
      • JPA 프로그래밍 - 기본편
      • 스프링 부트와 JPA 활용 1 - 웹 애플리케이..
      • 실전! 스프링 부트와 JPA 활용2 - API 개..
      • 실전! 스프링 데이터 JPA
      • 실전! Querydsl
    • 인텔리제이
    • [DB]
      • DB
      • H2
    • Gradle
    • 면접
    • [알고리즘]
      • 알고리즘
      • 자료구조
      • 자바 알고리즘 공부
    • [프로젝트]
    • 쿠릉식 객체지향 사고
    • 리눅스

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • querydsl
  • Spring
  • MVC
  • 스프링부트
  • springboot
  • http
  • 백준
  • 깃허브
  • REST API
  • java
  • 자료구조
  • 알고리즘
  • Git
  • SQL
  • 자바
  • JPA
  • GitHub
  • 함수형인터페이스
  • 재귀
  • 스프링

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
쿠릉쿠릉 쾅쾅

쿠릉쿠릉 쾅쾅

[자바]/자바 문법

[Java] 배열 복사 Arrays.copyOf() vs System.arraycopy()

2021. 10. 31. 15:57
728x90

 

📌 Arrays.copyOf()

  • Arrays.copyOf(원본배열, 복사할길이);
  • Arrays.copyOfRange(A, form_index, to_index)
    • int[] A : 복사할 배열
    • int from_index : 복사할 배열의 시작 index
    • int to_index : 복사할 배열의 끝 index 
    • 복사할 끝 index 값은 포함 안됨 
  • import java.util.Arrays; 필요
  • Arrays.copyOf()는 System.arraycopy()를 래핑한 함수
  • Arrays.copyOf() 는 System.arraycopy()가 구현하는 것 외에 추가 기능 제공
    • System.arraycopy()는 단순히 소스배열에서 대상으로 값을 복사하지만 Arrays.copyOf()는 새 배열도 만들 수 있고 필요한 경우 내용을 자르거나 채울 수 있음

 

import java.util.Arrays;

// arr1 배열에서 0번째부터 3개의 값 복사
Array.copyOf(arr1, 3);

// arr1 배열에서 2번째부터 4번째까지 값 복사 (4번째 값 포함 안됨)
Array.copyOfRange(arr1, 2, 4);

 

 

import java.util.Arrays;

class prac{
    public static void main(String[] args){
        int[] arr1 = {1,2,3,4,5, 6, 7, 8, 9, 0};
        int[] arr2 = Arrays.copyOf(arr1, 3);
        int[] arr3 = Arrays.copyOfRange(arr1, 2, 7);
        
        System.out.println(Arrays.toString(arr1));  // [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
        System.out.println(Arrays.toString(arr2));  // [1, 2, 3]
        System.out.println(Arrays.toString(arr3));  // [3, 4, 5, 6, 7]
    }
}

 

 

 

 

 

📌 System.arraycopy()

  • System.arraycopy(src, srcPos, dest, destPos, length);
    • Object src  : 복사할 객체, 원본 배열
    • int srcPos : 복사 시작할 index
    • Object dest : 복사된 배열
    • int destPos : 원본으로부터 가져온 데이터를 복사된 배열의 몇 번째부터 추가할지
    • int length : 카피되는 배열 요소 개수
  • native 메서드로 되어있어 속도가 빠름

 

// arr1 배열에서 0번째부터 3개 값을 arr2 배열의 2번째부터 추가하겠다는 의미
System.arraycopy(arr1, 0, arr2, 2, 3);

 

 

예제

import java.util.Arrays;

class prac {
    public static void main(String[] args){
        int[] arr1 = {1,2,3,4,5,6};
        int[] arr2 = new int[6];
        
        System.arraycopy(arr1, 0, arr2, 2, 3);
        System.out.println(Arrays.toString(arr2));  // [0, 0, 1, 2, 3, 0]
    }
}

 

 

 

 

 

 

정리

Arrays.copyOf()가 System.arraycopy() 보다 더 직관적

Arrays.copyOf()는 System.arraycopy() 와 달리 새 배열도 생성 가능

전체 길이를 전부 복사하거나, 복사 대상의 객체를 유지하지 않아도 된다면 Arrays.copyOf() 를 사용할 것

복사하는 길이를 명시하거나 객체를 유지해야한다면 System.arraycopy()를 사용 할 것

기본의 배열의 일부만 덮어쓰이기 또는 clone()보다 더 빠르길 원할 때는 System.arraycopy()를 쓸 것

 

728x90

'[자바] > 자바 문법' 카테고리의 다른 글

[Java] length, length(), size()  (0) 2021.11.01
[Java] String 클래스의 메서드 replace 와 replaceall 메서드 차이  (0) 2021.11.01
[Java] Vector 와 ArrayList 차이  (0) 2021.10.24
[Java] return  (0) 2021.10.23
[Java] 메모리 구조 (static, stack, heap)  (0) 2021.10.22
    '[자바]/자바 문법' 카테고리의 다른 글
    • [Java] length, length(), size()
    • [Java] String 클래스의 메서드 replace 와 replaceall 메서드 차이
    • [Java] Vector 와 ArrayList 차이
    • [Java] return
    쿠릉쿠릉 쾅쾅
    쿠릉쿠릉 쾅쾅
    깃허브 주소 : https://github.com/kureung

    티스토리툴바