Educoder/Touge JAVA——JAVAの高度な機能: 収集フレームワーク (1)

レベル 1: コレクションの基本的な使用法

関連情報

コレクションとは何ですか

JAVAコレクション:これはコンテナーのようなツール クラスであり、共通の属性を持つ任意の数のコレクションを保存します。

コレクションを使用する理由

コレクションが大量のデータを格納できるコンテナであることはすでに知っていますが、Java を始めたときに配列について知りました。配列も大量のデータを格納できるコンテナです日々の開発に必要な機能があるのに、なぜコレクションを使用するのでしょうか? ?

以前に学習した配列が犬を殴る棒であるならば、これから学習するセットは希望に満ちた黄金の棍棒とみなすことができます。

コレクションと配列には次のような違いがあります。

  • 配列の長さは固定されていますが、コレクションの長さは可変です。

  • 配列は添字を介してのみ要素にアクセスでき、型は固定されていますが、一部のコレクションは任意の型でマップされた特定のオブジェクトを検索できます。

コレクションの作成方法

単純なコレクションを作成してみましょう。

1. ガイドパッケージ

  1. import java.util.ArrayList;

2. コレクションを作成する

  1. ArrayList list = new ArrayList();

コレクションにデータを追加する方法

  1. list.add("hello");
  2. list.add(2018);

プログラミング要件

右側のコードを注意深く読み、メソッドのプロンプトに従ってBegin - Endその領域のコードを補足し、ArrayListコレクションを作成してコレクションにデータを追加してください。具体的な要件は次のとおりです。

  • 文字列型データを追加します: https:www.educoder.net;

  • double 型のデータを追加します: 2018.423;

  • メソッドで作成したコレクション オブジェクトを返します。

package step1;
// 导包
/********** Begin **********/
import java.util.ArrayList;
/********** End **********/					
public class HelloWorld {    
	@SuppressWarnings("unchecked") 
	public ArrayList getList() {
		/********** Begin **********/
		ArrayList list = new ArrayList();
        list.add("https:www.educoder.net");
        list.add(2018.423);
		return list;		
		/********** End **********/
	}	
}

 レベル 2: ArrayList コレクションの追加、削除、変更、およびクエリ

関連情報

コレクション内のデータを取得する

get(index)コレクション内のデータを取得するために使用します。これは配列と同じであり、 0 から始まるindex添字です例えば:

  1. ArrayList list = new ArrayList();
  2. list.add("张无忌");
  3. list.add(18);
  4. String name = (String)list.get(0);
  5. int age = (int)list.get(1);
  6. System.out.println("姓名:" + name + " 年龄:" + age);

出力:

姓名:张无忌 年龄:18

ここで次のような質問があるかもしれません。

  1. String name = (String)list.get(0);

収集メソッドを使用してget()データを取得した後、(String)データ型を強制する必要があるのはなぜですか?

これは、 collection を定義するときにデータ型を指定しなかったためです。そのため、コレクション内の要素は任意の型のオブジェクト( Object) にすることができます。オブジェクトがコレクションに入れられた場合、その型は無視され、オブジェクトとして扱われますObject。クラスとして。

このようにして、コレクションからデータを取得すると、デフォルトで型とみなされます。そのため、Object使用するときに強制的に対応する型にする必要があります。

コレクション内のデータを変更する

メソッドを使用してset(index, element)、コレクション内のデータを変更します。最初のパラメータはインデックス、つまり、コレクションの変更される位置の要素を表します。最初から、2 番目のパラメータは変更されるindexデータ0ですelement

例えば:

  1. ArrayList list = new ArrayList();
  2. list.add("张无忌");
  3. list.add(18);
  4. String name = (String)list.get(0);
  5. int age = (int)list.get(1);
  6. System.out.println("姓名:" + name + " 年龄:" + age);
  7. list.set(0,"张三丰"); //修改集合的第一个元素
  8. name = (String)list.get(0);
  9. System.out.println("姓名:" + name + " 年龄:" + age);

出力:

姓名:张无忌 年龄:18 姓名:张三丰 年龄:18

コレクションからデータを削除する

