7.27_java学习_map应用

一:练习一

/*
每个学生都有归属地。
学生属性:姓名,年龄。
注意:姓名和年龄相同视为同一学生。
保证学生的唯一性。

1,描述学生

2,定义map容器,将学生作为键,地址作为值,存入。

3,获取map集合中的元素。
*/
import java.util.*;
class Student implements Comparable
{
	private String name;
	private int 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(s.age));

		if(num == 0)
			return this.name.compareTo(s.name);
		return num;
	}
	public int hashCode()
	{
		return age;
	}
	public boolean equals(Object obj)
	{
		if(!(obj instanceof Student))
			throw new ClassCastException("类型不匹配");
		Student s = (Student)obj;
		
		return  this.age == s.age && this.name.equals(s.name); 

	}
	public String getName()
	{
		return name;
	}
	public int getAge()
	{
		return age;
	}
	public String toString()
	{
		return name+":"+age;
	}
	
}
class MapTest 
{
	public static void main(String[] args) 
	{
		HashMap hm = new HashMap();

		hm.put(new Student("lisi1",21),"beijing");
		hm.put(new Student("lisi1",21),"tianjin");
		hm.put(new Student("lisi2",22),"shanghai");
		hm.put(new Student("lisi3",23),"beijing2");
		hm.put(new Student("lisi4",24),"beijing3");

		//第一种取出方式 keySet

		Set keySet = hm.keySet();
		Iterator it = keySet.iterator();
		while(it.hasNext())
		{
			Student s = it.next();
			String addr = hm.get(s);
			System.out.println(s +":" + addr);
		}
		
		//第二种取出方式entrySet
		Set> entrySet = hm.entrySet();
		Iterator> iter = entrySet.iterator();
		while(iter.hasNext())
		{
			Map.Entry me = iter.next();
			Student s = me.getKey();
			String addr = me.getValue();
			System.out.println(s +":....。。。。。。。" + addr);
		}
		//对学生类进行排序,根据年龄!
		TreeMap tm = new TreeMap(new StuNameCompare());

		tm.put(new Student("zhangsha1",21),"beijing");
		tm.put(new Student("wanwu1",21),"tianjin");
		tm.put(new Student("lisi2",22),"shanghai");
		tm.put(new Student("lisi3",23),"beijing2");
		tm.put(new Student("lisi4",24),"beijing3");

		Set> entrySet2 = tm.entrySet();
		Iterator> iter2 = entrySet2.iterator();
		while(iter2.hasNext())
		{
			Map.Entry me2 = iter2.next();

			Student s2 = me2.getKey();
			String addr2 = me2.getValue();
			System.out.println(s2 +":....。。。。。。。" + addr2);
		}
	}
}
class StuNameCompare implements Comparator 
{
	public int compare(Student s1, Student s2)
	{
		int num = s1.getName().compareTo(s2.getName());
		if(num == 0)
			return new Integer(s1.getAge()).compareTo(new Integer(s2.getAge()));
		return num;
	}
}

二:练习二

/*
练习:
“sdfgzxcvasdfxcudf”获取字符串字母出现的次数。

希望打印结果:a(1)c(2)

通过结果发现,每一个字母都有对应的次数。
说明字母和次数之间都有映射关系时,可以选择map集合。

注意了,当发现有映射关系时,可以选择map集合。
因为map集合中存放就是映射关系。

当发现有映射关系时,可以选择map集合。
因为map集合中存放就是映射关系。

什么时候使用map集合
当数据之间存在着映射关系时,就先想到map集合

思路:
1,将字符串转换成字符数组
2,定义一个map集合,因为打印结果又顺序,所以选择treemap集合。
3,遍历字符数组
	将每一个字母作为键去查map集合。
	如果返回null,将该字母和1存入map集合中。
	如果返回不是null,说明该字母在map集合已经存在并对应次数。
	那么就获取该次数并进行自增
4,将map集合中的数据变成指定的字符串形式返回。
*/
import java.util.*;
class MapTest2
{
	public static void main(String[] args)
	{
		String s =charCount("abbcddeffggg");
		System.out.println(s);
	}
	public static String charCount (String str)
	{
		char [] chs = str.toCharArray();

		TreeMap tm = new TreeMap();
		
		for(int x =0;x> entrySet = tm.entrySet();

		Iterator> it = entrySet.iterator();

		while(it.hasNext())
		{
			Map.Entry me= it.next();
			char ch = me.getKey();
			int value = me.getValue();
			sb.append(ch+"("+value+")");
		}
	return sb.toString();

	}

}
/*
map扩展知识。
map集合被使用时因为具备映射关系。
*/



 

你可能感兴趣的:(javaSE)