자바 에서 두 개의 배열 을 하나 로 합 쳤 다.

두 개 String[] 를 하나 로 합 친다.
void f(String[] first, String[] second) {     String[] both = ??? }

보기에 매우 간단 한 문제 같다.그러나 어떻게 해야만 코드 를 효율 적 이 고 간결 하 게 쓸 수 있 는 지 는 생각해 볼 만하 다.
먼저 System. arraycopy ()
T[] concat(T[] A, T[] B) {    T[] C= new T[A.length+B.length];    System.arraycopy(A, 0, C, 0, A.length);    System.arraycopy(B, 0, C, A.length, B.length);    return C; }

이 중 범 형 T 은 실제 클래스 로 바 꿔 야 컴 파일 을 통과 할 수 있 습 니 다. new T[length] 자바 에 서 는 허용 되 지 않 기 때 문 입 니 다.
Arrays.copyOf()
자바 6 에 서 는 하나의 방법 Arrays.copyOf() 이 있 습 니 다. 일반적인 함수 입 니 다.
public static <T> T[] concat(T[] first, T[] second) {   T[] result = Arrays.copyOf(first, first.length + second.length);   System.arraycopy(second, 0, result, first.length, second.length);   return result; }           

여러 개 를 합 치 려 면 이렇게 쓸 수 있 습 니 다.
public static <T> T[] concatAll(T[] first, T[]... rest) {   int totalLength = first.length;   for (T[] array : rest) {     totalLength += array.length;   }   T[] result = Arrays.copyOf(first, totalLength);   int offset = first.length;   for (T[] array : rest) {     System.arraycopy(array, 0, result, offset, array.length);     offset += array.length;   }   return result; }           

Array.newInstance Array.newInstance 을 사용 하여 배열 을 생 성 할 수 있 습 니 다.
private static <T> T[] concat(T[] a, T[] b) {     final int alen = a.length;     final int blen = b.length;     if (alen == 0) {         return b;     }     if (blen == 0) {         return a;     }     final T[] result = (T[]) java.lang.reflect.Array.             newInstance(a.getClass().getComponentType(), alen + blen);     System.arraycopy(a, 0, result, 0, alen);     System.arraycopy(b, 0, result, alen, blen);     return result; }           

apache-commons
apache - comons 에서 ArrayUtils.addAll(Object[], Object[]) 방법 이 있 습 니 다. 우리 한 줄 로 해결 할 수 있 습 니 다.
String[] both = (String[]) ArrayUtils.addAll(first, second);

좋은 웹페이지 즐겨찾기