版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Day18总结1、 泛型类:在写容器之前想要容器中要存什么?所以要先写好泛型Eg:TreeSet<Person> ts=new TreeSet<Person>();有了泛型后强制转换就没有用Eg:public class Person implements Comparator<Person>对于下面覆盖的它的compare方法就不用强制转换了。Public int compare(Person p)这里就不用在做强制转换了。实现代码:Public static void main(String args)Tool t=new Tool();t.setObj
2、ect(new Cat();t.setObject(new Dog();这时编译会出现没问题,但是运行时会出现错误,因为发生了类型转换异常,dog不能转换成Cat。Cat c=(Cat)t.getObject();Tool<Cat> t=new Tool<Cat>();t.setObject(newCat();此时就不用强转了t.setObject(new Dog():此时编译就失败,把运行时的异常转到编译时候。Class CatClass Dog/*Class ToolPrivate Object obj;Public void setObject(Object ob
3、j)This.obj=obj;Public Object getObject()Return obj;*/改进后ClassTool<T>Private T t;Public void setObject(T t)This.t=t;Public T getObject()Return t;总结:这就是将泛型定义在类上,这个类称为泛型类,是一种替代Object类的一种技术,因为Object类有自动类型提升和转换,泛型已经替代它做了,编译时期更安全,省去了强转的麻烦。什么时候使用泛型类?当类中要操作的引用数据类型不确定的时候,以前使用的是共性类型Object现在可以使用泛型来解决,比Ob
4、ject更为安全。2、 泛型方法:既然类中的方法操作类型不确定,其实可以将泛型定义在方法上。实现代码:Tool<String> t=new Tool2<String>>();T.show(new Integer(5);编译失败,因为类型不一致。Tool2<Integer> t1=new Tool2<Integer>();这样便可以操作Integer类型的对象了。T.show();Class Tool2<T>显示对象的打印结构,可是对象不确定,所以使用Object,而现在可以使用泛型解决。<W>void show(W
5、obj)Sop(obj);当静态方法的时候,如果方法是静态的是无法访问类上定义的泛型的,如果该方法还需要泛型,必须将泛型定义在方法上,Static <Y> void staticMethod(Y t)泛型定义在方法上时只能放在返回值的前面和修饰符的后面什么时候使用泛型方法?当方法操作的引用数据类型不确定的时候就使用方法。3、 泛型接口:实现代码:Interface Inter<T>void show(T t);Class InterImpl implements Inter<String>Public void show(String str)Sop(str
6、);不明确的时候用上面这种,但是当我们明确了类型时候使用下面的这种情况Class InterImpl<W> implements Inter<w>Public void show(W w)Public static void main(String args)New InterImpl().show("hehe");4、 泛型通配符:不带泛型也是可以的,因为新的可以兼容前面的,因为泛型擦除之后它还是Object注意区分T t代表某一种实现代码:Public static void main(String args)ArrayList<Stude
7、nt> al=new ArrayList<Student>();Al.add(new Student("lisi",21);Al.add(new Student("lisi2",22);Al.add(new Student("lisi3",23);ArrayList<Worker> al2=new ArrayList<Worker>();Al.add(new Student("lisiso",23);Al.add(new Student("lisiss"
8、,23);Al.add(new Student("lisisdsdf",23);ArrayList<String> al3=new ArrayList<String>();printCollection(a1);printCollection(a2);Public static void printCollection(Collection<? Super Student> coll)Iterator<? Super Student> it=coll.iterator();While(it.hasNext()Student s
9、tu=it.next();Student p=it.next();Sop(p.getName()+p.age();Object obj=it.next();Sop(obj.toString();对集合中的元素进行迭代的功能,因为打印集合中的元素类型是不确定的,无法明确,可以使用泛型中的通配符来完成,该通配符用?来标示,如果要对操作的类型进行限定,只操作一部分类型时,可以使用泛型的高级功能,泛型的限定。? Extends E:可以接收E类型和E的子类型。? Super:可以接收了性或者的父类型。实现代码:Public static void printCollection(Collection&
10、lt;? Extedns Person> coll)Iterator<? extends Person> it = coll.iterator();while(it.hasNext()/Student stu = it.next();Person p = it.next();System.out.println(p.getName()+"-"+p.getAge();5、 什么时候使用E extends?一般在存储具体引用类型时使用这种情况,因为存储E类型或者E类型的子类,这时可以保证类型是安全的。实现代码:public static void main(S
11、tring args) Collection<Person> coll = new ArrayList<Person>();coll.add(new Person("abc1",21);coll.add(new Person("abc2",22);Collection<Student> coll2 = new ArrayList<Student>();coll2.add(new Student("lisi1",31);coll2.add(new Student("lisi2&q
12、uot;,32);coll2.add(new Student("lisi3",33);Collection<Worker> coll3 = new ArrayList<Worker>();coll3.add(new Worker("lisi11",31);coll3.add(new Worker("lisi22",32);coll.addAll(coll2);coll.addAll(coll3);Iterator<Person> it = coll.iterator();while(it.hasNe
13、xt()Person stu = it.next();System.out.println(stu.getName();6、 泛型下限:下限什么时候用?从集合中取出对象进行操作时,可以使用下限。比如:比较器。无论集合中的元素对象的类型是什么,只要比较器的指定的类型可以接受这些对象完成比较,就可以了。所以比较器的类型,可以是集合中当前元素的类型,也是可以该元素类型的父类型。实现代码:public static void main(String args) TreeSet<Student> ts = new TreeSet<Student>(new ComparatorNa
14、me();ts.add(new Student("lisi1",21);ts.add(new Student("lisi2",28);ts.add(new Student("lisi9",23);ts.add(new Student("lisi7",27);TreeSet<Worker> ts2 = new TreeSet<Worker>(new ComparatorName();ts2.add(new Worker("lisi11",41);ts2.add(new Wo
15、rker("lisi22",48);ts2.add(new Worker("lisi99",43);ts2.add(new Worker("lisi77",47);printCollection(ts);printCollection(ts2);/ArrayList<String> al = new ArrayList<String>();/ArrayList<Integer> al2 = new ArrayList<Integer>();/al.containsAll(al2);/&q
16、uot;abc".equals(8);/* * param ts2 */public static void printCollection(TreeSet<? extends Person> ts2) Iterator<? extends Person> it = ts2.iterator();while(it.hasNext()Person p = it.next();System.out.println(p.getName()+":"+p.getAge();class ComparatorName implements Compara
17、tor<Person>Overridepublic int compare(Person o1, Person o2) /Person o1 = new Student("lisi1",21)int temp = o1.getName().compareTo(o2.getName();return temp=0?o1.getAge()-o2.getAge():temp;/*class ComparatorName implements Comparator<Student>Overridepublic int compare(Student o1,
18、Student o2) int temp = o1.getName().compareTo(o2.getName();return temp=0?o1.getAge()-o2.getAge():temp;class ComparatorName2 implements Comparator<Worker>Overridepublic int compare(Worker o1, Worker o2) int temp = o1.getName().compareTo(o2.getName();return temp=0?o1.getAge()-o2.getAge():temp;*/
19、*Collection<Student> coll = new ArrayList<Student>();TreeSet<Person> ts = new TreeSet<Person>(coll);class TreeSet<E>TreeSet()TreeSet(Collection<? extends E> coll)下限什么时候用?从集合中取出对象进行操作时,可以使用下限。比如:比较器。无论集合中的元素对象的类型是什么,只要比较器的指定的类型可以接受这些对象完成比较,就可以了。所以比较器的类型,可以是集合中当前元素的
20、类型,也是可以该元素类型的父类型。TreeSet(Comparator<? super E> comp)7、 Map集合:特点:1、 它是集合框架中的顶层。2、 它一次存储一对元素,一个叫键,一个叫值,也就是键值对。Collection一次存一个,称为单列集合。Map一次存一对,称为双列集合。3、 map集合中必须保证键的唯一性。4、 如果存储键值对时,键出现重复,新值覆盖旧值,其实map集合存储的是映射关系。8、 Map常见的方法:该集合存储的键值对,一对一对的往里存,而且要保证键的唯一性。1、添加:put(key,value);putAll()2、删除:clear();remove(key);根据键来删,因为键唯一。3、判断:containKey():containVlaue();isEmpty();4、获取:get(Object key);size();获取长度。values();获取
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 初级护师专业实践能力章节练习(操作技能强化)
- 审计师(初级)审计相关基础知识模拟卷
- 临床医学检验技术专业知识历年真题解析与练习
- 2027年资产公司合同二篇
- 东方花苑小区物业管理服务委托合同
- 2025年土壤传感器提升智能花盆种植体验研究
- 企业企业文化推广方案协议
- 珠宝首饰行业节能减排协议2026
- 江苏省自考12573无线传感网技术高频考点重点
- 电路基础技术 7
- 《医疗机构工作人员廉洁从业九项准则》解读-
- DL∕T 1700-2017 隔离开关及接地开关状态检修导则
- 2025年高考历史一轮复习复习学案(中外历史纲要上下册)15纲要下册第五单元:工业革命与马克思主义的诞生(解析版)
- 9.标准编写及流程绘制
- 干部人事档案管理工作八项制度
- 2018风力发电机组电网适应性测试规程
- 计算机技术前沿总结课件
- 中国土地制度知到章节答案智慧树2023年浙江大学
- 特斯拉供应商手册
- GB/T 26942-2011环形线圈车辆检测器
- GB/T 22795-2008混凝土用膨胀型锚栓型式与尺寸
评论
0/150
提交评论