当前位置: 首页 > news >正文

郑州网站外包公司龙岩网络施工公司

郑州网站外包公司,龙岩网络施工公司,构建一个网站,巴州网站建设目录 1. 泛型概述 1.1 生活中的例子 1.2 泛型的引入 2. 使用泛型举例 2.1 集合中使用泛型 2.1.1 举例 2.1.2 练习 2.2 比较器中使用泛型 2.2.1 举例 2.2.2 练习 1. 泛型概述 1.1 生活中的例子 举例1#xff1a;中药店#xff0c;每个抽屉外面贴着标签 举例2… 目录 1. 泛型概述 1.1 生活中的例子 1.2 泛型的引入 2. 使用泛型举例 2.1 集合中使用泛型 2.1.1 举例 2.1.2 练习 2.2 比较器中使用泛型 2.2.1 举例 2.2.2 练习 1. 泛型概述 1.1 生活中的例子 举例1中药店每个抽屉外面贴着标签 举例2超市购物架上很多瓶子每个瓶子装的是什么有标签 举例3家庭厨房中 Java中的泛型就类似于上述场景中的标签。 1.2 泛型的引入 在Java中我们在声明方法时当在完成方法功能时如果有未知的数据需要参与这些未知的数据需要在调用方法时才能确定那么我们把这样的数据通过形参表示。在方法体中用这个形参名来代表那个未知的数据而调用者在调用时对应的传入实参就可以了。 受以上启发JDK1.5设计了泛型的概念。泛型即为“类型参数”这个类型参数在声明它的类、接口或方法中代表未知的某种通用类型。 举例1 集合类在设计阶段/声明阶段不能确定这个容器到底实际存的是什么类型的对象所以在JDK5.0之前只能把元素类型设计为ObjectJDK5.0时Java引入了“参数化类型Parameterized type”的概念允许我们在创建集合时指定集合元素的类型。比如ListString这表明该List只能保存字符串类型的对象。 使用集合存储数据时除了元素的类型不确定其他部分是确定的例如关于这个元素如何保存如何管理等。 举例2 java.lang.Comparable接口和java.util.Comparator接口是用于比较对象大小的接口。这两个接口只是限定了当一个对象大于另一个对象时返回正整数小于返回负整数等于返回0但是并不确定是什么类型的对象比较大小。JDK5.0之前只能用Object类型表示使用时既麻烦又不安全因此 JDK5.0 给它们增加了泛型。 其中T就是类型参数即泛型。 所谓泛型就是允许在定义类、接口时通过一个标识表示类中某个属性的类型或者是某个方法的返回值或参数的类型。这个类型参数将在使用时例如继承或实现这个接口、创建对象或调用方法时确定即传入实际的类型参数也称为类型实参。 2. 使用泛型举例 自从JDK5.0引入泛型的概念之后对之前核心类库中的API做了很大的修改例如JDK5.0改写了集合框架中的全部接口和类、java.lang.Comparable接口、java.util.Comparator接口、Class类等。为这些接口、类增加了泛型支持从而可以在声明变量、创建对象时传入类型实参。 2.1 集合中使用泛型 2.1.1 举例 集合中没有使用泛型时 集合中使用泛型时 Java泛型可以保证如果程序在编译时没有发出警告运行时就不会产生ClassCastException异常。即把不安全的因素在编译期间就排除了而不是运行期既然通过了编译那么类型一定是符合要求的就避免了类型转换。 同时代码更加简洁、健壮。 把一个集合中的内容限制为一个特定的数据类型这就是generic背后的核心思想。 举例 //泛型在List中的使用 Test public void test1(){//举例将学生成绩保存在ArrayList中//标准写法//ArrayListInteger list new ArrayListInteger();//jdk7的新特性类型推断ArrayListInteger list new ArrayList();list.add(56); //自动装箱list.add(76);list.add(88);list.add(89);//当添加非Integer类型数据时编译不通过//list.add(Tom);//编译报错IteratorInteger iterator list.iterator();while(iterator.hasNext()){//不需要强转直接可以获取添加时的元素的数据类型Integer score iterator.next();System.out.println(score);} } 举例 //泛型在Map中的使用 Test public void test2(){HashMapString,Integer map new HashMap();map.put(Tom,67);map.put(Jim,56);map.put(Rose,88);//编译不通过// map.put(67,Jack);//遍历key集SetString keySet map.keySet();for(String str:keySet){System.out.println(str);}//遍历value集CollectionInteger values map.values();IteratorInteger iterator values.iterator();while(iterator.hasNext()){Integer value iterator.next();System.out.println(value);}//遍历entry集SetMap.EntryString, Integer entrySet map.entrySet();IteratorMap.EntryString, Integer iterator1 entrySet.iterator();while(iterator1.hasNext()){Map.EntryString, Integer entry iterator1.next();String key entry.getKey();Integer value entry.getValue();System.out.println(key : value);}} 2.1.2 练习 练习1 import java.util.ArrayList; import java.util.Iterator; import java.util.Random; import java.util.function.Predicate;public class TestNumber {public static void main(String[] args) {ArrayListInteger coll new ArrayListInteger();Random random new Random();for (int i 1; i 5 ; i) {coll.add(random.nextInt(100));}System.out.println(coll中5个随机数是);for (Integer integer : coll) {System.out.println(integer);}//方式1使用集合的removeIf方法删除偶数coll.removeIf(new PredicateInteger() {Overridepublic boolean test(Integer integer) {return integer % 2 0;}});//方式2调用Iterator接口的remove()方法//IteratorInteger iterator1 coll.iterator();//while(coll.hasNext()){// Integer i coll.next();// if(i % 2 0){// coll.remove();// }//}System.out.println(coll中删除偶数后);IteratorInteger iterator coll.iterator();while(iterator.hasNext()){Integer number iterator.next();System.out.println(number);}} } 2.2 比较器中使用泛型 2.2.1 举例 public class Circle{private double radius;public Circle(double radius) {super();this.radius radius;}public double getRadius() {return radius;}public void setRadius(double radius) {this.radius radius;}Overridepublic String toString() {return Circle [radius radius ];}} 使用泛型之前 import java.util.Comparator;class CircleComparator implements Comparator{Overridepublic int compare(Object o1, Object o2) {//强制类型转换Circle c1 (Circle) o1;Circle c2 (Circle) o2;return Double.compare(c1.getRadius(), c2.getRadius());} } //测试 public class TestNoGeneric {public static void main(String[] args) {CircleComparator com new CircleComparator();System.out.println(com.compare(new Circle(1), new Circle(2)));System.out.println(com.compare(圆1, 圆2));//运行时异常ClassCastException} } 使用泛型之后 import java.util.Comparator;class CircleComparator1 implements ComparatorCircle {Overridepublic int compare(Circle o1, Circle o2) {//不再需要强制类型转换代码更简洁return Double.compare(o1.getRadius(), o2.getRadius());} }//测试类 public class TestHasGeneric {public static void main(String[] args) {CircleComparator1 com new CircleComparator1();System.out.println(com.compare(new Circle(1), new Circle(2)));//System.out.println(com.compare(圆1, 圆2));//编译错误因为圆1, 圆2不是Circle类型是String类型编译器提前报错//而不是冒着风险在运行时再报错。} } 2.2.2 练习 MyDate.jave package exer1;/*** ClassName:IntelliJ IDEA* Description:* 2、MyDate类包含* private成员变量yearmonthday并为每一个属性定义getter、setter方法* Author zyjstart* Create:2024/10/5 16:02*/ public class MyDate {private int year;private int month;private int day;public MyDate() {}public MyDate(int year, int month, int day) {this.year year;this.month month;this.day day;}public int getYear() {return year;}public void setYear(int year) {this.year year;}public int getMonth() {return month;}public void setMonth(int month) {this.month month;}public int getDay() {return day;}public void setDay(int day) {this.day day;}Overridepublic String toString() {return year 年 month 月 day 日;} }Employee.java package exer1;/*** ClassName:IntelliJ IDEA* Description:* 1、定义一个Employee类* 该类包含private成员变量nameagebirthday其中birthday为MyDate类的对象* 并为每一个属性定义gettersetter方法* 并重写toString方法输出nameagebirthday* Author zyjstart* Create:2024/10/5 16:00*/ public class Employee implements ComparableEmployee{private String name;private int age;private MyDate birthday;public Employee() {}public Employee(String name, int age, MyDate birthday) {this.name name;this.age age;this.birthday birthday;}public String getName() {return name;}public void setName(String name) {this.name name;}public int getAge() {return age;}public void setAge(int age) {this.age age;}public MyDate getBirthday() {return birthday;}public void setBirthday(MyDate birthday) {this.birthday birthday;}Overridepublic String toString() {return Employee{ name name \ , age age , birthday birthday };}//按照name从高到低排序Overridepublic int compareTo(Employee o) {return this.name.compareTo(o.name);} } EmployeeTest.java package exer1;import org.junit.Test;import java.util.Comparator; import java.util.Iterator; import java.util.TreeSet;/*** ClassName:IntelliJ IDEA* Description:* 3、创建该类的5个对象并把这些对象放入TreeSet集合中TreeSet 需使用泛型来定义** 4、分别按以下两种方式对集合中的元素进行排序并遍历输出* 1、使Employee实现Comparable接口并按name排序* 2、创建TreeSet时传入Comparator对象按生日日期的先后排序* Author zyjstart* Create:2024/10/5 16:05*/ public class EmployeeTest {//1、使Employee实现Comparable接口并按name排序Testpublic void test1(){TreeSetEmployee set new TreeSet();Employee e1 new Employee(Hanmeimei,18,new MyDate(1998,12,16));Employee e2 new Employee(Gaoqiqi,25,new MyDate(2002,11,19));Employee e3 new Employee(Daleiju,34,new MyDate(1944,6,24));Employee e4 new Employee(Zixianxina,17,new MyDate(1999,8,27));Employee e5 new Employee(Yinana,37,new MyDate(2011,1,31));set.add(e1);set.add(e2);set.add(e3);set.add(e4);set.add(e5);//遍历IteratorEmployee iterator set.iterator();while (iterator.hasNext()){System.out.println(iterator.next());}}//2、创建TreeSet时传入Comparator对象按生日日期的先后排序Testpublic void test2() {ComparatorEmployee comparator new ComparatorEmployee() {Overridepublic int compare(Employee o1, Employee o2) {// 先比较年int yearDistince o1.getBirthday().getYear() - o2.getBirthday().getYear();if (yearDistince ! 0){ // 如果年份不相等返回结果相等则判断月份return yearDistince;}// 比较月int monthDistince o1.getBirthday().getMonth() - o2.getBirthday().getMonth();if (monthDistince ! 0){return monthDistince;}return o1.getBirthday().getDay() - o2.getBirthday().getDay();}};TreeSetEmployee set new TreeSet(comparator);Employee e1 new Employee(Hanmeimei,18,new MyDate(1999,12,16));Employee e2 new Employee(Gaoqiqi,25,new MyDate(2002,11,19));Employee e3 new Employee(Daleiju,34,new MyDate(1944,6,24));Employee e4 new Employee(Zixianxina,17,new MyDate(1999,8,27));Employee e5 new Employee(Yinana,37,new MyDate(2011,1,31));set.add(e1);set.add(e2);set.add(e3);set.add(e4);set.add(e5);//遍历IteratorEmployee iterator set.iterator();while (iterator.hasNext()){System.out.println(iterator.next());}} }在EmployeeTest.java中有两个测试方法分别对应两个目标要求 test1按姓名排序输出 test2按出生年月排序输出
http://www.hkea.cn/news/14400175/

