-2

1 つの ArrayList にデータを入力する 2 つのメソッドがあり、データのインターリーブされたリストを取得するために、メソッドの 1 つは偶数の位置に要素を追加し、もう 1 つは奇数の位置に要素を追加します。

偶数または奇数の位置に要素を追加するにはどうすればよいですか?

for (int i = 0; i < mData.size(); i++) {
     myList.add( ,mData.get(i))
{

説明。i偶数または奇数のリストは必要ありません。for ループで変数から次の偶数または奇数を取得する必要があります。つまり、要素imdata.size()格納されるサイズを超えた場合でも、要素を偶数の場所にのみ格納するためmDataです。

4

5 に答える 5

1

Lists動的に割り当てられたサイズの構造であるため、奇数または偶数の位置に正確に配置することは困難です。要素を追加し、サイズは 1、秒を追加、サイズは 2 など です、「同期」メソッドを使用して特定の順序で要素を List に追加できます。1 つのメソッドが最初に開始され、0、2、4 などの位置に要素を追加し、2 つ目のメソッドは 1、3、5 などに要素を追加します。

Listしかし、それは適切な構造ではないと思います。アイテムを奇数または偶数の位置に正確に追加する場合は、固定サイズの構造、つまりクラシック配列を選択し、配列を埋めてから、それを動的リストに変換できます(完了リストをどこかに渡す/送信する必要がある場合)。

于 2013-04-06T10:56:56.767 に答える
0

モジュロ演算子を使用して、このようなことができます

  if (i % 2 != 0)
        { 



        }
于 2013-04-06T10:45:03.197 に答える
0

if(i % 2) == 0その後iは偶数です。そうでなければ、i奇数です。

この%演算子は、2 つの数値の剰余を返します。次に例を示します。

5 % 2は 1 ですが、4 % 20 です。

モジュロは遅くなる可能性があります。あなたの場合iは整数なので、次のことができます:

if (x & 1 == 0) {
   Even
}
于 2013-04-06T10:45:11.273 に答える
0

次のコードを使用すると、より良い可能性があります。

    public static boolean isEven(int i) {
    return (i & 1) == 0;
}
于 2013-04-06T10:46:39.367 に答える
-1

これは確実に ConcurrentModificationException を起動します。リストを変更することはできません (Fujaba ライブラリによって提供されるリストやその他のコレクションなどの同期されたリストを除きます)。最初にリストのクローンを作成し(クローン、リストを再度参照しない)、クローンをトラバースし、ダルシャンが提案したモジュロ演算子を使用して、元のリストから値を削除することをお勧めします。

于 2013-04-06T10:52:04.753 に答える