public class Generic03 {
public static void main(String[] args) {
Person stringPerson = new Person("Hello");
//E表示s的数据类型,该数据类型在定义Person对象的时候指定,即在编译期间,就确定E是什么类型
/*
class Person{//创建Person对象的时候指定
String name;//String表示s的数据类型
public Person(String name) {//String可以是参数类型
this.name = name;
}
public String f(){//返回类型使用String
return name;
}
}
*/
Person integerPerson = new Person<>(1500);
//E表示s的数据类型,该数据类型在定义Person对象的时候指定,即在编译期间,就确定E是什么类型
/*
class Person{//创建Person对象的时候指定
Integer name;//Integer表示s的数据类型
public Person(Integer name) {//Integer可以是参数类型
this.name = name;
}
public Integer f(){//返回类型使用Integer
return name;
}
}
*/
}
}
class Person{//创建Person对象的时候指定
E name;//E表示s的数据类型,该数据类型在定义Person对象的时候指定,即在编译期间,就确定E是什么类型
public Person(E name) {//E可以是参数类型
this.name = name;
}
public E f(){//返回类型使用E
return name;
}
}
三、泛型的语法
泛型的声明:
interface接口 {}和class类{}
//比如: List , ArrayList
说明:
1) 其中T,K,V不代表值,而是表示类型。
2) 任意字母都可以。常用T表示,是Type的缩写
泛型的实例化:
要在类名后面指定类型参数的值(类型)。如:
1) List strList = new ArrayList 0; [举例说明]
2) Iterator iterator = customers.iterator();
泛型语法使用
注意,在我们使用的时候如果填入泛型的类型,在调用迭代器时候可以明确指定,直接转型成我们的泛型类型即可。构造器中使用了K V 的关键字的泛型
public class GenericExercise01 {
public static void main(String[] args) {
Student student1 = new Student("小王");
Student student2 = new Student("小马");
Student student3 = new Student("小黄");
HashSet hashSet = new HashSet();
hashSet.add(student1);
hashSet.add(student2);
hashSet.add(student3);
HashMap hashMap = new HashMap();
hashMap.put(student1.getName(),student1);
hashMap.put(student2.getName(),student2);
hashMap.put(student3.getName(),student3);
System.out.println("=========I遍历获取hashSet=======");
for (Student student :hashSet) {
System.out.println(student.getName());
}
Iterator iterator = hashSet.iterator();
System.out.println("==========迭代器获取hashSet======");
while (iterator.hasNext()) {
Student next = (Student)iterator.next();
System.out.println(next.getName());
}
System.out.println("=========I遍历获取hashMap内的entry=======");
Set> entries = hashMap.entrySet();
for (Map.Entry entry : entries) {
System.out.println(entry.getKey() + " " + entry.getValue());
}
System.out.println("=========获取key值========");
Set strings = hashMap.keySet();
for (String key : strings) {
System.out.println(key + " " + hashMap.get(key));
}
System.out.println("========迭代器取出entry========");
Set> entries1 = hashMap.entrySet();
Iterator> iterator1 = entries1.iterator();
while (iterator1.hasNext()) {
Map.Entry next = iterator1.next();
System.out.println(next.getKey() + " " +next.getValue());
}
}
}
class Student{
private String name;
public Student(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
四、泛型的注意事项
1. interface List{},public class HashSet{}..等等
说明: T, E只能是引用类型,不能是基本数据类型
看看下面语句是否正确?:
List list = new ArrayList 0;//ok
List list2 = new ArrayList 0);//报错
2.在给泛型指定具体类型后,可以传入该类型或者其子类类型
3.泛型使用形式
List list1 = new ArrayList < Integer> ();
List list2 = new ArrayList< > ();
4.如果我们这样写List list3 = new ArrayList();默认给它的泛型是[ E就是Object ] 即:
public class CustomMethodGenericExercise {
public static void main(String[] args) {
//T->String, R->Integer, M->Double
Apple apple = new Apple<>();
apple.fly(10);//10 会被自动装箱 Integer10, 输出Integer
apple.fly(new Dog());//Dog
}
}
class Apple {//自定义泛型类
public void fly(E e) { //泛型方法
System.out.println(e.getClass().getSimpleName());
}
//public void eat(U u) {}//错误,因为U没有声明
public void run(M m) {
} //ok
}
class Dog {
}
九、泛型的基础和通配符
1)泛型不具备继承性
List list = new ArrayList (); //对吗?
2) > :支持任意泛型类型
3) extends A>:支持A类以及A类的子类,规定了泛型的上限
4) super A>:支持A类以及A类的父类,不限于直接父类,规定了泛型的下限
public class GenericExtends {
public static void main(String[] args) {
Object o = new String("xx");
//泛型没有继承性
//List list = new ArrayList();
//举例说明下面三个方法的使用
List list1 = new ArrayList<>();
List list2 = new ArrayList<>();
List list3 = new ArrayList<>();
List list4 = new ArrayList<>();
List list5 = new ArrayList<>();
//如果是 List> c ,可以接受任意的泛型类型
printCollection1(list1);
printCollection1(list2);
printCollection1(list3);
printCollection1(list4);
printCollection1(list5);
//List extends AA> c: 表示 上限,可以接受 AAA或者AAA子类
// printCollection2(list1);//×
// printCollection2(list2);//×
printCollection2(list3);//√
printCollection2(list4);//√
printCollection2(list5);//√
//List super AAA> c: 支持AA类以及AA类的父类,不限于直接父类
printCollection3(list1);//√
//printCollection3(list2);//×
printCollection3(list3);//√
//printCollection3(list4);//×
//printCollection3(list5);//×
//冒泡排序
//插入排序
//....
}
//说明: List> 表示 任意的泛型类型都可以接受
public static void printCollection1(List> c) {
for (Object object : c) { // 通配符,取出时,就是Object
System.out.println(object);
}
}
// ? extends AAA 表示 上限,可以接受 AAA或者AAA子类
public static void printCollection2(List extends AAA> c) {
for (Object object : c) {
System.out.println(object);
}
}
// ? super 子类类名AA:支持AAA类以及AAA类的父类,不限于直接父类,
//规定了泛型的下限
public static void printCollection3(List super AAA> c) {
for (Object object : c) {
System.out.println(object);
}
}
}
class AAA{
}
class BBB extends AAA {
}
class CCC extends BBB {
}
Abstract Factory:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 Adapter:将一个类的接口转换成客户希望的另外一个接口。A d a p t e r模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 Bridge:将抽象部分与它的实现部分分离,使它们都可以独立地变化。 Builder:将一个复杂对象的构建与它的表示分离,使得同
import java.util.LinkedList;
public class CaseInsensitiveTrie {
/**
字典树的Java实现。实现了插入、查询以及深度优先遍历。
Trie tree's java implementation.(Insert,Search,DFS)
Problem Description
Igna
/*
2013年3月11日20:37:32
地点:北京潘家园
功能:完成用户格式化输入多个值
目的:学习scanf函数的使用
*/
# include <stdio.h>
int main(void)
{
int i, j, k;
printf("please input three number:\n"); //提示用
数据表中有记录的time字段(属性为timestamp)其值为:“0000-00-00 00:00:00”
程序使用select 语句从中取数据时出现以下异常:
java.sql.SQLException:Value '0000-00-00' can not be represented as java.sql.Date
java.sql.SQLException: Valu