Java基礎第十六天學習日記_Map集合

------- android培訓java培訓、期待與您交流! ----------

Map集合:該集合存儲鍵值對。一對一往裏存。而且要保證鍵的唯一性。

當有映射關係的元素時,考慮建立Map集合。

方法摘要:

1.添加:如果添加時,出現相同的鍵。那麼後添加的值會覆蓋原有鍵對應值,並且put方法會返回被覆蓋的值。

put(K key,V value)

putAll(Map< ? Extends k, ? extends V> m)

2.刪除

clear( )

remove ( Object key)

3.判斷

containValue ( Object value)

containsKey ( Object key)

isEmpty ( )

4.獲取

get ( Object key ):可以通過get方法的返回值來判斷一個鍵是否存在。通過返回null來判斷。

size ( )

values ( )

entrySet ( )

keySet ( )

Map體系:和Set很像。Set底層就是使用了Map集合。

Map

|——Hashtable:底層是哈希表數據結構,不可以存入null鍵null值。該集合是線程同步的。JDK1.0。效率低。

|——HashMap:底層是哈希表數據結構,允許使用null鍵null值。該集合是不同步的。JDK1.2。效率高。

|——TreeMap:底層是二叉樹數據結構,線程不同步。可以用於給map集合中的鍵進行排序。

Map集合的兩種取出方式:

Map集合的取出原理:將Map集合轉成Set集合。再通過迭代器取出。

1.Set<k> keySet:將Map中所有的鍵存入到Set集合。因爲Set具備迭代器,所以可以迭代方式取出所有的鍵,在根據get方法獲取每一個鍵對應的值。

2.Set<Map.Entry<k,v>>entrySet:將map集合中的映射關係存入到了set集合中,而這個關係的數據類型就是:Map.Entry。

entrySet()方法將map集合中的映射關係取出。這個關係就是Map.Entry類型。那麼關係對象Map.Entry獲取到後,就可以通過Map.Entry中getKey和getValue方法獲取關係中的鍵和值。

//import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class MapDemo 
{
	/**
	 * @map方法的演示。
	 */
	public static void main(String[] args) 
	{
		Map<String,String> map=new HashMap<String,String>();//Map不是一個具體的集合類。
		//添加元素。
		map.put("01","zhangsan1");
		map.put("02", "zhangsan02");
		map.put("03", "zhangsan03");
		//System.out.println(map.put("03", "zhangsan033"));//map後添加的值會覆蓋以前的值,並且會返回被覆蓋的值。
		map.put("04", null);
		//刪除元素。
		//System.out.println(map.remove("02"));
		//map.clear();//clear()沒有返回值
		//獲取元素
		//System.out.println(map.get("04"));//根據指定鍵獲取值,如果沒有這個鍵值對,返回null。
		//Collection<String> coll=map.values(); //獲取map中的值。將這些值存到Collection集合中。
		//取出元素
		//第一種方法,將map的鍵值存到set集合中。迭代取出key值,再根據鍵值取出值。
		/*Set<String> keyset=map.keySet();
		for(Iterator<String> it=keyset.iterator();it.hasNext();)
		{
			String key=it.next();
			String value=map.get(key);
			System.out.println("key="+key+",value="+value);
		}*/
		//第二種方法。將Map的映射關係取出。存入到Set集合中。
		Set<Map.Entry<String, String>> entry=map.entrySet();
		for(Iterator<Map.Entry<String, String>> it=entry.iterator();it.hasNext();)
		{
			Map.Entry<String, String> me=it.next();
			String key=me.getKey();
			String value=me.getValue();
			System.out.println(key+":"+value);
		}
		
		//System.out.println(coll);
	}
}


 

package day16;


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

