-------黑马程序员、专注Java、Android培训、期待与您交流!-------
泛型的由来!和使用方法解释和演示解说!
编译报错原因:TreeSet二叉树类型要进行比较,自动比较姓名或年龄?凭什么?要自己实现comparable接口中的compareTo方法。
比较什么类型就传什么类型,默认下就是object类型。
实现compareTo方法
这里再次使用到泛型,传入比较类型,省去了强转的动作!
自己写的equals
JAVA给的默认hashCode方法,其实跟之前自己写的是一样的。就是为了确保哈希值的唯一性
JAVA给的equals方法。
想用姓名来排序,传进去一个自己写的判断方法。
传入排序。
以上的例子需自己编写实践练习!(编程语言没绝经!多动手!)
迭代器的复用,加上泛型安全机制实例。设置上限!下限
练习:
package cn.itcast.generic.demo;
import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;
/*
* map练习
* 给个字符串ababc,计算当中字母的个数,输出格式如:a(2)b(2)(1)....
* 使用map的好处,键值的存放没有序,有对应的值,好用!有序的可以考虑用数组
* 但是需要输出有序,所以使用TreeMap,直接多态不使用子类的特有方法
*
* 思路:
* 1.将字符串转成字符数组
* 2.遍历字符数组中的字母,用来当键值存放,存放时对应值就是1,如果再次遍历到相同键值,对应值就拿出来加1并覆盖掉
* 3.用entryset取出map集合中的键值和对应值,打印出来。
*/
public class MapTest
{
public static void main(String[] args)
{
// TODO Auto-generated method stub
String str = "asdfasdfgwryujlqwerhigfhsdfqwasdfghkjhjoxasdehkuouy";
//来个方法运算后得出一个有序的字符串
String s = getCountString(str);
System.out.println(s);
}
public static String getCountString(String str)
{
// TODO Auto-generated method stub
//将字符串转成字符数组
char[] ch = str.toCharArray();
Map <Character,Integer> m = new TreeMap<Character,Integer>();
//开始遍历字母当键值
for (int i = 0; i < ch.length; i++)
{
if('a'>ch[i] && ch[i]>'z' || 'A'<ch[i] && ch[i]<'Z' )
throw new RuntimeException("你传进来的东西有问题");
//获取要累加的引用变量对应值
Integer value = m.get(ch[i]);//get返回的是被替代掉了的值,如果键值重复的话,如果不重复就返回null
//判断是否相同,相同就相加
if(value == null)
{
m.put(ch[i], 1);
}
else
{
m.put(ch[i], value + 1);
}
}
return mapToString(m);
}
private static String mapToString(Map<Character, Integer> m)
{
// TODO Auto-generated method stub
StringBuilder sb = new StringBuilder();//创建一个字符串缓冲区,好用里面的方法完成任务
Iterator<Character> it = m.keySet().iterator();//获取键值的迭代器
while(it.hasNext())
{
Character key = it.next();
Integer value = m.get(key);
sb.append(key+"("+value+")");
}
return sb.toString();
}
}
package cn.itcast.p1.map.test;
import java.util.HashMap;
import java.util.Map;
public class MapTest2 {
/**
* @param args
*/
public static void main(String[] args) {
/*
* Map在有映射关系时,可以优先考虑。
*
* 在查表法中的应用较为多见。
*/
String week = getWeek(1);
System.out.println(week);
System.out.println(getWeekByMap(week));
}
public static String getWeekByMap(String week){
Map<String,String> map = new HashMap<String,String>();
map.put("星期一","Mon");
map.put("星期二","Tus");
map.put("星期三","Wes");
map.put("星期日","Sun");
map.put("星期天","Sun");
return map.get(week);
}
public static String getWeek(int week){
if(week<1 || week>7)
throw new RuntimeException("没有对应的星期,请您重新输入");
String[] weeks = {"","星期一","星期二"};
return weeks[week];
}
}