相关文章:

  • 电子商务网站业务流程分析免费空间怎么搞网站
  • 建设河南分行网站免费推广网址注册
  • 在百度上怎么建网站wordpress文章图片没src地址
  • html网站开发中的应用爱站网是干什么的
  • 东莞网站建设 旅游双减之下托管班合法吗
  • 深圳做网站的网络公碳晶板装修多少钱一平方
  • wordpress动漫主题曲无锡seo关键词排名
  • 壹互联是网站公司吗云南昆明做网站
  • 做网站毕业设计能过吗浙江高端建设网站
  • 青岛做网站哪家好夏天做哪些网站致富
  • 做网站用的软件是什么了免费电子版个人简历可编辑
  • 网站的竞品分析怎么做公司注销后网站备案
  • 百度推广账号出售搜索引擎关键词优化技巧
  • 推广seo网站的公司如何上传自己的做的网站
  • 这几年做哪个网站能致富保定网站seo
  • 在百度云上建设网站wordpress虚拟3d网站
  • 大型网站seo方案云南营销型网站建设
  • 哪些php网站网站建设中 尽情期待
  • 跆拳道东莞网站建设如何建网站不花钱
  • 夏天做那个网站能致富mysql开发网站开发
  • 想做个网站不知道做什么wordpress怎么找到作者的分类标签
  • php网站开发案例教程 dvdqq空间可以做网站吗
  • 怎样制作个人网站老网站如何做301重定向新网站
  • 专门做字体设计的网站软件下载网站排行榜前十名
  • 国和建设集团网站新手学做网站相关书籍
  • 做海报哪个网站好wordpress扫码阅读
  • html5在线制作网站模板app设计网站模板免费下载
  • 深圳公司名称核准查询百度seo软件曝光行者seo
  • 百城建设提质工程网站四川建设网有限责任公司招聘
  • 专业零基础网站建设教学服务湖南 seo