java.util.Collection インターフェース
はコレクションの共通メソッドを定義するコレクションのトップレベルのインターフェースです。
このインターフェースはオブジェクトを直接作成できません。
Collection coll = new ArrayList();
Iterator
コレクションへのデータの格納方法(データ型)と削除方法が異なります。コレクション内の要素も異なります。java は、イテレーターと呼ばれる要素を抽出するパブリックな方法を提供します
イテレーターを記述するインターフェイス: java.util.Iterator
インターフェイスの抽象メソッド:
boolean hasNext()反復可能な静止要素の場合は true を返します。 コレクションに要素があるかどうかを判断し、要素がない場合は true を返し、ない場合は false を返します
E next() 反復の次の要素を返します。 コレクション内の次の要素を取り出します
イテレータはインターフェースです。イテレータの実装クラスは各コレクションの内部クラスです
Collection インターフェースには次のメソッドがあります。 iterator メソッドは反復を返します。 Iterator
Iterator
ArrayList コレクションは Collection インターフェースを実装し、イテレーター メソッドをオーバーライドします。
メソッドの戻り値は、イテレーターの実装クラスを返すことだけを知っておく必要があります。この方法はインターフェイス指向プログラミングと呼ばれます
1. コレクション オブジェクトを作成し、コレクションに要素を追加します 2. を使用します。コレクション内の iterator メソッドを使用してイテレータを取得します。 実装クラス オブジェクトは、Iterator インターフェイスを使用して (ポリモーフィックに) 受け取ります 3. イテレータ内の hasNext メソッドと next メソッドを使用して、コレクション内の要素を反復処理して取り出します 1 public static void main(String[] args) { 2 //1.创建集合对象,往集合中添加元素 3 //Collection<string> coll = new ArrayList<string>(); 4 Collection<string> coll = new HashSet<string>(); 5 coll.add("姚明"); 6 coll.add("乔丹"); 7 coll.add("詹姆斯"); 8 coll.add("科比"); 9 coll.add("艾弗森");10 //2.使用集合中的方法iterator获取迭代器的实现类对象,使用Iterator接口接收(多态)11 //集合中的数据类型是什么,迭代器的数据类型就是什么,跟着集合走12 Iterator<string> it = coll.iterator();13 //3.使用iterator中的方法hasNext和next方法进行迭代,取出集合中的元素14 //boolean hasNext() 如果仍有元素可以迭代,则返回 true。15 /*boolean b = it.hasNext();16 System.out.println(b);17 //E(String) next() 返回迭代的下一个元素。18 String s = it.next();19 System.out.println(s);20 21 b = it.hasNext();22 System.out.println(b);23 s = it.next();24 System.out.println(s);25 26 b = it.hasNext();27 System.out.println(b);28 s = it.next();29 System.out.println(s);30 31 b = it.hasNext();32 System.out.println(b);33 s = it.next();34 System.out.println(s);35 36 b = it.hasNext();37 System.out.println(b);38 s = it.next();39 System.out.println(s);40 41 b = it.hasNext();42 System.out.println(b);//false,没有元素了43 s = it.next();//没有元素了,在取就报NoSuchElementException没有元素异常44 System.out.println(s);*/45 46 /*47 * 发现以上迭代的过程是一个重复的过程,可以使用循环优化48 * 我们不知道集合中有多少元素,所以可以使用while循环49 * while循环的结束条件:hasNext();返回false50 */51 while(it.hasNext()){52 String s = it.next();53 System.out.println(s);54 }55 System.out.println("-------------------");56 /*57 * for循环方式迭代器,使用不多58 */59 /*for(Iterator<string> it2 = coll.iterator();it2.hasNext();){60 String s = it2.next();//取出元素,移动指针到下一位61 System.out.println(s);62 }*/63 }</string></string></string></string></string></string>
走査プロセス中に、コレクションの長さが変更されますが、反復子はそれを認識せず、 ConcurrentModificationException が発生します
解決策:
1. Iteration は Iterate です。コレクションを変更しないでください
2. Iterator のサブインターフェイス ListIterator で add/remove メソッドを使用して、反復子自体が要素に要素を追加/削除できるようにしますコレクションから このようにして、反復子自体がコレクション内の変更を認識します。同時変更例外は発生しません。
void add(E e) 指定された要素をリストに挿入します (オプションの操作)。
void Remove() next またはPrevious によって返された最後の要素をリストから削除します (オプションの操作)。
1 public static void main(String[] args) { 2 ArrayList<string> list = new ArrayList<string>(); 3 4 list.add(null); 5 list.add("abc1"); 6 list.add("abc2"); 7 list.add("abc3"); 8 list.add("abc4"); 9 10 /*11 * 使用迭代器遍历集合12 */13 //获取迭代器14 Iterator<string> it = list.iterator();15 //使用while遍历集合16 while(it.hasNext()){17 String s = it.next();18 19 /*20 * 判断集合中有没有"abc3"这个元素21 * 如果有,增加一个元素"itcast"22 * 编程技巧:使用equals判断的时候,要把已知的变量写在前边,未知的写在后边,防止空指针异常23 */24 //if(s.equals("abc3")){25 if("abc3".equals(s)){26 //1.迭代就是迭代,不要对集合进行修改27 //list.add("itcast");28 }29 30 System.out.println(s);31 }32 33 System.out.println("------------------");34 35 /*36 * 2.使用迭代器Iterator的子接口ListIterator中的方法add/remove,让迭代器自己增加往集合中增加元素/移除元素37 */38 ListIterator<string> listIt = list.listIterator();39 while(listIt.hasNext()){40 String s = listIt.next();41 if("abc3".equals(s)){42 listIt.add("itcast");43 }44 System.out.println(s);45 }46 System.out.println(list);47 }</string></string></string></string>
Collection インターフェースは Iterable を継承するため、Collection インターフェースのすべての実装クラスは拡張 for を使用できます
注: 拡張 forはJDK1.5以降に登場した
形式です:
for (データ型(コレクション/配列のデータ型) 変数名:コレクション名/配列名) {
syso (変数名); }
ジェネリックスJava の
Java のジェネリックは擬似ジェネリックです: コンパイル時 (.java でコードを書く)、実行時 (.class) いいえ 乱数: 擬似乱数
ジェネリックの利点:
1. 強制転送を回避し、要素固有のメソッドを直接使用できます
2. 実行時例外をコンパイル時例外 (コンパイル失敗) に変換します ジェネリックを使用してクラスを定義します
ArrayList を模倣しますcollection
public class ArrayList
E: 不明なデータ型です。おそらく Integer、おそらく String、おそらく Person
クラス オブジェクトを作成するときにデータ型を決定します
定義形式:
修飾子クラス クラス名
} 1 public class GenericClass<e> { 2 private E name; 3 4 public E getName() { 5 return name; 6 } 7 8 public void setName(E name) { 9 this.name = name;10 }11 12 public void method(E e){13 System.out.println(e);14 }</e>
修飾子インターフェースインターフェース名1 public interface GenericInterface<e> {2 public abstract void method(E e);3 }</e>
rrreええ
定義形式: 修飾子内で、修飾子 戻り値の型 メソッド名 (パラメータ
メソッドのジェネリックス データ型、渡されるデータの型、およびジェネリックの型を決定します (何も関係ありません)クラスのジェネリックスを使用してください)
1 /* 2 * 1.定义接口的实现类,不管泛型,接口泛型是怎么写的,实现类也怎么写 3 * public class ArrayList<e> implements List<e>{} 4 * 创建实现类对象的时候确定泛型的数据类型 5 */ 6 class GenericInterfaceImpl1<e> implements GenericInterface<e>{ 7 8 @Override 9 public void method(E e) {10 System.out.println(e);11 }12 }</e></e></e></e>
泛型的通配符:?,代表任意的数据类型
上限限定:? extends E代表只要是E类型的子类即可
下限限定:? super E代表只要是E类型的父类即可
ArrayList集合的构造方法
ArrayList(Collection extends E> c)
参数是一个集合,集合的数据类型有要求,只能是ArrayList泛型的子类或者是本身
ArrayList(Collection extends E> c)
参数是一个集合,集合的数据类型有要求,只能是ArrayList泛型的子类或者是本身
1 /* 2 * 斗地主案例: 3 * 1.准备牌 4 * 2.洗牌 5 * 3.发牌 6 * 4.看牌 7 */ 8 public class DouDiZhu { 9 public static void main(String[] args) {10 //1.准备牌11 //创建存储54张牌的集合12 ArrayList<string> poker = new ArrayList<string>();13 //存储大王小王14 poker.add("大王");15 poker.add("小王");16 //存储52张牌17 //创建序号的数组18 String[] numbers = {"2","A","K","Q","J","10","9","8","7","6","5","4","3"};19 //创建花色数组20 String[] colors = {"?","?","?","?"};21 //嵌套遍历两个数组22 for (String number : numbers) {23 for (String color : colors) {24 //System.out.println(color+number);25 //把组合的牌放入到集合中26 poker.add(color+number);27 }28 }29 //System.out.println(poker);30 31 /*32 * 2.洗牌33 * 使用Collections中的方法34 * static void shuffle(List> list) 35 */36 Collections.shuffle(poker);37 //System.out.println(poker);38 39 /*40 * 3.发牌41 * 创建4个集合42 * 遍历poker集合43 * 使用poker集合的索引%3发牌44 */45 ArrayList<string> player01 = new ArrayList<string>();46 ArrayList<string> player02 = new ArrayList<string>();47 ArrayList<string> player03 = new ArrayList<string>();48 ArrayList<string> diPai = new ArrayList<string>();49 //遍历poker集合50 for (int i = 0; i =51){55 //给底牌发牌56 diPai.add(s);57 }else if(i%3==0){58 //给玩家1发牌59 player01.add(s);60 }else if(i%3==1){61 //给玩家1发牌62 player02.add(s);63 }else if(i%3==2){64 //给玩家1发牌65 player03.add(s);66 }67 }68 //4.看牌69 System.out.println("刘德华:"+player01);70 System.out.println("周润发:"+player02);71 System.out.println("周星驰:"+player03);72 System.out.println("底牌:"+diPai);73 }74 }</string></string></string></string></string></string></string></string></string></string>
以上がイテレータ、拡張された、一般的な使用法のコレクションの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

bytecodeachievesplatformedentencedexedectedbyavirtualMachine(VM)、forexApplev.forexample、javabytecodecanrunrunrunnonydevicewithajvm、writeonce、runany "ferfuctionality.whilebytecodeOffersenhの可能性を承認します

Javaは100%のプラットフォームの独立性を達成することはできませんが、そのプラットフォームの独立性はJVMとBytecodeを通じて実装され、コードが異なるプラットフォームで実行されるようにします。具体的な実装には、次のものが含まれます。1。bytecodeへのコンパイル。 2。JVMの解釈と実行。 3。標準ライブラリの一貫性。ただし、JVMの実装の違い、オペレーティングシステムとハードウェアの違い、およびサードパーティライブラリの互換性は、プラットフォームの独立性に影響を与える可能性があります。

Javaは、「Write onse、Averywhere」を通じてプラットフォームの独立性を実現し、コードの保守性を向上させます。 2。メンテナンスコストが低いため、1つの変更のみが必要です。 3.チームのコラボレーション効率が高く、知識共有に便利です。

新しいプラットフォームでJVMを作成することに直面する主な課題には、ハードウェアの互換性、オペレーティングシステムの互換性、パフォーマンスの最適化が含まれます。 1。ハードウェア互換性:JVMがRISC-Vなどの新しいプラットフォームのプロセッサ命令セットを正しく使用できるようにする必要があります。 2。オペレーティングシステムの互換性:JVMは、Linuxなどの新しいプラットフォームのシステムAPIを正しく呼び出す必要があります。 3。パフォーマンスの最適化:パフォーマンステストとチューニングが必要であり、ガベージコレクション戦略が新しいプラットフォームのメモリ特性に適応するように調整されます。

javafxefcectivelyaddressessessistencisingisingidevidementsyusaplatform-agnosticscenegraphandcssstyling.1)itabstractsplatformspificsthroughascenegraph、Assuring-sunsinstentrenderingacrosswindows、macos、andlinux.2)

JVMは、Javaコードをマシンコードに変換し、リソースを管理することで機能します。 1)クラスの読み込み:.classファイルをメモリにロードします。 2)ランタイムデータ領域:メモリ領域を管理します。 3)実行エンジン:実行バイトコードを解釈またはコンパイルします。 4)ローカルメソッドインターフェイス:JNIを介してオペレーティングシステムと対話します。

JVMにより、Javaはプラットフォームを介して実行できます。 1)jvmは、bytecodeをロード、検証、実行します。 2)JVMの作業には、クラスの読み込み、バイトコード検証、解釈の実行、およびメモリ管理が含まれます。 3)JVMは、動的クラスの読み込みや反射などの高度な機能をサポートしています。

Javaアプリケーションは、次の手順を通じて異なるオペレーティングシステムで実行できます。1)ファイルまたはパスクラスを使用してファイルパスを処理します。 2)System.getEnv()を介して環境変数を設定および取得します。 3)MavenまたはGradleを使用して、依存関係を管理し、テストします。 Javaのクロスプラットフォーム機能は、JVMの抽象化レイヤーに依存していますが、特定のオペレーティングシステム固有の機能の手動処理が必要です。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

ホットトピック









