集合3-MAP集合
——LGMですHakkaさん、よろしくお願いします.
Mapコレクション
1、特徴
A.内部にはキーキーと値valueのペアが格納されています.
B.キーは一意で、値は一意でなくてもよい
C.キーが同じであれば、値は上書きされます.
D.putメソッドは前回の値を返します.前回値がなかった場合はnullを返します.
E.キーが存在しない場合nullを返し、この方法でキーが存在するか否かを判断する.
F.すべての鍵は単列集合で取得でき,map集合中の鍵は一意性を保証するため,Map集合の鍵はSet集合で受信できる.
G.すべての値はCollectionで取得できます.値は必ずしも一意ではないからです.
H. Set entrySet();マップセット内のマッピング関係をSetセットに格納
I.マッピング関係:実はキーと値の対応関係を指す.マッピング関係のタイプはMap.Entry
J.Mapコレクションには反復器がなく、要素を取り出す方法:
Mapコレクションを単列コレクションに変換するには、単列コレクションの反復器を使用すればよい
2、Mapでよく見られるクラス
A.TreeMap類:データ構造:二叉木.同期ではありません.mapセット内のキーをソートできます.
B.HashMapクラス:データ構造:ハッシュテーブル.非同期でnullをキーと値として許可します.
C.LinkedHashMapクラス:HashMapのサブクラスで、チェーンテーブル+ハッシュテーブルに基づく.map集合の秩序化,すなわち,取り出しの順序が格納の順序と一致することを保証できる.
D.Hashtableクラス:データ構造:ハッシュテーブル.同期されたnullはキーと値として許可されません.hashMapクラスに置き換えられます.
E.Propertiesクラス:HashTableのサブクラスで、属性セット、キーと値は文字列であり、ストリームと組み合わせてキー値の操作を行うことができる.
3、Map集合の使い方
A.問題解析時に対応関係が出た場合はmapで集合する.
B.対応関係に整然とした数字が現れたら、配列を考える.
C.注意:対応関係の個数が不確定な場合、mapを主とする.
4、MapとCollectionの違い
Map:二列集合です.キーは一意でなければなりません.値は繰り返し、ペアで表示されるコレクションです.
Collection:単一の列の集合であり、そのサブインタフェースListの要素は繰り返し可能であり、Setの集合の要素は一意である.
5、HashMapコレクションでデータを保存してカスタムオブジェクトをキーにすると、hashCode()メソッドとequals()メソッドを書き換えるのはなぜですか?
カスタムオブジェクトをキーとして使用する場合は、キーがユニークであるため、要素の一意性を維持します.
HashMapは名前からハッシュ構造であることがわかりますので、要素を維持したい場合は
一意性はこの2つの方法を書き換える必要がある.
6、TreeMapはカスタムオブジェクトを保存して遍歴する(カスタムオブジェクトをキーにする)
注:カスタムオブジェクトをキーとして使用する場合は、次の2つの操作が必要です.
実装ソート方式1:オブジェクトが属するクラスにComparableインタフェースを実装させる
実装ソート方式2:TreeMapのパラメトリック構造でパラメータ位置でComparatorインタフェースオブジェクトを受信する.
7、HashMapとHashtableの違い
A:HashMap:スレッドは安全ではなく、効率が高く、キーと値nullを許可します.
B:Hashtabl:スレッドは安全で、効率が低く、キーと値nullは許可されていません.
8、いつどの集合を使うか
キー値が合っていますか?
はい:Map
キーを並べ替えますか?
はい:TreeMap
No:HashMap
わからない場合は、HashMapを使います.
No:Collection
ユニークかどうか
はい:Set
エレメントをソートしますか?
はい:TreeSet
No:HashSet
わからない場合は、HashSetを使います
No:List
安全にするかどうか:
はい:Vector(本格開発中でも使わない)
List list =Collections.synchronizedList(new ArrayList());
No:ArrayList,LinkedList
クエリーが多い:ArrayList
マルチ削除:LinkedList
わからない場合は、ArrayListを使います
9、例1
10、例2
Mapコレクション
1、特徴
A.内部にはキーキーと値valueのペアが格納されています.
B.キーは一意で、値は一意でなくてもよい
C.キーが同じであれば、値は上書きされます.
D.putメソッドは前回の値を返します.前回値がなかった場合はnullを返します.
E.キーが存在しない場合nullを返し、この方法でキーが存在するか否かを判断する.
F.すべての鍵は単列集合で取得でき,map集合中の鍵は一意性を保証するため,Map集合の鍵はSet集合で受信できる.
G.すべての値はCollectionで取得できます.値は必ずしも一意ではないからです.
H. Set entrySet();マップセット内のマッピング関係をSetセットに格納
I.マッピング関係:実はキーと値の対応関係を指す.マッピング関係のタイプはMap.Entry
J.Mapコレクションには反復器がなく、要素を取り出す方法:
Mapコレクションを単列コレクションに変換するには、単列コレクションの反復器を使用すればよい
2、Mapでよく見られるクラス
A.TreeMap類:データ構造:二叉木.同期ではありません.mapセット内のキーをソートできます.
B.HashMapクラス:データ構造:ハッシュテーブル.非同期でnullをキーと値として許可します.
C.LinkedHashMapクラス:HashMapのサブクラスで、チェーンテーブル+ハッシュテーブルに基づく.map集合の秩序化,すなわち,取り出しの順序が格納の順序と一致することを保証できる.
D.Hashtableクラス:データ構造:ハッシュテーブル.同期されたnullはキーと値として許可されません.hashMapクラスに置き換えられます.
E.Propertiesクラス:HashTableのサブクラスで、属性セット、キーと値は文字列であり、ストリームと組み合わせてキー値の操作を行うことができる.
3、Map集合の使い方
A.問題解析時に対応関係が出た場合はmapで集合する.
B.対応関係に整然とした数字が現れたら、配列を考える.
C.注意:対応関係の個数が不確定な場合、mapを主とする.
4、MapとCollectionの違い
Map:二列集合です.キーは一意でなければなりません.値は繰り返し、ペアで表示されるコレクションです.
Collection:単一の列の集合であり、そのサブインタフェースListの要素は繰り返し可能であり、Setの集合の要素は一意である.
5、HashMapコレクションでデータを保存してカスタムオブジェクトをキーにすると、hashCode()メソッドとequals()メソッドを書き換えるのはなぜですか?
カスタムオブジェクトをキーとして使用する場合は、キーがユニークであるため、要素の一意性を維持します.
HashMapは名前からハッシュ構造であることがわかりますので、要素を維持したい場合は
一意性はこの2つの方法を書き換える必要がある.
6、TreeMapはカスタムオブジェクトを保存して遍歴する(カスタムオブジェクトをキーにする)
注:カスタムオブジェクトをキーとして使用する場合は、次の2つの操作が必要です.
実装ソート方式1:オブジェクトが属するクラスにComparableインタフェースを実装させる
実装ソート方式2:TreeMapのパラメトリック構造でパラメータ位置でComparatorインタフェースオブジェクトを受信する.
7、HashMapとHashtableの違い
A:HashMap:スレッドは安全ではなく、効率が高く、キーと値nullを許可します.
B:Hashtabl:スレッドは安全で、効率が低く、キーと値nullは許可されていません.
8、いつどの集合を使うか
キー値が合っていますか?
はい:Map
キーを並べ替えますか?
はい:TreeMap
No:HashMap
わからない場合は、HashMapを使います.
No:Collection
ユニークかどうか
はい:Set
エレメントをソートしますか?
はい:TreeSet
No:HashSet
わからない場合は、HashSetを使います
No:List
安全にするかどうか:
はい:Vector(本格開発中でも使わない)
List list =Collections.synchronizedList(new ArrayList());
No:ArrayList,LinkedList
クエリーが多い:ArrayList
マルチ削除:LinkedList
わからない場合は、ArrayListを使います
9、例1
/*
* 1. (name,age )
*/
class Student {
//
private String name;
//
private int age;
//
public Student() {
}
//
public Student(String name, int age) {
this.name = name;
this.age = age;
}
//
public String getName() {
return name;
}
//
public void setName(String name) {
this.name = name;
}
//
public int getAge() {
return age;
}
//
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return name + "\t" + age ;
}
}
// --------------------
/*
* : HashMap , 3 ,
* key String ,value Student
*/
public class HashMapStuDemo {
public static void main(String[] args) {
Map map = new HashMap();
Student s1 = new Student(" ", 21);
Student s2 = new Student(" ", 25);
Student s3 = new Student(" ", 23);
map.put("0001", s1);
map.put("0002", s2);
map.put("0003", s3);
// ---
// Set set = map.keySet();
// for (String string : set) {
// Student s = map.get(string);
// System.out.println(string + "\t" + s.getName() + "\t" + s.getAge());
// }
// ---
// Set 。
Set> set = map.entrySet();
//
for (Map.Entry e : set) {
//
String key = e.getKey();
//
Student s = e.getValue();
//
System.out.println(key + "\t" + s);
}
}
}
// --------------------
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/*
* : HashMap , 3 ,
* key Student ,value String
*/
public class HashMapStuDemo2 {
public static void main(String[] args) {
// HashMap
Map map = new HashMap();
//
Student s1 = new Student(" ", 21);
Student s2 = new Student(" ", 25);
Student s3 = new Student(" ", 23);
// HashMap
map.put(s1, "0001");
map.put(s2, "0002");
map.put(s3, "0003");
// Set , HashMap
Set set = map.keySet();
// Set
for (Student s : set) {
//
String str = map.get(s);
System.out.println(str + "\t" + s);
}
}
}
// --------------------
import java.util.Comparator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
/*
* 1 TreeMap, 5 ,
* 2 ,String
*/
public class TreeMapStu2 {
public static void main(String[] args) {
// TreeMap ,
Map tree = new TreeMap(new Comparator() {
@Override
public int compare(Student o1, Student o2) {
int temp = o1.getAge() - o2.getAge();
return temp == 0 ? o1.getName().compareTo(o2.getName()) : temp;
}
});
//
Student s1 = new Student("zhangsan", 22);
Student s2 = new Student("lisi", 24);
Student s3 = new Student("wangwu", 23);
Student s4 = new Student("zhaoliu", 29);
Student s5 = new Student("chenqi", 20);
/*
* ,String
*/
tree.put(s1, "3");
tree.put(s2, "1");
tree.put(s3, "5");
tree.put(s4, "4");
tree.put(s5, "2");
Set set = tree.keySet();
for (Student s : set) {
String str = tree.get(s);
System.out.println(str + " " + s);
}
}
}
10、例2
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
/*
* : "cbxzbvavdvgd" ,
* :"a(1)b(2)c(1)d(2)g(1)v(3)x(1)z(1)"
* :
* 1、
* 2、 ,
* 3、 , , TreeMap
* 4、 , TreeMap ,
* , , 1
* , +1, ,
* 5、 StringBuilder,
*/
public class TreeMapDemo {
public static void main(String[] args) {
//
String str = "cbxzbvavdvgd";
// ,
char[] chs = str.toCharArray();
// , , TreeMap
Map map = new TreeMap();
/*
* , TreeMap ,
* , , 1
* , +1, ,
*/
for (char c : chs) {
Integer count = map.get(c);
if (count == null) {
map.put(c, 1);
} else {
count++;
map.put(c, count);
}
}
// StringBuilder,
StringBuilder sb = new StringBuilder();
Set set = map.keySet();
for (Character c : set) {
Integer i = map.get(c);
sb.append(c).append("(").append(i).append(")");
}
String result = sb.toString();
System.out.print(result);
}
}