java学习初探十五之泛型
来源:互联网 发布:手机版三绝庄炒股软件 编辑:程序博客网 时间:2024/05/21 10:13
一、泛型(编译期概念)
1为什么引入泛型?
(1)可以统一集合中的数据类型
(2)可以减少强制类型转换
2.泛型语法如何实现?
3.泛型的优点和缺点?
优点:统一类型,减少强制转换。
缺点:只能存储一种类型。
以下程序没有使用泛型,缺点?
如果集合不使用类型,则集合中的元素类型不统一。在遍历集合的时候,只能拿出Object类型,需要做大量的强制类型转换。麻烦。
package fanxing;import java.util.HashSet;import java.util.Iterator;import java.util.Set;public class Test01 { public static void main(String[] args) { Set s=new HashSet(); A a=new A(); B b=new B(); C c=new C(); s.add(a); s.add(b); s.add(c); //需求:遍历集合,如果A类型调用m1方法,B类型调用m2方法,C类型调m3方法 Iterator it=s.iterator(); while (it.hasNext()) { Object o=it.next(); //只能做大量的强制类型转换 if(o instanceof A) { A a1=(A)o; a1.m1(); }else if(o instanceof B){ B b1=(B)o; b1.m2(); }else { C c1=(C)o; c1.m3(); } } }}class A{ public void m1() { System.out.println("A's m1..........."); }}class B{ public void m2() { System.out.println("B's m2..........."); }}class C{ public void m3() { System.out.println("C's m3..........."); }}
二、泛型语法如何实现
泛型是一个编译阶段的语法,在编译阶段统一集合中的类型。
(1)下面是List使用String泛型实例
package fanxing;import java.util.ArrayList;import java.util.Iterator;import java.util.List;public class Test02 { public static void main(String[] args) { //创建一个List集合,只能存储字符串类型 List<String> strs=new ArrayList<String>(); //添加元素 //Error //strs.add(1); strs.add("JACK"); strs.add("SUN"); strs.add("KING"); strs.add("SMITH"); //遍历 Iterator<String> it=strs.iterator(); while (it.hasNext()) { String string = it.next(); System.out.println(string); } }}
(2)下面是Map使用
package fanxing;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Set;public class Test03 { public static void main(String[] args) { Map<String, Integer> maps=new HashMap<String,Integer>(); //存 maps.put("西瓜", 10); maps.put("苹果", 9); maps.put("香蕉", 20); //遍历 Set<String> keys=maps.keySet(); Iterator<String> it=keys.iterator(); while (it.hasNext()) { String key=it.next(); Integer value=maps.get(key); System.out.println(key+"的价格是"+value); } }}
(3)SortedSet使用泛型
package fanxing;import java.util.Iterator;import java.util.SortedSet;import java.util.TreeSet;public class Test04 { public static void main(String[] args) { SortedSet<Manager> ss=new TreeSet<Manager>(); //添加 Manager m1=new Manager(1000.0); Manager m2=new Manager(1500.0); Manager m3=new Manager(1300.0); ss.add(m1); ss.add(m2); ss.add(m3); //遍历 Iterator<Manager> it=ss.iterator(); while (it.hasNext()) { Manager manager=it.next(); manager.work(); System.out.println(manager); } }}class Manager implements Comparable<Manager>{ double sal; public Manager(double sal) { this.sal=sal; } public String toString() { return sal+" "; } public void work() { System.out.println("工作,一个月"+sal+"元"); } //实现接口中方法 public int compareTo(Manager m) { double sal1=this.sal; double sal2=m.sal; if(sal1>sal2) {return 1;} else if(sal1<sal2) {return -1;} else { return 0; } }}
三、自定义泛型
package fanxing;public class Test05 { public static void main(String[] args) { MyClass<String> mc=new MyClass<String>(); //泛型就是编译期检查类型 //Error //mc.m1(100); mc.m1("myclass"); }}//自定义泛型class MyClass<T>{ public void m1(T t) { System.out.println(t); }}
阅读全文
0 0
- java学习初探十五之泛型
- java基础学习之正则表达式 十五
- JAVA基础学习(十五)--集合二--TreeSet和泛型
- Java线程学习之线程初探
- Java学习笔记之反射机制初探
- java学习初探2之语言基础
- java学习初探3之方法使用
- java学习初探5之构造方法
- java学习初探5之this关键字
- java学习初探6之接口
- java学习初探6之Object类
- java学习初探6之UML
- java学习初探七之异常处理
- java学习初探八之数组应用
- java学习初探九之String
- java学习初探九之StringBuffer、StringBuilder
- java学习初探十之包装类
- java学习初探十一之日期处理
- Golang简单总结
- Eclipse创建Maven项目时报错记录
- LeetCode 53. Maximum Subarray and 121. Best Time to Buy and Sell Stock最大子数组问题
- 状态
- Linux命令
- java学习初探十五之泛型
- 项目中用到的设计模式
- selenium python cookie 自动登陆
- Java程序员必读之热门书单
- 字符串类型的xml转换成json对象
- Socket通讯-C#客户端与Java服务端通讯(发送消息和文件)
- 求1000的阶乘尾部0的个数
- 关于yii框架enableSchemaCache的坑
- Ajax获取返回值