ホームページ  >  記事  >  Java 整数配列と汎用配列

Java 整数配列と汎用配列

PHPz
PHPz転載
2024-02-09 10:48:221109ブラウズ

Java 整数配列と汎用配列は、Java プログラミングで一般的に使用されるデータ構造です。整数配列は、整数型のデータのみを格納できる特定の種類の配列です。汎用配列は、あらゆる種類のデータを格納できる、より柔軟な配列タイプです。 Java では、整数配列と汎用配列を使用して、並べ替え、検索、挿入、削除、その他の操作などのさまざまな機能を実装できます。この記事では、Java 整数配列と汎用配列の基本概念と一般的な操作を紹介し、読者がこれら 2 つの配列型をより深く理解し、適用できるようにします。

質問の内容

The Princeton Review の「ap Computer Science a prep」の 2022 年版には、次のコードを使用したサンプル質問が含まれています。 リーリー

  1. arraylist が有効な構成要素である Java バージョンはありますか?私の理解では、どのような場合でも arraylist である必要があるということです。 Java 17 および 21 (私のシステムにインストールされているもの) では、arraylistunexpected type エラーが発生します。

  2. これを

    arraylist[] data として定義した場合、正しくインスタンス化するにはどうすればよいでしょうか?明白な解決策は data = new arraylist[10] (配列リストが 10 個必要だと仮定) ですが、Java は汎用配列をサポートしていないため、 汎用配列の作成は失敗します。

この本に間違いがあるのか​​、それとも私の Java に対する理解が完全に欠けているのかを理解しようとしています。ありがとう!

解決策

いいえ。とんでもない。ジェネリックスにはプリミティブ型を含めることはできませんし、それができる Java のバージョンさえありません (

もし だったら一度はできましたが、特にその削除は大したことだと思いませんか? Java はめったに Backward を壊しません)互換性!) ######不可能###。

正しくインスタンス化できません

2。非プリミティブ型の配列を持つことは意味がありません。 List> は、あらゆる点で List[] よりも優れています。したがって、リストのリストを作成するだけです。 カジュアルな Web 検索では、その本の具体的な内容は見つかりませんでした。また、あなたが提供したリンクも見つかりませんでした (間違いなく、見つけるのは難しいです。著作権で保護されており、著者はそれを望まなかったのだと思います)。簡単に支払いにアクセスできます)。私が探している重要なことは、なぜこれが不可能なのか、それは悪い考えなのか、あるいは、あなたが強調している問題が次のようなものであることを示す、その章の文脈です。これがこの本が表現しようとしている点です。

これが本に載っていなくて、それが有効な Java であると主張するか、何らかの関連性があると主張する場合、それはくだらない本です。たぶんそれがオンラインで見つからない理由です:)

###結論は:###

List<int>

を作成することはできません。今はそんなことはできません。あなたにはそれができなかったのです。

1

  1. List[] はバカです。このようなコードは記述すべきではありません。配列にはさまざまな欠点があります。それらの利点はほとんどありません。この場合、それらの利点は無関係です。これが、配列が存在する理由です (部分的には低レベルの「接着剤」として - java.util.ArrayList

    の実装は Java で書かれており、以下を使用します)
  2. Object[]
  3. 内部的に何かが必要です - 部分的には、

    int[] は現在 List よりも空間と時間が非常に小さいため、より効率的です。 「決して書いてはいけない愚かなアイデアなので、それを機能させる方法について詳しく説明した本は...奇妙です。Java のキャリアが 15 年になる人にとって、これは良い教訓になるはずです。もしあれば。それは教えるようなものです」レーシングカーのドライバーがオリジナルのフォード モデル T のトランスミッションについて話しました。それは車に関連しています。ただし、そこからどんな教訓が得られたとしても、まったく問題ではありません。

[1]おそらく JDK25 あたり おそらく 可能 - Project Valhalla は、標準の参照型に似たコーディング可能なデータ型を作成する方法を見つけようとしている OpenJDK チームですが、実装と動作はプリミティブに似ており、その一部として List<int> をモノに変えることができるでしょう。特にこの部分 (intj.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] 「適切」は主観的な用語です。ここでは期待どおりに定義します。コンパイラーからの警告はなく、

@SuppressWarnings

も必要ありません。次のように定義することもできます: 配列によって行われた約束を破ることなく - これも不可能です (「約束」とは、配列が実行時に arrRef.getClass().getComponentType( )# を介してそのコンポーネントの型を通知できることです。 ##. 簡単に言えば、これは「私は ArrayList 参照の配列である - ArrayList を伝えることはできません。ArrayList.# だけを伝えます」

    ##ArrayList<int>
  1. は有効な構造ですか? ###- ###いいえ###。 Java では、ジェネリック型はプリミティブ データ型では機能しません。

    ArrayList[] を正しくインスタンス化するにはどうすればよいでしょうか?

    - これは -
  2. で実現できます
  3. List[] a = 新しい ArrayList[10]; Java では汎用配列 を作成できませんが、オブジェクトの配列 (この場合は ArrayList) を単純に作成できます。これにより、未チェックまたは安全でない操作

    に関する警告が表示されますが、

    @SuppressWarnings アノテーションを渡すことでこれを回避できます。

以上がJava 整数配列と汎用配列の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。