자바 배열 요소 역순 의 세 가지 방식(소결)

배열 요 소 를 반전 시 키 는 데 는 여러 가지 실현 방식 이 있 는데 여기 서 흔히 볼 수 있 는 세 가 지 를 소개 한다.
직접 배열 요소 교환

@Test
public void testReverseSelf() throws Exception {
  System.out.println("use ReverseSelf");

  String[] strings = { "ramer", "jelly", "bean", "cake" };
  System.out.println("\t" + Arrays.toString(strings));
  for (int start = 0, end = strings.length - 1; start < end; start++, end--) {
    String temp = strings[end];
    strings[end] = strings[start];
    strings[start] = temp;
  }
  System.out.println("\t" + Arrays.toString(strings));
}
 

Array List 사용 하기:Array List 를 입력 하고 꺼 내 는 순서 가 같 습 니 다.이 기능 을 이용 하여 배열 요 소 를 잠시 저장 할 수 있 습 니 다.

@Test
public void testArrayList() throws Exception {
  System.out.println("use ArrayList method");

  String[] strings = { "ramer", "jelly", "bean", "cake" };
  System.out.println("\t" + Arrays.toString(strings));
  List<String> list = new ArrayList<>(strings.length);
  for (int i = strings.length - 1; i >= 0; i--) {
    list.add(strings[i]);
  }
  strings = list.toArray(strings);
  System.out.println("\t" + Arrays.toString(strings));
}

Collections 와 Arrays 도구 클래스 사용 하기

@Test
public void testCollectionsReverse() throws Exception {
  System.out.println("use Collections.reverse() method");

  String[] strings = { "ramer", "jelly", "bean", "cake" };
  System.out.println("\t" + Arrays.toString(strings));
  //            ,       :
  // char[] cs = {'a','b','c','g','d'};
  //                : 
  // Character[] cs = {'a','b','c','g','d'};
  Collections.reverse(Arrays.asList(strings));
  System.out.println("\t" + Arrays.toString(strings));
}
속도 테스트:

@Test
public void testTimeDuration() throws Exception {
  recordTime(ArrayReverse.class,"testCollectionsReverse");
  recordTime(ArrayReverse.class,"testArrayList");
  recordTime(ArrayReverse.class,"testReverseSelf");
}

private static String[] strings = new String[1000000];
{
  for (int i = 0; i < 1000000; i++) {
    strings[i] = String.valueOf(i);
  }
}
/**
 *          .
 *
 * @param <T> the generic type
 * @param clazz the clazz
 * @param methodName the method name
 */
public <T> void recordTime(Class<T> clazz, String methodName) {
  long start = System.currentTimeMillis();
  System.out.println("start: " + start);

  Method[] declaredMethods = clazz.getDeclaredMethods();
  for (Method method : declaredMethods) {
    String name = method.getName();
    if (name.equals(methodName)) {
      try {
        method.invoke(clazz.newInstance());
      } catch (Exception e) {
        e.printStackTrace();
      }
    }
  }
  long end = System.currentTimeMillis();
  System.out.println("end: " + end);
  System.out.println("duration: " + (end - start) + " ms");
}

테스트 결과:
Collections 와 Arrays 도구 클래스 사용:12 ms
ArrayList 사용:7ms
직접 배열 요소 교환:4ms
데이터 양 이 갈수 록 많아 지면 Array List 를 사용 하 는 방식 이 느 려 집 니 다.
배열 요 소 를 직접 사용 하여 바 꾸 면 항상 가장 빨리 완성 합 니 다.
요약:Collections 와 Arrays 도구 류 반전 배열 요 소 를 사용 하 는 것 이 더 간단 하지만 원래 배열 에서 작업 할 때 속도 가 빠 르 고 최소 메모 리 를 차지 합 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기