要素を削除するには、remove(index)orメソッドを使用します。このメソッドはオーバーロードされたメソッドです。最初のメソッドはインデックス位置に従って要素を削除でき、2 番目のメソッドは要素の参照に従ってコレクション内の対応する要素を削除できます。remove(element)remove

次のように:

  1. ArrayList list = new ArrayList();
  2. list.add("张无忌");
  3. list.add(18);
  4. //List集合的toString可以输出数组中所有的数据
  5. System.out.println(list.toString());
  6. Object obj1 = list.get(0);
  7. list.remove(obj1); //根据元素的引用删除元素
  8. System.out.println(list.toString());
  9. list.remove(0); //根据索引删除元素
  10. System.out.println(list.toString());

出力:

[张无忌, 18] [18] []

質問について考えてください:

  1. ArrayList list = new ArrayList();
  2. list.add("张无忌");
  3. list.add(18);

上記のコードの場合、すべての要素を削除するには、remove(0)remove(0)remove(0)、を使用する必要がありますremove(1)か?

プログラミング要件

右側のコードを注意深く読み、メソッドのプロンプトに従ってBegin - Endその領域のコードを補足してください。具体的なタスクは次のとおりです。

  • コレクションの最初と最後の要素を削除します。

  • 2 つの文字列: をhelloコレクションeducoderに追加します。

  • コレクションの 3 番目の要素を次のように変更しますlist

  • コレクション内のすべての要素を出力します。

package step2;

import java.util.ArrayList;
import java.util.Scanner;

public class HelloWorld {
	
    @SuppressWarnings("unchecked")
	public static void main(String[] args) {
		//获取输入的数据并添加至集合
		Scanner sc = new Scanner(System.in);
		ArrayList list = new ArrayList<>();
        int length = sc.nextInt();
		for(int i =0 ; i< length; i++){
			list.add(sc.next());
		}
		/********** Begin *********/
        int len=list.size();
        len--;
        list.remove(len);
        list.remove(0);
        list.add("hello");
        list.add("educoder");
        list.set(2,"list");// 修改第三个元素为 list
        for(int i=0;i<=len;i++){
            String inf = (String)list.get(i);
            System.out.println(inf);
        }        
		/********** End **********/
	}
}

パス 3: コレクションのアーキテクチャ

関連情報

コレクションのアーキテクチャ

Javaセットは 2 つのファミリーに分かれています。1 つはCollectionファミリーです。Collectionファミリーには 3 つの主要なメンバーがあります: ListQueueSet、これら 3 つのメンバーにはそれぞれ 3 つのサブカテゴリがあります (実際にはたくさんありますが、ここにはリストされていません)、このファミリーには 、 、 がありArrayListますLinkedListHashSeta 特徴は、すべて単一であり、コレクション内の要素が独立して存在していることです。

もう一つはMap家族です。この家族の特徴は、全員がペア (keyと) で一緒にvalue登場することで、Collectionとてもうらやましいです^_^。

共通コレクションの使用方法

LinkedListコレクションを作成してデータを追加する

  1. LinkedList list = new LinkedList();
  2. list.add("hello");

HashSetコレクションを作成してデータを追加する

  1. HashSet set = new HashSet();
  2. set.add("hello");

HashMapコレクションを作成してデータを追加する

  1. HashMap map = new HashMap();
  2. map.put("name","张三");

上記は、インスタンスの作成とデータの追加によく使用されるいくつかのコレクションを作成する方法です。使用するメソッドはすべて、LinkedListサブクラスオブジェクトを指す親クラスの参照であることがわかります。これについては馴染みがないと思います。ポリモーフィズムについて学習しています。前述したように、この方法によりプログラムのスケーラビリティが大幅に向上します。

Map上記のコードから、コレクションにデータを追加する方法がCollectionファミリー メンバーの方法とは異なることがわかります。Mapコレクションには 2 つのデータ (1 つは 、もう 1 つは ) が追加される必要がありKeyますValue

インタビュアー

Duang Duang Duang面接官が来ました、座ってポーズをとってください。

さて、質問を始めます: Q:SetコレクションとListコレクションの違いは何ですか? 回答:Setコレクション内のデータは繰り返すことができず、データには順序がListありません。コレクション内のデータは繰り返すことができ、データには順序があります。

