集合3-MAP集合

7173 ワード

——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
/*
 * 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);

	}
}