public class StudentMap
{
	/**
	 * @Map中裝Student對象爲key,相應地址爲value。
	 */
	public static void main(String[] args) 
	{
		HashMap<Student,String> hm=new HashMap<Student,String>();
		hm.put(new Student("zhangsan01",20), "beijing");
		hm.put(new Student("zhangsan01",20), "beijing");
		hm.put(new Student("zhangsan02",22), "shanghai");
		hm.put(new Student("zhangsan03",23), "tianjin");
		Set<Map.Entry<Student,String>> hs=hm.entrySet();
		for(Iterator<Map.Entry<Student,String>> it=hs.iterator();it.hasNext();)
		{
			Map.Entry<Student, String> me=it.next();
			Student stu=me.getKey();
			String add=me.getValue();
			System.out.println(stu+"^"+add);			
		}
	}
}
class Student implements Comparable<Student>
{
	private String name;
	private int 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;
	}
	Student(String name,int age)
	{
		this.name=name;
		this.age=age;
	}
	public int compareTo(Student s)//排序根據。
	{
		int num=new Integer(this.age).compareTo (new Integer(this.age));
		if(num==0)
			return this.name.compareTo(s.name);
		return num;
	}
	public int hashCode()//要重寫hashCode方法。儘量讓每個元素的返回值不同。
	{
		return name.hashCode()+age*10;
	}
	public boolean equals(Student s)//重寫equals方法。
	{
		return this.name.equals(s.name)&&(this.age==s.age);
	}
	public String toString()//打印對象需要調用這個方法。
	{
		return name+":"+age;
	}
}
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

public class CharCount 
{
	/**
	 * @統計字符串中字母出現的次數並存入集合	 */
	public static void main(String[] args) 
	{
		String str="aldjflasdfoqwnieonvaospnfieo";
		System.out.println(charCount(str));
	}
	public static String charCount(String str)
	{
		char[] chs=str.toCharArray();
		TreeMap<Character,Integer> tm=new TreeMap<Character,Integer>();
		int count=0;
		for(int x=0;x<chs.length;x++)
		{
			if(!(chs[x]>='a'&&chs[x]<='z'||chs[x]>='A'&&chs[x]>='Z'))
				continue;
			Integer value=tm.get(chs[x]);
			if(!(value==null))
			{
				count=value;
			}
			count++;
			tm.put(chs[x], count);
			/*if(value==null)
			{
				tm.put(chs[x], 1);
			}
			else
			{
				value++;
				tm.put(chs[x], value);
			}*/
			count=0;
		}
		StringBuffer sb=new StringBuffer();
		Set<Map.Entry<Character,Integer>> entryset=tm.entrySet();
		for(Iterator<Map.Entry<Character,Integer>> it=entryset.iterator();it.hasNext();)
		{
			Map.Entry<Character,Integer> me=it.next();
			Character ch=me.getKey();
			Integer in=me.getValue();
			sb.append(ch+"("+in+")");
		}
		return sb.toString();
	}
}
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class OneVsMany 
{
	/**
	 * @Map集合中一個鍵對應多個值。
	 */
	public static void main(String[] args) 
	{
		HashMap<String,List<Student>> hm=new HashMap<String,List<Student>>();
		List<Student> yure=new ArrayList<Student>();
		List<Student> jiuye=new ArrayList<Student>();
		hm.put("yure", yure);
		hm.put("jiuye", jiuye);
		yure.add(new Student("zhangsan",1));
		yure.add(new Student("zhangsan2",2));
		jiuye.add(new Student("zhangsan3",3));
		jiuye.add(new Student("zhangsan4",4));
		Set<Map.Entry<String,List<Student>>> mapentry=hm.entrySet();
		for(Iterator<Map.Entry<String,List<Student>>> it=mapentry.iterator();it.hasNext();)
		{
			Map.Entry<String,List<Student>> me=it.next();
			String str=me.getKey();
			List<Student> li=me.getValue();
			System.out.println(str);
			getInfo(li);
		}
	}
	public static void getInfo(List<Student> i)
	{
		for(Iterator<Student> it=i.iterator();it.hasNext();)
		{
			Student s=it.next();
			System.out.println(s);
		}
	}
}




------- android培訓java培訓、期待與您交流! ----------  詳細請查看:http://edu.csdn.net/heima/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章