質問:なくなったのですか?[真顔]回答:ああ、それと、Set検索効率は低いですが、削除と挿入の効率は高いです。挿入や削除によって要素の位置が変わることはありません。配列と同様に、動的に拡張することができ、自動的に拡張することもできますList実際に保存されているデータの長さに応じてList要素の検索効率は高くなりますが、挿入や削除の効率は他の要素の位置が変わるため低くなります。

Q:Mapコレクション内の要素を繰り返すことはできますか? 答え:いいえ!

Q:LinkedListとの違いを教えてくださいArrayList回答:LinkedListコレクションの追加と削除が高速になり、ArrayListクエリも高速になります。

Q:咳咳咳、次は!答え:おいおい、まだ終わってないよ:

  • ArrayList動的配列に基づくデータ構造とLinkedListリンクリストに基づくデータ構造を実現します。LinkedListは二重リンクリストです。
  • ランダムアクセスgetや の場合はsetポインタを移動する必要があるので、ArrayListその方が良いと思います。LinkedListLinkedList

インタビュアー: さて、今回はテストに合格しました。次の通知をお待ちください。

私:......

プログラミング要件

右側のコードを注意深く読み、メソッドのプロンプトに従ってBegin - Endその領域のコードを補足してください。具体的なタスクは次のとおりです。

  • HashSetArrayListLinkedList、 のセットをそれぞれ定義しますHashMapそして、各コレクションに を追加しwww.educoder.netMapコレクションの設定keyは でありaddress、最後に各コレクションを返します。
package step3;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;

public class HelloWorld {
	
	public HashSet getHashSet(){
		/********** Begin **********/
        HashSet set = new HashSet();
        set.add("www.educoder.net");
        return set;
		/********** End **********/
	}	
	public ArrayList getArrayList(){
		/********** Begin **********/
        ArrayList arr = new ArrayList();
        arr.add("www.educoder.net");
		//System.out.println((String)arr.get(0));  //报错
        return arr;	
		/********** End **********/
	}	
	public LinkedList getLinkedList(){
		/********** Begin **********/
        LinkedList list = new LinkedList();
        list.add("www.educoder.net");
        return list;		
		/********** End **********/
	}	
	public Map getHashMap(){
		/********** Begin **********/
        HashMap map = new HashMap();
        map.put("address","www.educoder.net");
        return map;
		/********** End **********/
	}		
}

レベル 4: ジェネリック

関連情報

ジェネリックとは何ですか

ジェネリックとは何ですか? 簡単に言えば、ジェネリックは次のように理解できます:型パラメーターでは、型パラメーターとは何でしょうか?

メソッドでvoid hello(String name)文字列型のパラメーターが指定されている場合、メソッドの呼び出し元はメソッドを正しく使用するためにその型のパラメーターのみを使用できString、それ以外の場合はエラーが報告されることがわかっています。ジェネリック コレクションで使用されます。つまり、指定されたコレクションには 1 種類の要素のみを配置できます

ATM機械にお金を預けたい場合は、毛おじいちゃんのコインのみを入れることができますが、明のコインは入れることができません。これは汎用タイプであり、 1 つのタイプのみを指定できます

ジェネリックの使い方

ジェネリックは、次のように、山括弧のペアを使用して定義されます。その型のデータのみをコレクションに配置できることList<String>を指定します。ListString

次に、ジェネリックを使用した場合と使用しない場合の違いを比較評価してみましょう。

ジェネリックスを使用しない場合:

  1. List list1 = new ArrayList();
  2. list1.add("www.educoder.net");
  3. String str1 = (String)list1.get(0);

ジェネリックを使用します。

  1. List<String> list2 = new ArrayList<String>();
  2. list2.add("www.educoder.net");
  3. String str2 = list.get(0); //可以发现在这里我们不用强转数据类型了

もちろん、ジェネリックにはそのような用途だけではありません。ジェネリックは開発のあらゆる場所で見ることができ、後続の章で詳しく学びます。

