1

配列リストに10個のスロットがあるかどうかを知る必要があります。サイズを呼び出す方が速い関数ですか、それとも10番目のインデックスの場合と同じですか?また、特定の機能の速度を確認する方法はありますか?phpMyAdminがクエリの実行にかかる時間を表示する方法のようなものです。

if(strideList.size() == 10)
{

}

また

if(strideList.get(9) != null)
{

}
4

3 に答える 3

4

list.size()それはあなたの意図を明確に示しているので、あなたは使うべきです。リストに20個の要素がある場合、他のコードは実際には間違っていますか?strideList.get(9) != null9番目の要素が。と異なるかどうかをチェックするだけですnull

関数の速度のチェックについては、タイマーを使用して関数の最初から最後までの経過時間を計算したり、プロファイラーと呼ばれる特別なソフトウェアを使用して、アプリケーションでどの関数/コードパスが遅いかを確認したりできます。

于 2013-03-03T03:51:34.837 に答える
4

ArrayList.javaソースに基づいて(他のList実装も同様になります)、オブジェクトからメンバー変数をsize()返すだけです。ただし、範囲チェックを実行し、オーバーヘッドの3つまたは4つの機能を実行してから、さらに多くの処理能力を必要とする配列アクセスを実行します。intget()

を使用しsize()ます。

(さらに、@BarışUşaklıが言ったように、それはより読みやすくなりsize()ます。)

于 2013-03-03T03:53:37.917 に答える
1

strideList.get(9)はをスローし、IndexOutOfBoundsExceptionよりも時間がかかります。list.size() ただし、注意すべき点はのコードですget(int index)。関係する2つのステップがあります1.size() 範囲がサイズよりも大きい場合は例外をスローします。これは追加の時間がかかります。3。サイズがサイズよりも大きくない場合は、配列から取得します。ArrayListのコード:

    public E get(int index) {
    382           rangeCheck(index);
    383   
    384           return elementData(index);
    385       }

  private void rangeCheck(int index) {
   603           if (index >= size)
   604               throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
   605       }
   606   


     E elementData(int index) {
      371           return (E) elementData[index];
      372       }
      373   
于 2013-03-03T04:06:18.867 に答える