0

ArrayList にメソッドが含まれている方法について疑問があります。例を見てみましょう:

List<String> lstStr = new ArrayList<String>();
String tempStr1 = new String("1");
String tempStr2 = new String("1");

lstStr.add(tempStr1);

if (lst.contains(tempStr2))
    System.out.println("contains");
else
    System.out.println("not contains");

「含まない」を返します。

もう一つの例:

List<LinkProfileGeo> lst = new ArrayList<LinkProfileGeo>();
LinkProfileGeo temp1 = new LinkProfileGeo();
temp1.setGeoCode("1");
LinkProfileGeo temp2 = new LinkProfileGeo();
temp2.setGeoCode("1");

lst.add(temp1);

if (lst.contains(temp2))
    System.out.println("contains");
else
   System.out.println("not contains");

含むを返します。では、contains メソッドはどのように機能するのでしょうか。

ありがとう

4

4 に答える 4

4

文字列をリストに追加していますlstStr

lstStr.add(tempStr1);

しかし、あなたはcontainsメソッドを使用していますlst

if (lst.contains(tempStr2))

contains内部で要素を見つけるために使用するため、テストの考え方は正しいため、equalsequals を使用して文字列が一致する場合は true を返す必要があります。しかし、追加用とチェック用の2つの異なるリストを使用しているようです。

于 2013-09-20T15:38:32.960 に答える
2

興味がある場合は、関連するソース コードを次にArrayList示します。@ user2777005 が指摘したように、コードにタイプミスがありました。lstStr.contains()、NOTを使用する必要がありますlst.contains()

     public int indexOf(Object o) {
        if (o==null) {
            for (int i=0; i<a.length; i++)
                if (a[i]==null)
                    return i;
        } else {
            for (int i=0; i<a.length; i++)
                if (o.equals(a[i]))
                    return i;
        }
        return -1;
    }

    public boolean contains(Object o) {
        return indexOf(o) != -1;
    }
于 2013-09-20T15:44:17.540 に答える
0

コードの最初のセクション:

String tempStr1 = new String("1");
String tempStr2 = new String("1");

両方とも、文字列の 2 つの異なる 2 オブジェクトを参照しますtempStr1tempStr2その後、tempStr1 によって参照される String オブジェクトが によってリストに追加されます。そのため、List には、 not .but メソッドcodelstStr.add(tempStr1);によって参照される String オブジェクトが 1 つだけあります。に追加された String オブジェクトのコンテンツの 1 つと同じであり、一致するものが見つからない場合は false を返します。それは次のように言及されています:tempStr1tempStr2contains();equals()lstStr.contains(temp2);temp2ListlstStr.contains(temp2);ListlstStr.contains(temp2);

lst.contains(temp2);

ここでは、( ) の代わりに別のList参照変数 ( ) を使用しています。これが false を返し、else 部分を実行する理由です。lstlstStr

コードの 2 番目のセクションでsetGeoCode()は定義されていません。

于 2013-09-20T17:18:44.240 に答える