JavaSE入門——Map
記事の目次 Map hashMap hashSetとhashMap どのようにしてhashテーブルにデータを追加しますか? TreeMap Mapの巡回展示 汎型 カスタム汎型 Map
Mapは無秩序に重複することができます。彼はキーとしてentry(key、value)の形式で保存しています。キーは中のvalueに対して重複できます。keyは重複してはいけません。
操作:put(key,value)、データclear()を追加して、空のsize()をクリアして、キーの値を調べて、個数isEmpty()に対して。空getかどうかを判断します。keyによってすべてのvalueを獲得し、集合形式で戻ります。この中は最終的にvalues vaulesです。すべてのvalueを取得し、containsValueを取得し、key containsValueを含むかどうかを判断し、value keySetを取得し、set形式で削除します。
注意: mapの中の操作とセットは似ていますが、両者の本質は違います。 mapは直接的に遍歴することができなくて、 mapはkeyが重複してはいけないので、valueは重複してもいいです。データを追加する場合、同じkey値がある場合、後に追加したこのキーの値を中のvalueに対して前のものを上書きすればいいです。 hashMap
HashMapの一番下の階はハッシュ・テーブルともいう。
ハッシュ表:またハッシュリストと呼ばれ、キーペアを保存するために使われます。元素のhash値によって、hashアルゴリズムによって、元素をリンクに追加することが確定できます。
ハッシュアルゴリズム:一定の長さの値を一定の値に変更すると、その値の一意性が保証されます。
ハッシュアルゴリズムはjavaでhashCode関数を指す。
ターゲット:各オブジェクトに一意の識別子を生成する
hashの目的:迅速さを調べるために、hash値は固定された値で、整数値です。したがって、一定の長さの場合、検索は非常に速いです。
hashSetとhashMap
保存するマッピング関係のkeyオブジェクトを呼び出し、keyオブジェクトのhashCode()方法を呼び出して、hash符号値を生成し、hash値に基づいてhashアルゴリズムでhashを行い、配列の下付きを得て、配列に要素を追加します。配列に対応するhashデータがない場合、配列空間を占有し、このkey-valueのマッピング関係を保存する 。データがある場合は、keyのequalsメソッドを呼び出し、hash値と同じチェーンを一つずつ比較して、trueに戻ると、このkeyがあることを表します。このときkeyは追加されません。falseに戻ると、hash値だけが同じであると説明します。このオブジェクトをチェーンブロックに挿入すると、Hash Setは一つの要素HashMap保存ボタン値だけを保存します。
注意:添加された要素はequals方法とhashCode方法を実現し、equalsは添加するかどうかを比較するために用いられ、hashCodeはhash値を計算するために用いられます。
TreeMap
TreeSetとほぼ同じで、TreeMapもSortedMapの実現クラスであり、TreeMapはコンパレータ類を使って並べ替えられます。
しかし、TreeMapはキーの対中のkeyによってしか並べられません。valueによって並べ替えられません。valueによって並べ替えたいなら、listに変えられます。同理hashMapもlistに変えて並べ替えられますが、彼ら自身はこのような状況で並べ替えられないです。どのように変換したら、次のページに書きますか?
TreeMapソート
前の文もMapに言及して直接的に遍歴することができません。
もちろん、結果を確認したいですが、直接にmapのオブジェクトの名前を印刷できます。彼はコンソールで配列形式で、キーペアのkeyとvalueを接続します。
しかし、foreachで直接印刷したいなら、だめです。
一般型とは、記憶に指定されたタイプの記憶を与えて、指定された記憶しかできません。他の記憶はできません。集合のように、実際には配列と同じで、統一されたデータタイプしか記憶できません。Objectタイプにすぎません。すべての要素は上にシフトします。だから、何でも置けます。注意:汎型は基本データタイプを使用できません。参照データタイプのみ使用できます。
長所:統一タイプ、減少タイプの転換短所:単一タイプの要素しか記憶できません。
もし汎型が規定されていたら、私たちは伝達タイプが使用されていない場合、汎型はobjectです。
T(type)は具体的なJavaタイプK V(key,value)を表し、それぞれJavaキーの中のkey value E(element)はElementを表します。
カスタム
Mapは無秩序に重複することができます。彼はキーとしてentry(key、value)の形式で保存しています。キーは中のvalueに対して重複できます。keyは重複してはいけません。
操作:put(key,value)、データclear()を追加して、空のsize()をクリアして、キーの値を調べて、個数isEmpty()に対して。空getかどうかを判断します。keyによってすべてのvalueを獲得し、集合形式で戻ります。この中は最終的にvalues vaulesです。すべてのvalueを取得し、containsValueを取得し、key containsValueを含むかどうかを判断し、value keySetを取得し、set形式で削除します。
注意:
HashMapの一番下の階はハッシュ・テーブルともいう。
ハッシュ表:またハッシュリストと呼ばれ、キーペアを保存するために使われます。元素のhash値によって、hashアルゴリズムによって、元素をリンクに追加することが確定できます。
ハッシュアルゴリズム:一定の長さの値を一定の値に変更すると、その値の一意性が保証されます。
ハッシュアルゴリズムはjavaでhashCode関数を指す。
ターゲット:各オブジェクトに一意の識別子を生成する
hashの目的:迅速さを調べるために、hash値は固定された値で、整数値です。したがって、一定の長さの場合、検索は非常に速いです。
hashSetとhashMap
HashSet HashMap , value , key。
どのようにhashテーブルにデータを追加しますか?保存するマッピング関係のkeyオブジェクトを呼び出し、keyオブジェクトのhashCode()方法を呼び出して、hash符号値を生成し、hash値に基づいてhashアルゴリズムでhashを行い、配列の下付きを得て、配列に要素を追加します。
注意:添加された要素はequals方法とhashCode方法を実現し、equalsは添加するかどうかを比較するために用いられ、hashCodeはhash値を計算するために用いられます。
TreeMap
TreeSetとほぼ同じで、TreeMapもSortedMapの実現クラスであり、TreeMapはコンパレータ類を使って並べ替えられます。
しかし、TreeMapはキーの対中のkeyによってしか並べられません。valueによって並べ替えられません。valueによって並べ替えたいなら、listに変えられます。同理hashMapもlistに変えて並べ替えられますが、彼ら自身はこのような状況で並べ替えられないです。どのように変換したら、次のページに書きますか?
TreeMapソート
public class Collection_16_SortedMap_02 {
@SuppressWarnings({ "rawtypes", "unchecked" })
public static void main(String[] args) {
SortedMap products = new TreeMap();
Product2 p1 = new Product2("water", 1.3);
Product2 p2 = new Product2("apple", 4.5);
Product2 p3 = new Product2("banner", 3.5);
Product2 p4 = new Product2("coffer", 8.0);
// value
products.put(p1, 1.0);
products.put(p2, 2.0);
products.put(p3, 3.0);
products.put(p4, 4.0);
Set keys = products.keySet();
for (Object key : keys) {
Product2 p = (Product2) key;
double value = (double) products.get(key);
System.out.println(p + "--->" + value + "kg = " + (value * p.price));
}
}
}
@SuppressWarnings("rawtypes")
class Product2 implements Comparable {
String name;
double price;
public Product2(String name, double price) {
super();
this.name = name;
this.price = price;
}
@Override
public String toString() {
return "Product2 [name=" + name + ", price=" + price + "]";
}
@Override
public int compareTo(Object arg0) {
double price1 = this.price;
double price2 = ((Product2) arg0).price;
if (price1 == price2) {
return 0;
} else if (price1 < price2) {
return -1;
} else {
return 1;
}
}
}
Mapの巡回展示前の文もMapに言及して直接的に遍歴することができません。
もちろん、結果を確認したいですが、直接にmapのオブジェクトの名前を印刷できます。彼はコンソールで配列形式で、キーペアのkeyとvalueを接続します。
しかし、foreachで直接印刷したいなら、だめです。
// value
Collection values =map.values();
for (Object object : values) {
System.out.println(object);
}
System.out.println("-------------------");
// map key , set
Set s =map.keySet();
for (Object object : s) {
// ke'y value
System.out.println(object+":"+map.get(object));
}
System.out.println("-------------------");
// map entry , set entry toString , key=value
Set set =map.entrySet();
for (Object object : set) {
System.out.println(object);
}
汎型一般型とは、記憶に指定されたタイプの記憶を与えて、指定された記憶しかできません。他の記憶はできません。集合のように、実際には配列と同じで、統一されたデータタイプしか記憶できません。Objectタイプにすぎません。すべての要素は上にシフトします。だから、何でも置けます。注意:汎型は基本データタイプを使用できません。参照データタイプのみ使用できます。
長所:統一タイプ、減少タイプの転換短所:単一タイプの要素しか記憶できません。
public static void main(String[] args) {
A a =new A();
B b =new B();
C c =new C();
// ,
// Set s=new HashSet();
// s.add(a);
// s.add(b);
// s.add(c);
// for (Object object : s) {
// if (object instanceof A ) {
// A d = (A) object;
// d.m1();
// }else if (object instanceof B) {
// B d = (B) object;
// d.m1();
// }else if(object instanceof C) {
// C d=(C) object;
// d.m1();
// }
// }
List<D> ds =new ArrayList<D>();
ds.add(a);
ds.add(b);
ds.add(c);
for (D d : ds) {
d.m1();
}
}
}
interface D{
public void m1();
}
class A implements D{
@Override
public void m1() {
System.out.println("A m1 ");
}
}
class B implements D{
@Override
public void m1() {
System.out.println("B m1 ");
}
}
class C implements D{
@Override
public void m1() {
System.out.println("C m1 ");
}
ユーザー定義の汎形もし汎型が規定されていたら、私たちは伝達タイプが使用されていない場合、汎型はobjectです。
T(type)は具体的なJavaタイプK V(key,value)を表し、それぞれJavaキーの中のkey value E(element)はElementを表します。
カスタム
List<User> users = new ArrayList<User>();
users.add(new User(12));
users.add(new User(11));
users.add(new User(15));
for (User user : users) {
System.out.println(user.age);
}
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("sad", 2);
}
}
class User {
int age;
public User(int age) {
super();
this.age = age;
}
}