2

私の質問は非常に明確です。

リストがあり、null でない要素が少なくとも 1 つあることを確認したいと考えています。それも、ループなしで (パフォーマンス測定)。

list.size()

ここでは絶対に役に立ちません。リストに 5 つの null 値が含まれている場合、そのサイズも 5 になるためです。

を含むことができないリストを要求しているわけではないことに注意してくださいnull

4

6 に答える 6

3

リストであることだけがわかっている (つまり、 を実装しているList) オブジェクトを受け取った場合、直接的または間接的にループする他の解決策はありません。

Listインターフェースはそのような機能を提供しておらず、それを提供する一般的に利用可能な実装がないことを私は知っています。

ループするか、ループするメソッドを呼び出す以外に選択肢はありません。

編集:もちろん、リストクラスを自分で書くと、カウンターを持つようにやりたいことができます。

于 2013-09-12T14:29:50.973 に答える
0

のコピーコンストラクターArrayListが実際にループしているかどうかはわかりませんが、これはString私の例を使用してトリックを行います。removeAll一方、内部的にループします...したがって、実際には「ループしていない」わけではありません...

  List<String> testLst = new ArrayList<String>();
  testLst.add(null);
  testLst.add(null);
  testLst.add(null);
  testLst.add(null);

  List<String> testLst2 = new ArrayList<String>();
  testLst2.add(null);
  testLst2.add(null);
  testLst2.add(null);
  testLst2.add(null);
  testLst2.add("test");

  List<String> nullLst = new ArrayList<String>();
  nullLst.add(null);
  List<String> removedNull = new ArrayList<String>(testLst);
  removedNull.removeAll(nullLst);

  if (testLst.size() > 0 && removedNull.size() > 0) {
    System.out.println("Contains non-null");
  } else {
    System.out.println("Contains only null or empty");
  }

  removedNull = new ArrayList<String>(testLst2);
  removedNull.removeAll(nullLst);
  if (testLst2.size() > 0 && removedNull.size() > 0) {
    System.out.println("Contains non-null");
  } else {
    System.out.println("Contains only null or empty");
  }
于 2013-09-12T14:52:24.633 に答える
0
Collections.frequency(list, null) > 0
于 2013-09-12T14:32:18.440 に答える