なぜジェネリックを使用する必要があるのか​​、またジェネリックを使用するメリットは何なのかという疑問があるかもしれません。回答:メリットは次のとおりです。

  1. 型安全性。ジェネリックスを使用して定義された変数の型制約を知ることで、コンパイラーは Java プログラムの型安全性をより効果的に向上できます。

  2. キャストを削除し、ソース コード内の多くのキャストを削除します。これにより、コードが読みやすくなり、エラーの可能性が減ります。すべてのキャストは自動的かつ暗黙的に行われます。

  3. 性能を上げる。

プログラミング要件

右側のコードを注意深く読み、メソッドのプロンプトに従ってBegin - Endその領域のコードを補足してください。具体的なタスクは次のとおりです。

  • String型データのみを格納できるコレクションを作成しますList

  • プログラムによって入力されたデータをListコレクションに保存します。

  • コレクション内のすべてのデータを出力します。

ヒント:list.size()このメソッドはコレクションの長さを取得できます。

package step4;

import java.util.*;

public class HelloWorld {
		
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		//程序会输入三次数据
		/********** Begin **********/
        List<String> list = new ArrayList<String>();
        for(int i=0;i<3;i++){
            list.add(sc.next());
            int j = list.size();
            System.out.println("集合的第"+j+"个数据为:"+list.get(i));
        }		
		/********** End **********/
	}	
}

レベル 5: マップ コレクションの追加、削除、変更、およびクエリ

関連情報

マップコレクションの特徴

覚えておく必要があることが 3 つあります。

  1. Mapマッピング関係を提供します。要素はkey-valueキーと値のペア ( ) の形式で保存され、key迅速に検索できますvalue

  2. キー ( key) 値は繰り返すことができませんが、値 ( value) は可能であり、を通じてkey検索できますvalue

  3. Map次のようなジェネリックがサポートされていますMap<K,V>

マップコレクションの操作方法

1. データを定義して追加します。

Mapコレクションはジェネリックスをサポートしているため、通常、式を定義するときにジェネリックスを使用します: Map<K,V>Kおよび任意のオブジェクトVとして指定できます。注意: ジェネリックスはクラスを指します。つまり、ジェネリックスはオブジェクトのみを指し、基本データ型は指定できませKV

2. データの削除、変更、取得:

  1. Map<String,String> map = new HashMap<String,String>();
  2. map.put("name","张三");
  3. map.put("sex","男");
  4. System.out.println("姓名:" + map.get("name") + "性别:" + map.get("sex"));
  5. //修改数据 使用 map.put(key) 方法
  6. map.put("name","李四");//因为key不能重复,所以修改数据和添加数据使用的同一个方法
  7. System.out.println("姓名:" + map.get("name") + "性别:" + map.get("sex"));
  8. //删除数据 使用 map.remove(key)方法
  9. map.remove("name");
  10. System.out.println(map.toString());//map.toString方法可以直接输出map集合中的数据

出力結果:

姓名:张三性别:男 姓名:李四性别:男 {sex=男}

プログラミング要件

右側のコードを注意深く読み、メソッドのプロンプトに従ってBegin - Endその領域のコードを補足してください。具体的なタスクは次のとおりです。

  • menuDict料理名をコレクションに追加するとlamb、価格は50;

  • menuDictコレクション内の価格を取得しfishて印刷します。

  • menuDictコレクション内のfish価格を100;に変更します。

  • menuDictこの料理をコレクションから削除しますnoodles

  • 新しいmenuDictメニューを出力します。

package step5;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class HelloWorld {

	public static void main(String[] args) {
		Map<String, Integer> menuDict = new HashMap<>();
		Scanner sc = new Scanner(System.in);
		for (int i = 0; i < 5; i++) {
			menuDict.put(sc.next(),sc.nextInt());
		}
		/********** Begin **********/
        menuDict.put("lamb",50);
        System.out.println(menuDict.get("fish"));
        menuDict.put("fish",100);
		menuDict.remove("noodles");
		System.out.println(menuDict.toString());		
		/********** End **********/
	}	
}

 レベル 6: 多肢選択問題

​​​​​​​

おすすめ

転載: blog.csdn.net/zhou2622/article/details/128376900