java第十五天_Map集合,

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方法获取每一个键对应的值。

图解:

java第十五天_Map集合,_第1张图片

2.Set<Map.Entry<k,v>>entrySet:将map集合中的映射关系存入到了set集合中,而这个关系的数据类型就是:Map.Entry。

entrySet()方法将map集合中的映射关系取出。这个关系就是Map.Entry类型。那么关系对象Map.Entry获取到后,就可以通过Map.Entry中getKey和getValue方法获取关系中的键和值

图解:

java第十五天_Map集合,_第2张图片

代码:

 

//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();
	}
}


 

 

你可能感兴趣的:(java)