2016-09-14 9 views
0

したがって、サイズが3のリストがある場合、[0,1,2]とし、インデックス3(list.get(3))のリスト要素にアクセスしようとします。明らかに、境界外の例外で失敗します。しかし、サブリストメソッドでは、私が試してみると:リストのサイズがfromIndexとtoIndexのJavaサブリスト

list.subList(3, 3); 

私は結果として空リストを取得します。ドキュメントによると:https://docs.oracle.com/javase/7/docs/api/java/util/List.html#subList(int,%20int)。このメソッドは、不正なエンドポイントインデックス値(fromIndex < 0 || toIndex> size || fromIndex> toIndex)に対してIndexOutOfBoundsExceptionをスローします。つまり、fromIndex == toIndex & & toIndex == sizeの場合、例外はスローされません。

直感的には、3つしかない場合はリストの4番目の要素にアクセスできないため、そうではないようです。では、なぜこれは機能しますか?ユースケースを満たすことを意図しているのか、それとも意図しない副作用ですか?

+0

Listのどの実装でテストしていますか? – nasukkin

+0

ArrayListのためにこれを試しました – user3758133

+3

しかし、あなたは* 4番目の要素にアクセスしていないので、問題はありません。 3番目の要素の後に空のスペースのサブリストを作成しています。 'subList(2、2)'は、要素2と要素3の間の空き領域のサブリストを作成します。要素4がない場合、要素4の後の空のスペースには到達できないため、 'subList(4、4)'は失敗します。 – Andreas

答えて

0

答えは、documentation you already linkedに明白に記載されています。最初の段落を見てください。具体的には、(私が太字にしている)括弧のフレーズに注意してください。

指定 たfromIndex、包括的、かつ排他的toIndexの、間のこのリストの部分のビューを返します。 (fromIndexと toIndexが等しい場合、返されるリストは空です)返されるリストは です。返されるリスト の非構造的変更はこのリストに反映され、その逆もあります。返されるリストは、このリストでサポートされるすべてのオプションのリスト操作を でサポートします。

あなたはfromIndextoIndexのためのsubList同じ値を渡されているので、あなたはそれから抜け出すリストはインデックスが元のリストの範囲外であっても、空になります。

関連する問題