黒馬プログラマー--Map集合

9129 ワード

--------androidトレーニング、javaトレーニング、java学習型技術ブログ、お客様との交流を楽しみにしています!---------
インタフェースMap
タイプパラメータ:
K-キー.
V——値.
キーを値のオブジェクトにマップします.1つのマッピングに重複するキーを含めることはできません.各キーは最大1つの値にしかマッピングできません.
Mapコレクション:このコレクションはキー値ペアを格納します.1対1のストレージ.また、キーの一意性を保証します.
エレメントに直接名前を付けることに相当します.
Conlectionは単列集合と呼ばれます.
Mapは二列集合です.
1、追加します.
put(K key,V value)
putメソッドは、このキーの元の値を返し、新しい値は古い値を上書きします.
putAll(Map extends K,? extends V> m)
2、削除する.
clear()
remove(Object key)
3、判断.
boolean containsValue(Object value)
booleancontainsKey(Object key)
boolean isEmpty()
4、取得.
V get(Object key)
size()
values()
entrySet()
keySet()
Map
|--Hashtable:最下位はハッシュテーブルデータ構造でnullキーとnull値は格納できません.このセットはスレッド同期です.jdk1.0、非効率
キーを作成するオブジェクトはhashCodeメソッドとequalsメソッドを実装する必要があります.
|--HashMap:最下位はハッシュ・テーブル・データ構造であり、空のキー・NULL値を使用できます.このセットは同期しません.jdk1.2、効率が高い.
|-ThreeMap:最下位はツリーデータ構造です.スレッドが同期しません.mapセット内のキーをソートするために使用できます.
Setに似ています.
実は、Setの下部にはMapコレクションが使われています.
Mapコレクションメソッドの例:
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;



public class MapDemo {

	public static void main(String[] args) 
	{
		Map map = new HashMap();
		
		//    
		//        ,                。put          。
		System.out.println(map.put("01","zhangsan1"));
		System.out.println(map.put("01","wangwu"));
		
		
		map.put("02","zhangsan2");
		map.put("03","zhangsan3");
		
		System.out.println("containsKey:"+map.containsKey("01"));
		System.out.println("remove:"+map.remove("02"));
		
		//    get                。    null   。
		System.out.println("get:"+map.get("023"));
		
		//hashMap          。
		//map.put(null,"aha");
		//map.put("04", null);
		map.put(null, null);
		System.out.println("get:"+map.get(null));
		
		//  map       。
		Collection coll = map.values();
		
		System.out.println(coll);
		System.out.println(map);
	}

}
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;


/*
 * map          :
 * 1、keySet: map        set  。  set     。
 * 		      get  ,          。
 * 		Map       : map    set  。        。
 * 
 * 
 * 2、Set>  entrySet: map            set   ,
 * 							            :Map.Entry
 */


public class MapDemo2 {

	public static void main(String[] args) 
	{
		Map map = new HashMap();
		
		map.put("02","zhangsan2");
		map.put("03","zhangsan3");
		map.put("01","zhangsan1");
		map.put("04","zhangsan4");
		
		// Map          。   Set   。
		System.out.println(map.values());
		
		Set> entrySet = map.entrySet();
		
		Iterator> it = entrySet.iterator();
		
		while(it.hasNext())
		{
			Map.Entry me = it.next();
			System.out.println(me.getKey().hashCode()+"...."+me.getValue());
		}
		
		
		
		
		
		/*
		//   map       Set  ,keySet();
		Set s = map.keySet();
		
		//  Set  。         。
		Iterator it = s.iterator();
		while(it.hasNext())
		{
			//       map   get         。
			System.out.println(map.get(it.next()));
		}
		*/
	}

}
	
/*
 * Map.Entry     Entry      ,  Map         。
 */

interface Map
{
	public static interface Entry
	{
		public abstract Object getKey();
		public abstract Object getValue();
	}
}

class HashMap implements Map
{
	class Hahs implements Map.Entry
	{
			public Object getKey(){}
			public Object getValue(){}
	}

}

練習1:
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeMap;



/*
 *              。
 *   Student,  String。
 *     :  ,  。
 *   :               。
 *         。
 * 
 * 1、    。
 * 2、  map  。      ,     。  。
 * 3、        。
 * 
 */

