zoukankan      html  css  js  c++  java
  • Java201521123071《Java程序设计》第八周学习总结

    第八周-集合与泛型


    1. 本周学习总结

    1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容。

    1. <T extends Comparable>表示T是绑定类型(Comparable)的子类型。可以有多个绑定类型,如:<T extends Comparable & Serializable>
    2. 虚拟机内没有泛型类型信息,所有的对象都属于普通类!实际上泛型类就是一个普通类!!!类型擦除:清除类型参数信息,如将T替换为Object。T相当于无限定类型变量。
    3. 原始类型定义:没有任何类型参数的泛型接口或泛型类。实际上,对同一泛型类,给定不同的参数类型,只存在一个原始类型。
    4. 不能使用基本类型,要使用包装类型替换基本类型。如:不能用Pair<double>, 只能Pair<Double>
    5. Pair<? extends Employee>这里的Pair声明,它的类型参数是 Employee或者其子类
    

    2. 书面作业

    1. List中指定元素的删除(题集jmu-Java-05-集合之4-1)

    1.1 实验总结

    在convertStringToList()中,我也是才知道in.next()可以是“下一个”,之前分割字符串的时候我还一直用的split().还有就是这样的分函数操作,比较方便数据类型转换。

    1.2 截图你的提交结果(出现学号)

    2. 统计文字中的单词数量并按出现次数排序(尽量不要出现代码,题集jmu-Java-05-集合之5-3)

    2.1 伪代码(简单写出大体步骤)

    System.out.println(map.size());
    list = map.entrySet();    
    Collections.sort(list, compare);
    public int compare(left, right){
        return (right.getValue()-left.getValue());
    }
    for (int i = 0; i < 10; i++) 
        System.out.println(list.toArray()[i]);     
    

    2.2 实验总结

    这个实验上周就已经开始做了,但是那时候可能刚开始接触Entry,所以有点蒙,脑子转不过来,其实上周的时候已经基本总结完了,那时候也基本写出来了,就是搞错了那个compare的顺序,所以输出的结果才会很奇怪。
    

    2.3 截图你的提交结果(出现学号)

    3. 倒排索引(尽量不要出现代码,题集jmu-Java-05-集合之5-4)

    3.1 伪代码(简单写出大体步骤)

    while(in.next()){
    	for (String str : st) {
        	if(map.containsKey(str)){
                keys.add(line);//记录第几行
                map.put(str, keys);//存到map  
            } 
            else { 
            	key = new List;
            	key.add(line);//记录行数
            	map.put(str, key); //存到map 	
    		}	    		
    	}line++;
    }
    System.out.println(map.get(index));
    .....//后面的还想不到,不知道怎么写
    

    3.2 实验总结

    大概想法是说,给页码(索引值)建一个Arraylist收集,然后用map装关键字和索引值,通过line++实现行数统计,然后是根据索引值找到对应每个关键字,应该需要排序?或者说通过某种方法找到他们输出顺序?然后输出每行的文本信息,如果关键字找不到就输出“found 0 results”。
    

    4. Stream与Lambda:编写一个Student类,属性为:

    private Long id;
    private String name;
    private int age;
    private Gender gender;//枚举类型
    private boolean joinsACM; //是否参加过ACM比赛
    

    创建一集合对象,如List,内有若干Student对象用于后面的测试。

    4.1 使用传统方法编写一个方法,将id>10,name为zhang, age>20, gender为女,参加过ACM比赛的学生筛选出来,放入新的集合。在main中调用,然后输出结果。

    public static List<Student> StuTest(List<Student> student){
    	   List<Student> student0 = new ArrayList<Student>();
    	   for (Student stu : student) {
    		   if (stu.getId() > 10 && stu.getName().equals("zhang")&& stu.getAge() > 20 && stu.getGender().equals(Gender.Women)&&stu.isJoinsACM()) {
    			student0.add(stu);
    		   }
    	   }
    	   return student0;
    	}
    

    4.2 使用java8中的stream(), filter(), collect()编写功能同4.1的函数,并测试。

    public static List<Student> StuTest0(List<Student> student){
    		List<Student> student0 = (ArrayList<Student>) student.parallelStream()
    	        .filter(stu -> (stu.getId() > 10 && stu.getName().equals("zhang")
    	                && stu.getAge() > 20 && 
    	                stu.getGender().equals(Gender.Women)
    	                && stu.isJoinsACM()))
    	        .collect(Collectors.toList());
    		return student0;
    	}
    }//本来不是很会,后来参考了一下其他同学的...	    	
    

    4.3 构建测试集合的时候,除了正常的Student对象,再往集合中添加一些null,然后重新改写4.2,使其不出现异常。

     public static List<Student> StuTest0(List<Student> student){
    		List<Student> student0 = (ArrayList<Student>) student.parallelStream()
    	        .filter(stu -> (stu.getId() > 10 && stu.getName().equals("zhang")
    	                && stu.getAge() > 20 && 
    	                stu.getGender().equals(Gender.Women)
    	                && stu.isJoinsACM())  &&(stu != null))
    	        .collect(Collectors.toList());
    		return student0;
    	}
    }
    

    5. 泛型类:GeneralStack(题集jmu-Java-05-集合之5-5 GeneralStack)

    5.1 GeneralStack接口的代码

    interface GeneralStack<T>{
    	public T push(T item); 
    	public T pop();      
    	public T peek();      
    	public boolean empty();
    	public int size();    
    }
    

    5.2 结合本题,说明泛型有什么好处

    泛型的存在有点像接口,接口可以被不同的类操作,而因为泛型,我可以向不同的类,接口等等传输不同类型的对象,正如这道题一样,通过泛型,我向“实现类”传输不同类型的对象(Integer,double,Car)实现相同的功能。
    

    5.3 截图你的提交结果(出现学号)

    6. 泛型方法(基础参考文件GenericMain,在此文件上进行修改。)

    6.1 编写方法max,该方法可以返回List中所有元素的最大值。List中的元素必须实现Comparable接口。编写的max方法需使得String max = max(strList)可以运行成功,其中 strList为List类型。

    public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> list) {
    		return Collections.max(list);
    	}
    

    6.2 编写方法max1,基本功能同6.1,但让其所返回的值可以赋予其父类型变量。如有User类,其子类为StuUser,且均实现了Comparable接口。编写max1使得User user = max1(stuList);可以运行成功,其中stuList为List类型。也可使得Object user = max(stuList)运行成功。

    public static <T> T max1(Collection<? extends T> list,Comparator<? super T> com) {
    		return Collections.max(list, com);
    	}
    由以上两个实验总结:之前查书就知道了Collection有这个方法可以直接得到最大值,还有就是泛型里的几个用法:<? extends T>,<? super T>,&	
    

    3. 码云上代码提交记录及PTA实验总结

    3.1. 码云代码提交记录

    在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图

  • 相关阅读:
    c++求最大公约数、最小公倍数
    五个简单的shell脚本
    微信小程序slot(一)
    小程序详解子传父
    小程序封装组件详解父传子
    小程序生命周期详解
    小程序之confirm-type改变键盘右下角的内容和input按钮详解
    小程序之按钮你不知道的v2
    小程序image图片缩小不变形
    小程序之navigator跳转方式
  • 原文地址:https://www.cnblogs.com/HXY071/p/6715392.html
Copyright © 2011-2022 走看看