レベル 1: コレクションの基本的な使用法
関連情報
コレクションとは何ですか
JAVA
コレクション:これはコンテナーのようなツール クラスであり、共通の属性を持つ任意の数のコレクションを保存します。
コレクションを使用する理由
コレクションが大量のデータを格納できるコンテナであることはすでに知っていますが、Java を始めたときに配列について知りました。配列も大量のデータを格納できるコンテナです。日々の開発に必要な機能があるのに、なぜコレクションを使用するのでしょうか? ?
以前に学習した配列が犬を殴る棒であるならば、これから学習するセットは希望に満ちた黄金の棍棒とみなすことができます。
コレクションと配列には次のような違いがあります。
-
配列の長さは固定されていますが、コレクションの長さは可変です。
-
配列は添字を介してのみ要素にアクセスでき、型は固定されていますが、一部のコレクションは任意の型でマップされた特定のオブジェクトを検索できます。
コレクションの作成方法
単純なコレクションを作成してみましょう。
1. ガイドパッケージ
import java.util.ArrayList;
2. コレクションを作成する
ArrayList list = new ArrayList();
コレクションにデータを追加する方法
list.add("hello");
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
添字です。例えば:
ArrayList list = new ArrayList();
list.add("张无忌");
list.add(18);
String name = (String)list.get(0);
int age = (int)list.get(1);
System.out.println("姓名:" + name + " 年龄:" + age);
出力:
姓名:张无忌 年龄:18
ここで次のような質問があるかもしれません。
String name = (String)list.get(0);
収集メソッドを使用してget()
データを取得した後、(String)
データ型を強制する必要があるのはなぜですか?
これは、 collection を定義するときにデータ型を指定しなかったためです。そのため、コレクション内の要素は任意の型のオブジェクト( Object
) にすることができます。オブジェクトがコレクションに入れられた場合、その型は無視され、オブジェクトとして扱われますObject
。クラスとして。
このようにして、コレクションからデータを取得すると、デフォルトで型とみなされます。そのため、Object
使用するときに強制的に対応する型にする必要があります。
コレクション内のデータを変更する
メソッドを使用してset(index, element)
、コレクション内のデータを変更します。最初のパラメータはインデックス、つまり、コレクションの変更される位置の要素を表します。最初から、2 番目のパラメータは変更されるindex
データ0
ですelement
。
例えば:
ArrayList list = new ArrayList();
list.add("张无忌");
list.add(18);
String name = (String)list.get(0);
int age = (int)list.get(1);
System.out.println("姓名:" + name + " 年龄:" + age);
list.set(0,"张三丰"); //修改集合的第一个元素
name = (String)list.get(0);
System.out.println("姓名:" + name + " 年龄:" + age);
出力:
姓名:张无忌 年龄:18
姓名:张三丰 年龄:18
コレクションからデータを削除する
要素を削除するには、remove(index)
orメソッドを使用します。このメソッドはオーバーロードされたメソッドです。最初のメソッドはインデックス位置に従って要素を削除でき、2 番目のメソッドは要素の参照に従ってコレクション内の対応する要素を削除できます。remove(element)
remove
次のように:
ArrayList list = new ArrayList();
list.add("张无忌");
list.add(18);
//List集合的toString可以输出数组中所有的数据
System.out.println(list.toString());
Object obj1 = list.get(0);
list.remove(obj1); //根据元素的引用删除元素
System.out.println(list.toString());
list.remove(0); //根据索引删除元素
System.out.println(list.toString());
出力:
[张无忌, 18]
[18]
[]
質問について考えてください:
ArrayList list = new ArrayList();
list.add("张无忌");
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 つの主要なメンバーがあります: List
、Queue
、Set
、これら 3 つのメンバーにはそれぞれ 3 つのサブカテゴリがあります (実際にはたくさんありますが、ここにはリストされていません)、このファミリーには 、 、 がありArrayList
ますLinkedList
。HashSet
a 特徴は、すべて単一であり、コレクション内の要素が独立して存在していることです。
もう一つはMap
家族です。この家族の特徴は、全員がペア (key
と) で一緒にvalue
登場することで、Collection
とてもうらやましいです^_^。
共通コレクションの使用方法
LinkedList
コレクションを作成してデータを追加する
LinkedList list = new LinkedList();
list.add("hello");
HashSet
コレクションを作成してデータを追加する
HashSet set = new HashSet();
set.add("hello");
HashMap
コレクションを作成してデータを追加する
HashMap map = new HashMap();
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
その方が良いと思います。LinkedList
LinkedList
インタビュアー: さて、今回はテストに合格しました。次の通知をお待ちください。
私:......
プログラミング要件
右側のコードを注意深く読み、メソッドのプロンプトに従ってBegin - End
その領域のコードを補足してください。具体的なタスクは次のとおりです。
HashSet
、ArrayList
、LinkedList
、 のセットをそれぞれ定義しますHashMap
。そして、各コレクションに を追加しwww.educoder.net
、Map
コレクションの設定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>
を指定します。List
String
次に、ジェネリックを使用した場合と使用しない場合の違いを比較評価してみましょう。
ジェネリックスを使用しない場合:
List list1 = new ArrayList();
list1.add("www.educoder.net");
String str1 = (String)list1.get(0);
ジェネリックを使用します。
List<String> list2 = new ArrayList<String>();
list2.add("www.educoder.net");
String str2 = list.get(0); //可以发现在这里我们不用强转数据类型了
もちろん、ジェネリックにはそのような用途だけではありません。ジェネリックは開発のあらゆる場所で見ることができ、後続の章で詳しく学びます。
なぜジェネリックを使用する必要があるのか、またジェネリックを使用するメリットは何なのかという疑問があるかもしれません。回答:メリットは次のとおりです。
-
型安全性。ジェネリックスを使用して定義された変数の型制約を知ることで、コンパイラーは Java プログラムの型安全性をより効果的に向上できます。
-
キャストを削除し、ソース コード内の多くのキャストを削除します。これにより、コードが読みやすくなり、エラーの可能性が減ります。すべてのキャストは自動的かつ暗黙的に行われます。
-
性能を上げる。
プログラミング要件
右側のコードを注意深く読み、メソッドのプロンプトに従って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 つあります。
-
Map
マッピング関係を提供します。要素はkey-value
キーと値のペア ( ) の形式で保存され、key
迅速に検索できますvalue
。 -
キー (
key
) 値は繰り返すことができませんが、値 (value
) は可能であり、を通じてkey
検索できますvalue
。 -
Map
次のようなジェネリックがサポートされていますMap<K,V>
。
マップコレクションの操作方法
1. データを定義して追加します。
Map
コレクションはジェネリックスをサポートしているため、通常、式を定義するときにジェネリックスを使用します: Map<K,V>
、K
および任意のオブジェクトV
として指定できます。注意: ジェネリックスはクラスを指します。つまり、ジェネリックスはオブジェクトのみを指し、基本データ型は指定できません。K
V
2. データの削除、変更、取得:
Map<String,String> map = new HashMap<String,String>();
map.put("name","张三");
map.put("sex","男");
System.out.println("姓名:" + map.get("name") + "性别:" + map.get("sex"));
//修改数据 使用 map.put(key) 方法
map.put("name","李四");//因为key不能重复,所以修改数据和添加数据使用的同一个方法
System.out.println("姓名:" + map.get("name") + "性别:" + map.get("sex"));
//删除数据 使用 map.remove(key)方法
map.remove("name");
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: 多肢選択問題