培训作业:泛型和集合

来源:互联网 发布:单例模式 java 双重锁 编辑:程序博客网 时间:2024/05/17 01:54

一.泛型

/*  *文件名:User.java */package IOTest;import java.io.*;public class User{    String userName;    String password;    public User(String userName,String password)    {        this.userName=userName;        this.password=password;     }    public User(){}    @Override    public String toString()     {        return "[用户名:"+this.userName+"----密码:"+this.password+"]";    }}
/*  *文件名:Pair.java */package IOTest;public class Pair<T> {    T first;    T second;    public Pair(T first,T second)     {        this.first=first;        this.second=second;     }}
/* 泛型应用的注意事项 *文件名:UserTest.java */package IOTest;import javax.jws.Oneway;public class UserTest{    public static void main(String[] args) throws ClassNotFoundException, Exception, IllegalAccessException     {        User aUser=new User("Alice", "1234");        User bUser=new User("Bob", "12345");        Pair<String> aPair=new Pair<>("12", "one");        Pair<User> bPair=new Pair<>(aUser,bUser);        /*         * 反射:下面方法会产生一个Class类型的一个实例         * 注:jvm会为每一个类管理一个Class类对象         */        System.out.println("比较普通类++++");        System.out.println("对象.getclass()----"+aUser.getClass());        System.out.println("类名.class----"+User.class);        Class class1 =Class.forName("IOTest.User");        System.out.println("Class.forName()----"+class1);        System.out.println("比较泛型类+++++");        System.out.println("对象.getclass()----"+aPair.getClass());        System.out.println("对象.getclass()----"+bPair.getClass());        System.out.println("类名.class----"+Pair.class);        /*         * 泛型类的类型查询只适用于原始类型.         * 如下测试  bPair是Pair<>泛型类的一个实例吗是错误的         * System.out.println(aPair instanceof Pair<T>); //Error         */        System.out.println("aUser 是User类的一个实例吗? "+(aUser instanceof User));        /*         * Class类本身就是泛型         * 对于普通类使用Class类的newInstance方法         * 这个newInstance方法调用无参的构造函数创建对象。         * 但泛型类pair<T>擦除类型变量<T>后变成Object后,表达式中不能用new T(..)或者T.class表述         */          User cUser=(User)class1.newInstance();         System.out.println("普通类----"+cUser);                 /* 泛型类不能创建参数化类型的数组        * Pair<User>[] tablePairs= new Pair<String>[10];//Error        * 但可以声明通配类型的数组,然后进行类型转换,如下        */        Pair<User>[] tablePairs=(Pair<User>[]) new Pair<?>[10];        tablePairs[0]=bPair;         System.out.println(bPair.first);                    }}

这里写图片描述


二.集合

这里写图片描述

//------------------------Person.javapackage LogInAndOut;public class Person {    int ID;    String Password;    public Person(int aID,String aPassword)    {        ID=aID;        Password=aPassword;         }    public String toString() {        // TODO Auto-generated method stub        return "[用户 ID: "+ID+" 密码 "+Password+"]";    }    @Override    public boolean equals(Object arg0) {        // TODO Auto-generated method stub        Person p=(Person)arg0;        return ID==p.ID&&Password.equals(p.Password);    }}
//----------------------Log.javapackage LogInAndOut;import java.util.*;public class Log{    public static void main(String[] args)     {        Collection Store=new ArrayList();        Store.add(new Person(111,"PassWord1"));        Store.add(new Person(123,"PassWord2"));        Store.add(new Person(1234,"PassWord3"));        Scanner input=new Scanner(System.in);        System.out.println("请选择:A: 注册.... B: 登录.... ");        String s=input.next().toUpperCase();                if(s.equals("A"))       //注册        {            System.out.println("------------开始注册-----------");            System.out.print("请输入你的id:");            int id=input.nextInt();            if(!Judge(Store,id))            {                System.out.println("该ID早已存在,请重新输入!");                   return ;            }            System.out.print("请输入你的密码:");            String password=input.next().toString();                    Person a=new Person(id,password);            System.out.println("注册成功!现在可以登录.");            Object[] obj=Store.toArray();            for(Object o:obj)                System.out.println("之前存储的信息为:"+(Person)o);                          }        else if(s.equals("B"))      //登录        {            System.out.println("------------开始登录-----------");            System.out.print("请输入你的id:");            int id=input.nextInt();            System.out.print("请输入你的密码:");            String password=input.next().toString();            Person a=new Person(id,password);            if(Store.contains(a))                System.out.print("登录成功!");            else                System.out.println("输入信息不存在,请重新输入!");                   }        else        {            System.out.println("选择有误,请重新输入!");            return;        }           }    /*    一下两种方法均可    */    //方法一    public static boolean Judge(Collection c,int p)    {        Object[] obj=c.toArray();        for(int i=0;i<obj.length;i++)        {            Person per=(Person)obj[i];            if(p==per.ID)                return false;        }        return true;    }    //方法二    public static boolean Judge(Collection c,int p)    {        Iterator it=c.iterator();        while(it.hasNext())        {            Person per=(Person)it.next();            if(p==per.ID)                return false;                       }        return true;        }}
原创粉丝点击