培训作业:泛型和集合


一.泛型

/* 
 *文件名: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.java
package 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.java
package 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;    
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值