Java 整数配列と汎用配列は、Java プログラミングで一般的に使用されるデータ構造です。整数配列は、整数型のデータのみを格納できる特定の種類の配列です。汎用配列は、あらゆる種類のデータを格納できる、より柔軟な配列タイプです。 Java では、整数配列と汎用配列を使用して、並べ替え、検索、挿入、削除、その他の操作などのさまざまな機能を実装できます。この記事では、Java 整数配列と汎用配列の基本概念と一般的な操作を紹介し、読者がこれら 2 つの配列型をより深く理解し、適用できるようにします。
The Princeton Review の「ap Computer Science a prep」の 2022 年版には、次のコードを使用したサンプル質問が含まれています。 リーリー
arraylist が有効な構成要素である Java バージョンはありますか?私の理解では、どのような場合でも
arraylist である必要があるということです。 Java 17 および 21 (私のシステムにインストールされているもの) では、
arraylist で
unexpected type エラーが発生します。
arraylist として定義した場合、正しくインスタンス化するにはどうすればよいでしょうか?明白な解決策は
data = new arraylist (配列リストが 10 個必要だと仮定) ですが、Java は汎用配列をサポートしていないため、
汎用配列の作成は失敗します。
もし だったら一度はできましたが、特にその削除は大したことだと思いませんか? Java はめったに Backward を壊しません)互換性!) ######不可能###。
正しくインスタンス化できません2。非プリミティブ型の配列を持つことは意味がありません。 List> は、あらゆる点で List
カジュアルな Web 検索では、その本の具体的な内容は見つかりませんでした。また、あなたが提供したリンクも見つかりませんでした (間違いなく、見つけるのは難しいです。著作権で保護されており、著者はそれを望まなかったのだと思います)。簡単に支払いにアクセスできます)。私が探している重要なことは、
なぜこれが不可能なのか、それは悪い考えなのか、あるいは、あなたが強調している問題が次のようなものであることを示す、その章の文脈です。これがこの本が表現しようとしている点です。
###結論は:###
List<int>
を作成することはできません。今はそんなことはできません。あなたにはそれができなかったのです。1
List
int[] は現在
List よりも空間と時間が非常に小さいため、より効率的です。 「決して書いてはいけない愚かなアイデアなので、それを機能させる方法について詳しく説明した本は...奇妙です。Java のキャリアが 15 年になる人にとって、これは良い教訓になるはずです。もしあれば。それは教えるようなものです」レーシングカーのドライバーがオリジナルのフォード モデル T のトランスミッションについて話しました。それは車に関連しています。ただし、そこからどんな教訓が得られたとしても、まったく問題ではありません。
[1]おそらく JDK25 あたり おそらく 可能 - Project Valhalla は、標準の参照型に似たコーディング可能なデータ型を作成する方法を見つけようとしている OpenJDK チームですが、実装と動作はプリミティブに似ており、その一部として List<int>
をモノに変えることができるでしょう。特にこの部分 (int
を j.l.Integer
の単なる値型のバリアントとして扱い、それらの型をジェネリックスで機能させようとする) は、Valhalla プロジェクトがまだ実際には解決していない部分です。そして、それは決して解決されない可能性があります。重大な下位互換性の問題があります。たとえば、j.u.List
インターフェイスに、インデックス int x
のオブジェクトを削除するメソッド remove(int x)
とメソッド remove(Object o)
、このメソッドはリストをスキャンし、リスト内の各オブジェクトを o
と比較します - 一致が見つかると (item.equals(o)
は true)
)、つまり、削除され、 remove
メソッドが戻ります。次の問題に加えて: remove()
、contains()
などは、E
ではなく Object
をパラメータとして受け取ります (指定された梨がリンゴのリストにあるかどうかを尋ねることができます。答えは非常に簡単です: いいえ、しかし、非論理的な質問ではないため、この選択が行われたのです) - ジェネリックとプリミティブを統合しようとするということは、両方の署名が remove(int)
、これは明らかに不可能です。これはまさにヴァルハラの最も厄介な部分であり、それが決して起こらない可能性がある百万の理由のうちの 1 つです。これについて詳しく知りたい場合、または最新情報を知りたい場合は、JEP 218 をチェックしてください。この編集は @M.Justin からのコメントによってもたらされました :)
[2] 「適切」は主観的な用語です。ここでは期待どおりに定義します。コンパイラーからの警告はなく、
も必要ありません。次のように定義することもできます: 配列によって行われた約束を破ることなく - これも不可能です (「約束」とは、配列が実行時に arrRef.getClass().getComponentType( )# を介してそのコンポーネントの型を通知できることです。 ##. 簡単に言えば、これは「私は
ArrayList 参照の配列である -
ArrayList を伝えることはできません。
ArrayList.# だけを伝えます」
ArrayList
ListJava では汎用配列
を作成できませんが、オブジェクトの配列 (この場合は ArrayList) を単純に作成できます。これにより、未チェックまたは安全でない操作
@SuppressWarnings アノテーションを渡すことでこれを回避できます。
以上がJava 整数配列と汎用配列の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。