public class MapTest {

	public static void main(String[] args) 
	{
		Map map = new TreeMap(new mycomparator());
		//Map map = new TreeMap();
		map.put(new Student("lisi1","19"), "address1");
		map.put(new Student("lisi2","18"), "address2");
		map.put(new Student("lisi3","17"), "address3");
		map.put(new Student("lisi2","18"), "address4");
		
		Set> set = map.entrySet();
		
		Iterator> it = set.iterator();
		
		while(it.hasNext())
		{
			Map.Entry me = it.next();
			System.out.println(me.getKey()+"...."+me.getKey().getName()+"...."+
					me.getKey().getAge()+"...."+me.getValue());
		}
	}

}

class Student implements Comparable
{
	private String name;
	private String age;
	Student(String name,String age)
	{
		this.setName(name);
		this.setAge(age);
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAge() {
		return age;
	}
	public void setAge(String age) {
		this.age = age;
	}
	
	public int hashCode()
	{
		//System.out.println(name.hashCode());
		return name.hashCode()+age.hashCode();
	}
	
	
	public boolean equals(Object obj)
	{
		if(obj instanceof Student)
		{
			
			Student s = (Student)obj;
			return this.name.equals(s.name) && this.age.equals(s.age);
			//return true;
		}
		throw new ClassCastException("     ");
	}
	@Override// Student      
	public int compareTo(Student o) {
		int num = this.name.compareTo(o.name);
		if(num==0)
			return this.age.compareTo(o.age);
		return num;
	}
	
}
	class mycomparator implements Comparator
	{
		@Override
		public int compare(Student o1, Student o2) {
			int num = o1.getAge().compareTo(o2.getAge());
			if(num == 0)
				return o1.getName().compareTo(o2.getName());
			return num;
		}

		
		
	}





練習:
「sdfgzxcvasdfxcvdf」は、文字列にアルファベットが表示される回数を取得します.
印刷結果を希望:a(1)c(2)......
その結果,各アルファベットに対応する回数が見出された.
アルファベットと回数の間にマッピング関係があることを示します.
mapコレクションはいつ使いますか?
データ間にマッピング関係がある場合は,まずmap集合を用いることができることを考える.
実装一:(Mapにおけるputメソッドを用いない特有の属性)
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;




public class MapTest3 {

	public static void main(String[] args) 
	{
		String ob = "sdfgzxcvasdfxcvdf";
		HashMap map = new HashMap();
		for(int i =0;i> set = map.entrySet();
		
		Iterator> it = set.iterator();
		
		while(it.hasNext())
		{
			Map.Entry en = it.next();
			System.out.println(en.getKey()+"("+en.getValue()+")");
		}

	}
	
}

実装2:
考え方:
各アルファベットをキーとしてmap集合を調べます.
nullを返すと、そのアルファベットと1がmapセットに格納されます.
返された文字がnullでない場合は、mapセットにすでに存在し、対応する回数があることを示します.
では、この回数を取得して自己増加します.その後、このアルファベットと自己増加回数をmapセットに格納する.
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;




public class MapTest3 {

	public static void main(String[] args) 
	{
		String ob = "sdfgzxcvasdfxcvdf";
		TreeMap map = new TreeMap();
		for(int i =0;i> set = map.entrySet();
		
		Iterator> it = set.iterator();
		
		while(it.hasNext())
		{
			Map.Entry en = it.next();
			System.out.println(en.getKey()+"("+en.getValue()+")");
		}

	}
	
}

2つのプログラムキー:
for(int i =0;i
for(int i =0;i

プログラム2はmap集合法の特性を利用して,より簡潔に実現した.
プログラム3:tmを利用する.get()判断.
for(int x=0;x
for(int x=0;x

mapは知識を拡張する.
map集合が使用されるのは,マッピング関係があるためである.
コレクションをネストできます.
たとえば、1つの学校に複数のクラスがあり、クラスに複数の学生があり、各学生には独自の属性があります.
--------androidトレーニング、javaトレーニング、java学習型技術ブログ、お客様との交流を楽しみにしています!---------