第十四天总结0408

第十四天总结:
1.泛型
ClassCastException类型转换异常
泛型是自JDK1.5之后为了解决安全问题推出的新机制
好处:
a把运行时候出现的ClassCastException问题转移到了编译时期,那么问题就不会暴露在运行端口了。
b避免了类型强制转换的麻烦
泛型的表现形式:
ArrayList<T> al=new ArrayList<T>();//T指定了存元素的类型
在API中,所有带有<>的类或者方法都需要用到泛型
泛型类:
可以将要操作的引用类型作为参数传递到<>当中,类名后
当类中药操作的引用数据类型不确定的时候,使用泛型类
泛型方法:
当方法错做的引用卡类型不确定,而且每一个方法错做的类型有可能不一致,那么我们把<>转移到函数的返回值类型的前面,泛型方法通常使用在静态函数上
如果方法是静态的,那么就不需要创建对象就能运行静态方法,所以此时就不能用泛型类,而是在静态方法的返回值类型前加泛型
在new对象的时候,等号两边的泛型所指定的类型必须是一致的
在API中,比如TreeSet的构造方法中,可以对类型参数传递进行一个范围的控制,? extends E就表示传递的要么是E类型的对象,或者E类型的子类对象,限定了上限,还有一种? super E这

个表示传递的要么是E类型的对象,或者是E类型的父类对象,限定了下限。
2.Map集合
Map<k,v>
Map采用了是键值对的存储方式,其中K表示键的类型,V代表值的类型。这个集合中的的键和值是一一对应的映射关系,并且键是唯一的,他不具备迭代方法
Map有两个常用的集合类,一个HashMap,一个是TreeMap
HashMap:线程是不安全的,替换了Hashtable,可以存入空键和空值,
Hashtable:线程是安全的,效率比较低,不可以存入空键和空值
TreeMap:线程不安全,可以对键排序
Map集合的取元素方法:
原理:通过将Map的方法,将Map集合转换成Set集合,在通过Set集合中的迭代器对元素进行取出
keySet()方法返回值类型是set,是把所有的键提取出来存放到set集合当中。而set集合是可以用迭代的
get(key)方法是通过键获得值
entrySet()返回的是一个实体,返回的是Map集合中的键值对的关系给取出来了,存放在Set集合当中,他取出的对象类型是Map.Entry<K,V>类型,这是个静态内部接口
values()方法是获取Map中的值存到Colletction集合当中
/*
演示Map集合的一般方法和取元素方式
*/
import java.util.*;
class test4
{
 public static void main(String[] args)
 {
  HashMap<Student,String> hm=new HashMap<Student,String>();
  hm.put(new Student("张三",30),"北京");
  hm.put(new Student("李四",24),"上海");
  hm.put(new Student("王五",22),"西安");
  hm.put(new Student("赵六",28),"南京");
  hm.put(new Student("周七",22),"北京");
  hm.put(new Student("张三",20),"北京");
  hm.put(new Student("张三",30),"北京");
  //取出Map集合中的元素的三种方式
  //方式1,利用keySet方法取出键
  Set<Student> s=hm.keySet();
  for (Iterator<Student> it=s.iterator();it.hasNext();)
  {
   Student stu=it.next();
   String adr=hm.get(stu);
   System.out.println(stu.getName()+"//"+stu.getAge()+"///"+adr);
  }
  //方式2,利用entrySet方法取键和值的关系
  Set<Map.Entry<Student,String>> s1=hm.entrySet();
  for (Iterator<Map.Entry<Student,String>> it=s1.iterator();it.hasNext() ; )
  {
   //获得键值关系的对象
   Map.Entry<Student,String> me=it.next();
   //下面是Map.Entry这个静态内部接口中的取键和取值方法
   Student stu1=me.getKey();
   String adr1=me.getValue();
   System.out.println(stu1.getName()+"------"+stu1.getAge()+"-------"+adr1);
  }
  //方式3,通过values方法获取值
  Collection<String> coll=hm.values();
  for (Iterator<String> it=coll.iterator();it.hasNext() ; )
  {
   System.out.println("地址:"+it.next());
  }
 }
}
class Student
{
 private String name;
 private int age;
 Student(String name,int age)
 {
  this.name=name;
  this.age=age;
 }
 public int hashCode()
 {
  return name.hashCode()+age*38;
 }
 public boolean equals(Object o)
 {
  Student s=(Student)o;
  return this.name.equals(s.name) && this.age==s.age;
 }
 public String getName()
 {
  return name;
 }
 public int getAge()
 {
  return age;
 }
}

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值