Array と ArrayList の違いと関係

巴扎黑
リリース: 2017-06-26 10:22:59
オリジナル
2272 人が閲覧しました

ブロガーは今日 Java インターンシップの面接に行きましたが、Java の最も基本的なデータ構造の多くがブロガーにとってなじみのないものであることがわかりました。面接官が HashMap などの一般的なデータ構造について質問したとき、ブロガーは明確に答えることができました。 . しかし、Array と ArrayList の違いと関係について尋ねた後、ブロガーは混乱しました。さて、あまり言うことはありません。今すぐ整理してください。

まず第一に、Array は Java の配列です。 Java で配列を宣言するには 3 つの方法があります:

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() メソッドとquals() メソッドをオーバーライドしません。

配列は 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 は、配列の複雑なバージョンである動的配列であり、要素を動的に追加および削除できます。 .List インターフェイス。最も基本的なステートメントを見てみましょう:

ArrayList list = new ArrayList(10);  
ArrayList<Integer> list1 = new ArrayList<Integer>();
ログイン後にコピー

最初のステートメントでは、ジェネリックスを使用せずに、さまざまなタイプの要素をこのリストに追加でき、配列リストの長さを指定する必要はありません。 。ジェネリックを使用する場合、追加できるデータは 1 種類のみです。

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 のいくつかの重要なメソッドを上に示します。これら 2 つのコレクション クラスを比較してみましょう:

(1) ArrayList は Array の複雑なバージョンです
ArrayList は内部的に Object 型の配列をカプセル化します。一般的な意味では、配列や ArrayList の多くのメソッドと本質的には変わりません。 Index、IndexOf、Contains、Sort などは、内部配列に基づいて Array の対応するメソッドを直接呼び出します。

(2) 格納されるデータ型

ArrayList は異種オブジェクトを格納できますが、Array は同じデータ型のデータのみを格納できます。

(3) 可変長

配列の長さは実際には不変であり、2 次元可変長配列の実際の長さも固定されています。 ArrayList の長さは指定(指定しても自動で 2 倍に拡張されます)または指定なしの可変長です。

(4) 要素へのアクセスと追加、削除

一般的な参照型の場合、この部分は大きな影響はありませんが、値型の場合、ArrayList への要素の追加や変更によりボックス化やボックス化解除の操作が発生し、頻繁な操作により影響を受ける可能性があります。効率のこと。さらに、ArrayList は動的配列であり、Key または Value を介して高速にアクセスするためのアルゴリズムが含まれていないため、実際には IndexOf、Contains、およびその他のメソッドの呼び出しは要素を見つけるための単純なループであるため、このようなメソッドを頻繁に呼び出すことは、この要件がある場合は、Hashtable や SortedList などのキーと値のペアのコレクションを使用することをお勧めします。

さて、これら 2 つのデータ構造の比較は終わりです。もし間違っていると思われる点があれば、遠慮なく修正してください。

また、ブログを書くのは初めてですが、よろしくお願いします。

以上がArray と ArrayList の違いと関係の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート