4

私はJavaを理解しようとしています。

ArrayListサイズが50で、いくつかの名前が事前に入力されていると仮定します。

配列リストから3番目と4番目の要素を削除するとします。配列リストはどうなりますか?再配置されますか?削除された3番目と4番目の要素にアクセスしようとすると、nullが返されますか?

4

9 に答える 9

19

いいえ、削除しようとしている要素の後の要素は左にシフトされるため(高価な操作)、穴はありません。

補足として、3番目の要素を削除すると、5番目の要素が左にシフトされるため、後で4番目の要素を削除すると、代わりに開始コレクションの5番目の要素が削除されます。2つの連続する要素を削除するには、同じインデックスを2回指定する必要があります。

于 2012-06-25T11:19:38.593 に答える
7

それらは再配置され、シフトされます。

代わりにそれらを返すようにしたい場合はnull、削除する要素を削除するのではなく、削除する要素を明示的にnullに設定するだけです。

于 2012-06-25T11:20:28.127 に答える
5

なぜ自分で試してみなかったのですか?

List<String> list = new ArrayList<String>();
list.add("A");
list.add("B");
list.add("C");
list.add("D");
list.add("E");
list.add("F");
list.add("G");

for(int i = 0; i < list.size(); i++) System.out.println("index " + i + ": " + list.get(i));

System.out.println();
list.remove(0); // remove "A"

for(int i = 0; i < list.size(); i++) System.out.println("index " + i + ": " + list.get(i));

出力:

index 0: A
index 1: B
index 2: C
index 3: D
index 4: E
index 5: F
index 6: G

index 0: B
index 1: C
index 2: D
index 3: E
index 4: F
index 5: G
于 2012-06-25T11:23:41.160 に答える
3

実際には、両方のオプションを利用できます。

final List<Character> x = new ArrayList<Character>(asList('a', 'b', 'c', 'd'));
x.set(1, null); // removes an element without shifting
x.remove(0);    // removes an element with shifting
System.out.println(x);

プリント

[null, c, d]
于 2012-06-25T11:24:59.730 に答える
2

配列リスト要素が再配置されます

于 2012-06-25T11:19:56.947 に答える
1

ArrayListは、インデックスで参照できるアイテムの連続リストです。したがって、アイテムを削除すると、後続のすべてのアイテムがシフトされます。

于 2012-06-25T11:20:23.110 に答える
1

要素がシフトされます。

ArrayListの削除についてはjavadocを参照してください。

java.util.ArrayList
public E remove(int index)
Removes the element at the specified position in this list. Shifts any subsequent elements to the left (subtracts one from their indices).
Specified by:
remove in interface List
Overrides:
remove in class AbstractList
Parameters:
index - the index of the element to be removed
Returns:
the element that was removed from the list
Throws:
IndexOutOfBoundsException -
于 2012-06-25T11:21:03.233 に答える
1

removeメソッドのjavadocによると、残りのエントリはシフトバックされるため、ギャップはありません。

于 2012-06-25T11:23:02.320 に答える
0

通常、サイズを定義せずに、Javaコレクションを動的ストレージとして使用します。

List<String> list = new ArrayList<String>(); //dynamic

静的な事前定義されたコレクションの場合、Java配列を使用します。

String[] array = new String[50]; //static
于 2012-06-25T11:22:35.200 に答える