培训作业:泛型和集合

Vanau Vanau     2022-12-04     372

关键词:


一.泛型

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

泛型和泛型集合

 泛型:通过参数化类型来实现在同一份代码上操作多种数据类型。利用“参数化类型”将类型抽象化,从而实现灵活的复用。usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Web;usingSystem.Web.UI;usingSystem.Web.UI.WebCon... 查看详情

c#中的泛型和泛型集合

泛型泛型引入了一个概念:类型参数。通过使用类型参数(T)减少了运行时强制转换或装箱操作的风险,通过泛型可以最大限度的重用代码,保护类型的安全及提高性能,他的最常见应用就是创建集合类,可以约束集合类中的元... 查看详情

02.list泛型集合

List泛型可以转换成数组List泛型和数组的相同点:List泛型的数据类型必须是指定的,数组的数据类型也必须是指定的.List泛型和数组的不同点:List泛型的长度是随意的,而数组的长度必须是在声明时就指定.因为List泛型集合的类型是唯... 查看详情

泛型和枚举

    泛型:        jdk1.5版本之后出现的新特性,用于解决安全问题,是一个安全机制.        泛型格式;通过<>定义操作的引用数据类型,在java提供的对象时,什么时候写泛型呢?       ... 查看详情

七数组和集合(一维数组和二维数组的声明以及使用,arraylist类,hashtable,list,directory字典等常用集合(泛型和非泛型))

数组数组就是一个集合,同一数据类型的一组值,是数量固定的相同类型元素的组合。数组属于引用类型数组的索引从0开始,就是说如果你想访问一个数组元素,你就得通过,相应元素的整数索引号访问。定义一维数组:数组... 查看详情

泛型和容器(代码片段)

一.不使用泛型的容器在JavaSE5之前,Java中是没有泛型这一概念的,那么容器没有泛型怎么使用呢?代码如下:ArrayListapples=newArrayList();//没有使用泛型apples.add(newApple());//集合可以添加Apple对象apples.add(newCar());//也可以添加Car对象在... 查看详情

java基础语法java的泛型和包装类(代码片段)

...章主要是为了后面学习集合框架所做的知识补充。补充了泛型以及包装类两个知识,但是该章泛型的讲解不够全面,主要是为了集合框架学习做铺垫。文章目录1.预备知识-泛型(Generic)1.1泛型的引入1.2泛型的分类... 查看详情

作业09-集合与泛型

作业09-集合与泛型1.本周学习总结1.1以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容。2.书面作业1.List中指定元素的删除(题集题目)1.1实验总结。并回答:列举至少2种在List中删除元素的方法。总结:remvoe方法的... 查看详情

201621044079韩烨作业09-集合与泛型

作业09-集合与泛型1.本周学习总结1.1以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容。1.2选做:收集你认为有用的代码片段2.书面作业本次作业题集集合1.List中指定元素的删除(题集题目)1.1实验总结。并回答:列... 查看详情

java泛型和内部类(代码片段)

文章目录一、泛型的概述1.概念2.泛型的定义3.泛型的使用4.泛型的意义5.泛型是如何编译的?二、泛型的进一步使用1.泛型类的定义-类型边界Number类2.泛型方法3.泛型中的父子类型4.通配符?通配符上界通配符下界5.泛型的... 查看详情

作业09-集合与泛型

...思维导图或其他)归纳总结集合与泛型相关内容。2.书面作业本次作业题集集合1.List中指定元素的删除(题集题目)1.1实验总结。并回答:列举至少2种在List中删除元素的方法。实验总结:sc.next()实现元素以空格为分隔符,add()方法放... 查看详情

作业09-集合与泛型

...思维导图或其他)归纳总结集合与泛型相关内容。2.书面作业本次作业题集集合1.List中指定元素的删除(题集题目)1.1实验总结。并回答:列举至少2种在List中删除元素的方法。2.统计文字中的单词数量并按出现次数排序(题集题目)2.... 查看详情

作业09-集合与泛型

...思维导图或其他)归纳总结集合与泛型相关内容。2.书面作业本次作业题集集合1.List中指定元素的删除(题集题目)1.1实验总结。并回答:列举至少2种在List中删除元素的方法。(1)在用for循环add进去元素之后,接下来的remove操作中,... 查看详情

作业09-集合与泛型

...思维导图或其他)归纳总结集合与泛型相关内容。2.书面作业1.List中指定元素的删除(题集题目)1.1实验总结。并回答:列举至少2种在List中删除元素的方法。总结:本题要求编写两个函数convertStringToList(Stringline)和remove(List在List删... 查看详情

作业09-集合与泛型

1.本周学习总结1.1以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容。1.2选做:收集你认为有用的代码片段while(true){Stringstr=sc.nextLine();String[]str1=str.split("");if(str1[0]==null)System.out.println("found0results");else{if(map.containsKey... 查看详情

java里的泛型和通配符

...来,取出A,B单独的对象希望我的回答你满意。参考技术A泛型可以用"<T>"代表,任意类型的。解释:“<T>”是泛型的默认值,可以被任意类型所代替,如:List<String>list=newArayList<String>();这个就定义了一个... 查看详情

java泛型和通配符那点事

泛型(Generictype或者generics)是对Java语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类。可以把类型参数看作是使用参数化类型时指定的类型的一个占位符,就像方法的形式参数是运行时传递的值的占位符... 查看详情

java泛型和通配符(代码片段)

java泛型/通配符泛型E-Element(在集合中使用,因为集合中存放的是元素)T-Type(表示Java类,包括基本的类和我们自定义的类)K-Key(表示键,比如Map中的key)V-Value(表示值)N-Number(表示数值类型)?-(表示不确定的java类型)为什... 查看详情