-6

配列(例: int a[5])を宣言した場合、 a[ ]の長さを変更できる方法はありますか(たとえば 3 に)? つまり、a.lengthの値を 50 に減らす必要があります。

私がタグ付けした言語で解決策を教えてください。

私ももう1部としてやりたいと思います。配列a[ ]が動的に作成され、 100 個の要素を入力した場合。後で、最後の 50 要素を削除して、同じ配列を変更する必要があります。これで、配列の要素は 50 個になり、コードa.lengthは値 50 を返す必要があります。どうすればこれを達成できますか? 注: 3 番目の変数を使用したり、内容を別の配列にコピーしたりしたくありません。これは、メモリの浪費を避けるためです。

4

6 に答える 6

1

他の回答から、作成後に配列のサイズを変更することはできないことをおそらく理解できるでしょう。あなたが言う時

int [] A = new int[5]; 

あなたが本当に言っているのは、「A」というオブジェクトがあり、そこに整数とサイズ 5 の配列を入れたいということです。その配列を変更することはできません。ただし、次のように言うだけで、整数とサイズ3の新しい配列を「A」に入れることができます。

A = new int[3];

これを行うと (他の参照がない場合)、古い配列はガベージ コレクターによって破棄されます。古い配列にあったものを新しい配列にコピーするだけで完了です。これで長さも変わります。

ここに小さなテストコードがあります:

int [] a = new int[5];
a[0] = 2;
a[1] = 5;
a[2] = 1;
a[3] = 6;
a[4] = 0;
println(a.length); // prints 5
int [] temp = new int[3];
System.arraycopy(a,0,temp,0,temp.length);
a = temp;
temp = null;
println(a.length); //prints 3

これは、サイズを直接変更できる ArrayList を使用してはるかにエレガントに行うことができるため、醜いアプローチと見なされます。

技術的には、これは配列を新しい配列にコピーしていますが、探しているものかもしれません

于 2013-09-05T12:54:23.080 に答える
1

C++: を使用しvectorます。リサイズ機能付きです。

于 2013-09-05T11:36:28.793 に答える
0

他の言語はわかりませんが、JAVAではarrayサイズ変更ができません。唯一のオプションは、小さい/大きいサイズの新しい配列を作成し、その内容を適切にコピーすることです。ArrayListこれは、動的にサイズを大きくするために で使用されるロジックと同じです。arraylist が大きくなる方法にはさまざまな要因が影響するため、ソース コードを調べると、より多くの洞察が得られます。

于 2013-09-05T11:32:19.843 に答える
0

Java/C++ で配列に割り当てられたメモリを増減する方法はありません。さまざまなサイズのコンテナーが必要な場合は、リスト コンテナーを使用する必要があります。コンテナを使用したくない場合は、配列のサイズを変更する必要があるたびに新しいメモリを再割り当てする必要があります

于 2013-09-05T11:33:42.380 に答える
0

JavaListでは、特にArrayList.

Arraysユーティリティも確認できます。

于 2013-09-05T11:30:37.340 に答える
0

配列のサイズを変更することはできませんが、新しいより大きな配列を作成して、古い配列をコピーすることはできます。コンテンツをコピーしたくない場合は、最初に十分な大きさの配列を作成してください。

配列を大幅に変更する場合は、Collectionsフレームワークのクラスを使用することをお勧めします。生のバイトの場合は、配列または a のByteBuffer方が適しています (ただし、ByteBuffer動的にサイズを変更することはできません)。

また、メモリはここで問題になりますか? どのくらいのデータについて話しているのですか? 1GB?2GB?10GB?

于 2013-09-05T11:30:41.697 に答える