web-dev-qa-db-ja.com

Java配列にアイテムを動的に追加するにはどうすればよいですか?

PHPでは、次の方法で配列に要素を動的に追加できます。

$x = new Array();
$x[] = 1;
$x[] = 2;

この後、$x{1,2}のような配列になります。

Javaで似たようなことをする方法はありますか?

79
kamikaze_pilot

Java.util.LinkedListまたはJava.util.ArrayListを見てください

List<Integer> x = new ArrayList<Integer>();
x.add(1);
x.add(2);
106
corsiKa

Javaの配列のサイズは固定されているため、PHPでできるように「最後に何かを追加する」ことはできません。

PHPの動作に少し似ているのは次のとおりです。

int[] addElement(int[] org, int added) {
    int[] result = Arrays.copyOf(org, org.length +1);
    result[org.length] = added;
    return result;
}

その後、あなたは書くことができます:

x = new int[0];
x = addElement(x, 1);
x = addElement(x, 2);

System.out.println(Arrays.toString(x));

しかし、このスキームは、配列全体のコピーを毎回作成するため、より大きな配列には恐ろしく非効率的です。 (実際、古い配列は同じままなので、PHPと完全に同等ではありません)。

PHP配列は、実際にはJava HashMapと「max key」を追加したものとまったく同じであるため、次に使用するキーと、奇妙な反復順序を認識します(そして整数キーといくつかの文字列の間の奇妙な等価関係)。ただし、単純なインデックス付きコレクションの場合は、他の回答者が提案しているように、Javaのリストを使用する方が適切です。

整数ですべてのintをラップするオーバーヘッドのためにListの使用を避けたい場合は、内部的に配列を使用するプリミティブ型のコレクションの再実装を使用することを検討してください。ただし、内部配列がいっぱいの場合のみ(ArrayListと同様)。 (グーグルで簡単に検索できる例の1つは、 このIntListクラス です。)

Guavaには、 そのようなラッパーを作成するメソッドInts.asListLongs.asListなどが含まれます。

63
Paŭlo Ebermann

Apache Commonsには、新しい配列の最後に要素を追加するための ArrayUtils 実装があります。

/** Copies the given array and adds the given element at the end of the new array. */
public static <T> T[] add(T[] array, T element)
18
mist

私はこの質問をウェブで頻繁に見ましたが、私の意見では、評判の高い人の多くはこれらの質問に適切に答えませんでした。そこで、ここで自分の答えを述べたいと思います。

最初に、arrayarraylistの間に difference があることを考慮する必要があります。

質問は、要素を配列に追加し、ArrayListではなく


答えは非常に簡単です。 3つのステップで実行できます。

  1. 配列を配列リストに変換する
  2. ArrayListに要素を追加します
  3. 新しいarrayListを配列に変換します

これは簡単な画像です enter image description here

最後にコードを示します。

ステップ1:

public List<String> convertArrayToList(String[] array){
        List<String> stringList = new ArrayList<String>(Arrays.asList(array));
        return stringList;
    }

ステップ2:

public  List<String> addToList(String element,List<String> list){

            list.add(element);
            return list;
    }

ステップ3:

public String[] convertListToArray(List<String> list){
           String[] ins = (String[])list.toArray(new String[list.size()]);
           return ins;
    } 

ステップ4

public String[] addNewItemToArray(String element,String [] array){
        List<String> list = convertArrayToList(array);
        list= addToList(element,list);
        return  convertListToArray(list);
}
12

ArrayListを使用してから、toArray()メソッドを使用できます。しかし、何をしているのかによっては、配列さえまったく必要ないかもしれません。 Listsがもっと欲しいものかどうかを調べてください。

参照: Java List Tutorial

11
Ian Dallas

おそらく、このためにArrayListを使用する必要があります。これは、構造のような動的なサイズの配列です。

Javaのコレクションフレームワークを使用して、配列に要素を動的に追加できます。コレクションフレームワークは、プリミティブデータ型では機能しません。

このコレクションフレームワークは、「Java.util。*」パッケージで利用可能になります

たとえば、ArrayListを使用する場合、

オブジェクトを作成してから、要素の数(String、Integerなどの任意のタイプ)を追加します

ArrayList a = new ArrayList();
a.add("suman");
a.add(new Integer(3));
a.add("gurram");

これで、3つの要素が配列に追加されました。

追加した要素のいずれかを削除する場合

a.remove("suman");

再び要素を追加したい場合

a.add("Gurram");

したがって、配列サイズは動的に増減します。

4
SSSM

ArrayListまたはjuggleを使用して配列を作成し、配列サイズを自動的にインクリメントします。

1

これは、Javaの配列に追加する簡単な方法です。 2番目の配列を使用して元の配列を保存し、さらに1つの要素を追加しました。その後、その配列を元の配列に戻しました。

    int [] test = {12,22,33};
    int [] test2= new int[test.length+1];
    int m=5;int mz=0;
    for ( int test3: test)        
    {          
    test2[mz]=test3; mz++;        
    } 
    test2[mz++]=m;
    test=test2;

    for ( int test3: test)

    {
      System.out.println(test3);
    }
0
Nenad Bojović

Javaでは、配列のサイズは固定されていますが、インデックスとforループを使用して、固定サイズの配列に要素を動的に追加できます。以下の例をご覧ください。

package simplejava;

import Java.util.Arrays;

/**
 *
 * @author sashant
 */
public class SimpleJava {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here

        try{
            String[] transactions;
            transactions = new String[10];

            for(int i = 0; i < transactions.length; i++){
                transactions[i] = "transaction - "+Integer.toString(i);            
            }

            System.out.println(Arrays.toString(transactions));

        }catch(Exception exc){
            System.out.println(exc.getMessage());
            System.out.println(Arrays.toString(exc.getStackTrace()));
        }
    }

}
0

プリミティブ配列のどこにいるかを数えます

class recordStuff extends Thread
{
    double[] aListOfDoubles;
    int i = 0;

    void run()
    {
        double newData;
        newData = getNewData(); // gets data from somewhere

        aListofDoubles[i] = newData; // adds it to the primitive array of doubles
        i++ // increments the counter for the next pass

        System.out.println("mode: " + doStuff());
    }

    void doStuff()
    {
        // Calculate the mode of the double[] array

        for (int i = 0; i < aListOfDoubles.length; i++) 
        {
            int count = 0;
            for (int j = 0; j < aListOfDoubles.length; j++)
            {
                if (a[j] == a[i]) count++;
            }
            if (count > maxCount) 
            {
                maxCount = count;
                maxValue = aListOfDoubles[i];
            }
        }
        return maxValue;
    }
}
0
user1948983