酒店网站建设特色8小8x在线免费观看2021

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

酒店网站建设特色,8小8x在线免费观看2021,网站的优化策略方案,网站行高泛型的理解和好处 首先我们先来看看泛型的好处 1)编译时#xff0c;检查添加元素的类型#xff0c;提高了安全性 2)减少了类型转换的次数#xff0c;提高效率[说明] 不使用泛型 Dog - Object - Dog//放入到ArrayList 会先转成Object#xff0c;在取出时#x…泛型的理解和好处 首先我们先来看看泛型的好处 1)编译时检查添加元素的类型提高了安全性 2)减少了类型转换的次数提高效率[说明] 不使用泛型 Dog - Object - Dog//放入到ArrayList 会先转成Object在取出时还需要转换成Dog使用泛型 Dog- Dog - Dog//放入时和取出时不需要类型转换提高效率 3)不再提示编译警告 代码演示 注意 1.当我们在集合的后面指定了泛型那么表示存放到集合中的元素的类型是dog类型 2.如果我们加入的类型不是dog那么编译器会直接报错 3.我们在遍历的时候可以直接取出dog的类型而不是Object package idea.chapter15.generic.improve;import java.util.ArrayList;SuppressWarnings({all}) public class Generic02 {public static void main(String[] args) {//使用传统的方法来解决 使用泛型//1. 当我们 ArrayListDog 表示存放到 ArrayList 集合中的元素是Dog类型//2. 如果编译器发现添加的类型不满足要求就会报错//3. 在遍历的时候可以直接取出 Dog 类型而不是 Object//4. public class ArrayListE {} E称为泛型,那么 Dog-EArrayListDog arrayList new ArrayListDog();arrayList.add(new Dog(旺财, 10));arrayList.add(new Dog(发财, 1));arrayList.add(new Dog(小黄, 5));//假如我们不小心添加了一只猫,就会直接报错//arrayList.add(new Cat(招财猫, 8));System.out.println(使用泛型);for (Dog dog : arrayList) {System.out.println(dog.getName() - dog.getAge());}} }/* 1.请编写程序在ArrayList 中添加3个Dog对象 2.Dog对象含有name 和 age, 并输出name 和 age (要求使用getXxx()) 3.使用泛型来完成代码*/ class Dog {private String name;private int age;public Dog(String name, int age) {this.name name;this.age age;}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;} }class Cat { //Cat类private String name;private int age;public Cat(String name, int age) {this.name name;this.age age;}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;} } 泛型的介绍 理解泛(广泛)型(类型) Integer,String,Dog  1)泛型又称参数化类型是Jdk5.0出现的新特性,解决数据类型的安全性问题 2)在类声明或实例化时只要指定好需要的具体的类型即可。 3)Java泛型可以保证如果程序在编译时没有发出警告运行时就不会产ClassCastException异常。同时代码更加简洁、健壮 4)泛型的作用是可以在类声明时通过一个标识表示类中某个属性的类型或者是某个方法的返回值的类型或者是参数类型。 代码演示 注意 泛型的作用是可以在类声明时通过一个标识表示类中某个属性的类型  或者是某个方法的返回值的类型或者是参数类型 class Person E 红色标注的这一块就是泛型在代码中我们可以看到我们在类的后面加入了E就表示该一个类型后面根据我们传入的不同的对象比如我们传入的是一个String那么E就是String类型的传入的是一个Integer 那么E 就是一个Integer package idea.chapter15.generic;public class Generic03 {public static void main(String[] args) {//注意特别强调 E具体的数据类型在定义Person对象的时候指定,即在编译期间就确定E是什么类型PersonString person new PersonString(jack);person.show(); //String/你可以这样理解上面的Person类class Person {String s ;//E表示 s的数据类型, 该数据类型在定义Person对象的时候指定,即在编译期间就确定E是什么类型public Person(String s) {//E也可以是参数类型this.s s;}public String f() {//返回类型使用Ereturn s;}}/PersonInteger person2 new PersonInteger(100);person2.show();//Integer/class Person {Integer s ;//E表示 s的数据类型, 该数据类型在定义Person对象的时候指定,即在编译期间就确定E是什么类型public Person(Integer s) {//E也可以是参数类型this.s s;}public Integer f() {//返回类型使用Ereturn s;}}/} }//泛型的作用是可以在类声明时通过一个标识表示类中某个属性的类型 // 或者是某个方法的返回值的类型或者是参数类型class PersonE {E s ;//E表示 s的数据类型, 该数据类型在定义Person对象的时候指定,即在编译期间就确定E是什么类型public Person(E s) {//E也可以是参数类型this.s s;}public E f() {//返回类型使用Ereturn s;}public void show() {System.out.println(s.getClass());//显示s的运行类型} } 泛型的语法 泛型的声明 interface接口T和class 类KV //比如ListArrayList 说明 1)其中TKV不代表值而是表示类型。 2)任意字母都可以。常用T表示是Type的缩写 泛型的实例化 要在类名后面指定类型参数的值类型 ListString strList new ArrayListString(); [举例说明] IteratorCustomer iterator customers.iterator(); 泛型课堂练习 代码演示 package idea.chapter15.generic;import java.util.;/ 练习

  1. 创建3个学生对象
  2. 放入到HashMap中要求Key是String name,Value就是 学生对象 3.使用两种方式遍历/ SuppressWarnings({all}) public class GenericExercise {public static void main(String[] args) {HashSetStudent students new HashSet();students.add(new Student(jack, 12));students.add(new Student(tom, 10));students.add(new Student(smith, 1));// //使用增强for遍历 // System.out.println(使用增强for的方式); // for (Student student : students) { // System.out.println(student); // } // // //使用迭代器 // System.out.println(使用迭代器的方式); // IteratorStudent iterator students.iterator(); // while (iterator.hasNext()) { // Student next iterator.next(); // System.out.println(next); // }//使用HashMapHashMapString, Student hashMap new HashMap();hashMap.put(jack, new Student(jack, 1));hashMap.put(tom, new Student(tom, 11));hashMap.put(mary, new Student(mary, 111));//使用增强forSetString strings hashMap.keySet();for (String string : strings) {System.out.println(string - hashMap.get(string));}//使用迭代器System.out.println(\n使用迭代器的方式);SetMap.EntryString, Student entries hashMap.entrySet();IteratorMap.EntryString, Student iterator entries.iterator();while (iterator.hasNext()) {//此时的next就是一个EntryMap.EntryString, Student next iterator.next();System.out.println(next.getKey() - next.getValue());}} }class Student {private String name;private int id;public Student(String name, int id) {this.name name;this.id id;}public String getName() {return name;}public void setName(String name) {this.name name;}public int getId() {return id;}public void setId(int id) {this.id id;}Overridepublic String toString() {return Student{ name name \ , id id };} } 泛型使用的注意事项和细节 1.interface ListT0,public class HashSetE{}..等等说明TE只能是引用类型 2.在给泛型指定具体类型后可以传入该类型或者其子类类型 3.泛型使用形式 ListInteger list1new ArrayListInteger{}; ListIntegerlist2new ArrayList); 3.如果我们这样写 List list3new ArrayList0默认给它的 泛型是[E E就是Object]即 代码演示 package idea.chapter15.generic;import java.util.ArrayList; import java.util.List;/** 讲解泛型的注意事项和使用细节*/ SuppressWarnings({all}) public class GenericDetail {public static void main(String[] args) {//1.给泛型指向数据类型是要求是引用类型不能是基本数据类型ListInteger list new ArrayListInteger(); //OK//Listint list2 new ArrayListint();//错误//2. 说明//因为 E 指定了 A 类型, 构造器传入了 new A()//在给泛型指定具体类型后可以传入该类型或者其子类类型PigA aPig new PigA(new A());aPig.f();PigA aPig2 new PigA(new B());aPig2.f();//3. 泛型的使用形式ArrayListInteger list1 new ArrayListInteger();ListInteger list2 new ArrayListInteger();//在实际开发中我们往往简写//编译器会进行类型推断, 老师推荐使用下面写法ArrayListInteger list3 new ArrayList();ListInteger list4 new ArrayList();ArrayListPig pigs new ArrayList();//4. 如果是这样写 泛型默认是 ObjectArrayList arrayList new ArrayList();//等价 ArrayListObject arrayList new ArrayListObject();/public boolean add(Object e) {ensureCapacityInternal(size 1); // Increments modCount!!elementData[size] e;return true;}/Tiger tiger new Tiger();//如果什么都不写默认是Object也就是下面的这种方式/class Tiger {//类Object e;public Tiger() {}public Tiger(Object e) {this.e e;}}/} }class TigerE {//类E e;public Tiger() {}public Tiger(E e) {this.e e;} }class A { }class B extends A { }class PigE {//E e;public Pig(E e) {this.e e;}public void f() {System.out.println(e.getClass()); //运行类型} } 泛型练习2 代码演示 package idea.chapter15.generic;import java.util.ArrayList; import java.util.Comparator;/* 泛型课堂练习题 定义Employee类 1)该类包含private成员变量namesalbirthday其中birthday为MyDate类的对象 2)为每一个属性定义getter,setter方法 3)重写 toString 方法输出 name,sal,birthday
  3. MyDate类包含private成员变量month,day.year;并为每一个属性定义getter setter 方法 5)创建该类的3个对象并把这些对象放入ArrayList集合中(ArrayList需使用泛型来定义)对集合中的元素进行排序并遍历输出 排序方式调用ArrayList的sort 方法传入 Comparator对象[使用泛型]先按照name排序如果name相同则按生日日期的先后排序。 【即定制排序】 有一定难度15min比较经典 泛型使用案例*/ SuppressWarnings({all}) public class GenericExercise02 {public static void main(String[] args) {ArrayListEmployee employees new ArrayList();employees.add(new Employee(jack, 200, new MyDate(2001, 1, 1)));employees.add(new Employee(tom, 100, new MyDate(2003, 3, 2)));employees.add(new Employee(tom, 300, new MyDate(2002, 5, 3)));employees.sort(new ComparatorEmployee() {Overridepublic int compare(Employee o1, Employee o2) {//根据要求如果名字相同我们按照出生日期比较如果名字不相同就按照名字比较if (o1.getName().equals(o2.getName())) {return o1.getBirthday().getYear() - o2.getBirthday().getYear();} else//还可以继续增加逻辑比如出生年份相同就按照月份比较return o1.getName().equals(o2.getName()) ? 1 : -1;}});System.out.println(employees);} }class Employee implements Comparator {private String name;private double sal;private MyDate birthday;public Employee(String name, double sal, MyDate birthday) {this.name name;this.sal sal;this.birthday birthday;}public String getName() {return name;}public void setName(String name) {this.name name;}public double getSal() {return sal;}public void setSal(double sal) {this.sal sal;}public MyDate getBirthday() {return birthday;}public void setBirthday(MyDate birthday) {this.birthday birthday;}Overridepublic String toString() {return \nEmployee{ name name \ , sal sal , birthday birthday };}Overridepublic int compare(Object o1, Object o2) {return 0;} }class MyDate {private int year;private int month;private int day;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 MyDate{ year year , month month , day day };} }