培训作业:泛型和集合

Posted Vanau

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了培训作业:泛型和集合相关的知识,希望对你有一定的参考价值。


一.泛型

/* 
 *文件名: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;    
    

以上是关于培训作业:泛型和集合的主要内容,如果未能解决你的问题,请参考以下文章

泛型和泛型集合

C#中的泛型和泛型集合

java里的泛型和通配符

七数组和集合(一维数组和二维数组的声明以及使用,ArrayList类,HashTable,List,Directory字典等常用集合(泛型和非泛型))

02.List泛型集合

java泛型和通配符