>  기사  >  Java  >  Array와 ArrayList의 차이점과 연결

Array와 ArrayList의 차이점과 연결

巴扎黑
巴扎黑원래의
2017-06-26 10:22:592264검색

오늘 블로거가 Java 인턴십 인터뷰를 갔는데 Java의 가장 기본적인 데이터 구조 중 많은 부분이 블로거에게 익숙하지 않다는 사실을 발견했습니다. . 그러나 Array와 ArrayList의 차이점과 연결에 대해 질문한 후 블로거는 혼란스러워했습니다. 좋아요, 할 말은 별로 없어요. 이제 정리만 하세요.

우선, 배열은 자바에서 배열입니다. 자바에서 배열을 선언하는 방법은 세 가지가 있습니다:

1 int[] a = new int[10]; 2 int a[] = new int[10]; //这种方式同c语言一样3 int a[] = {1,2,3,4};

위 선언에서 볼 수 있듯이, 배열을 정의할 때 데이터를 지정해야 합니다. 즉, 배열은 동일한 데이터 유형의 모음입니다. 또한 배열을 선언할 때 배열의 크기도 선언하며 배열의 요소 개수는 고정되어 있습니다.

이제 배열의 적용을 살펴보겠습니다.

 1 import java.util.Arrays; 2  3 /** 4  * @author jy 5  * @time 下午7:59:26 6  */ 7 public class ArrayAndArrayList { 8     public static void main(String[] args) { 9         10      int a[] = new int[4];11      System.out.println(a.length);  //数组的长度属性12      13      int b[] = {1,2};14      int c[] = {1,2};15      System.out.println(b.equals(c));  //输出为false,可见数组并没有重写hashcode()和equals()方法16      System.out.println(Arrays.equals(b, c));  //利用java.util.Array的equals()来判断数组是否相等,这里输出true17      System.out.println(isEquals(b,c));18      19     }20 21     /**22      * 重写方法来手动实现数组之间的比较方法23      */24     public static boolean isEquals(int[] b, int[] c) {25         26         if(b == null || c == null){27             return false;28         }29         if(b.length != c.length){30             return false;31         }32         for (int i = 0; i < c.length; i ++) {33             if(b[i] != c[i]){34                 return false;35             }36         }37         return true;38     }39     40 }

배열의 길이는 고정되어 있고 불변임을 알 수 있습니다. 배열은 객체의 hashcCode() 및 equals() 메서드를 재정의하지 않습니다.

우리 모두는 배열이 2차원일 수도 있다는 것을 알고 있습니다. 2차원 배열이 어떻게 선언되는지 살펴보겠습니다.

1 int[][] da = new int[2][3];  //推荐用这种声明方式,更能表明数组的类型2 int db[][] = new int[4][3];

그러나 가변 길이의 2차원 배열도 있습니다.

1 int[][] dc = new int[2][];  //第一维的大小不能空缺,第二维的大小可以是不一样的。2 dc[0] = new int[2];3 dc[1] = new int[3];

좋습니다. 여기서는 주제를 강조하기 위해 배열의 기본 데이터 구조 적용에 대해서는 언급하지 않습니다.

다음으로 ArrayList 컬렉션을 살펴보겠습니다.

ArrayList는 배열의 복잡한 버전인 동적 배열입니다. ArrayList는 요소를 동적으로 추가하고 삭제할 수 있습니다. .목록 인터페이스 . 가장 기본적인 구문을 살펴보겠습니다.

ArrayList list = new ArrayList(10);  
ArrayList<Integer> list1 = new ArrayList<Integer>();

첫 번째 구문에서는 제네릭을 사용하지 않고 이 목록에 다양한 유형의 요소를 추가할 수 있으며 배열 목록의 길이를 지정할 필요가 없습니다. . 제네릭을 사용할 때는 한 가지 유형의 데이터만 추가할 수 있습니다.

ArrayList의 중요한 메서드와 속성은 다음 코드에 나와 있습니다.

 ArrayList<Integer> list =  ArrayList<Integer>         list.add(1         list.add(2         list.add(3         list.remove(1         Object[] p = list.toArray();           System.out.println(p[0         System.out.println(list.contains(4));           System.out.println(list.size());           System.out.println(list.get(0));

위에는 ArrayList의 몇 가지 중요한 메서드가 나와 있습니다. 이 두 컬렉션 클래스를 비교해 보겠습니다.

(1) ArrayList는 Array의 복잡한 버전입니다.
      ArrayList는 내부적으로 객체 유형의 배열을 캡슐화합니다. 일반적으로 배열과 본질적으로 다르지 않으며 ArrayList의 많은 메서드도 마찬가지입니다. Index, IndexOf, Contains, Sort 등은 내부 배열을 기반으로 Array의 해당 메서드를 직접 호출합니다.

(2) 저장된 데이터 유형

ArrayList는 이종 객체를 저장할 수 있지만 Array는 동일한 데이터 유형의 데이터만 저장할 수 있습니다.

(3) 가변 길이

배열의 길이는 실제로 불변입니다. 2차원 가변 길이 배열의 실제 길이도 고정되어 있습니다. ArrayList의 길이는 지정할 수도 있고(길이를 지정해도 자동으로 2배로 확장됨) 지정하지 않을 수도 있으며, 가변 길이이다.

(4) 요소 접근 및 추가 및 삭제

일반적인 참조형의 경우 이 부분은 큰 영향을 미치지 않지만, 값형의 경우 ArrayList에 요소를 추가 및 수정하면 boxing 및 unboxing이 발생하는 작업, 잦은 작업이 부분에 영향을 줄 수 있음 효율성의. 또한 ArrayList는 동적 배열이므로 Key 또는 Value를 통한 빠른 액세스를 위한 알고리즘이 포함되어 있지 않으므로 실제로 IndexOf, Contains 및 기타 메서드를 호출하는 것은 요소를 찾는 단순한 루프이므로 이러한 메서드를 자주 호출하는 것은 작성하는 것보다 낫지 않습니다. 약간의 반복과 최적화가 더 빠릅니다. 이 요구 사항이 있는 경우 Hashtable 또는 SortedList와 같은 키-값 쌍 모음을 사용하는 것이 좋습니다.

좋습니다. 두 데이터 구조를 비교하는 것은 여기까지입니다. 괜찮다고 생각되는 잘못된 점이 있으면 언제든지 수정해 주세요.

그리고 블로그에 처음 글을 써보는데 좋아요 한번씩 눌러주세요.

위 내용은 Array와 ArrayList의 차이점과 연결의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.