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

    1. 本周学习总结

    2. 书面作业

    ArrayList代码分析

    1.1 解释ArrayList的contains源代码

    答:ArrayList的Contains的源码如上图所示,如果o为null,那么就去找elementData数组是否有为null的对象,如果有则返回下标,没有则返回-1。如果o不为null,就通过equals去比较elementData数组中的元素是否有与o相同的对象,如果有则返回下标,没有则返回-1。这里判断 o==null主要就用来确定是否要使用 o.equals(),最终contains方法就是如果有包含这个元素泽返回ture,否则返回false。
    

    1.2 解释E remove(int index)源代码

    答:E remove(int index)源代码如上图所示,先判断是否越界,然后获取从要移除的元素index开始到最后一个元素的个数,再将elementData数组index+1位置开始复制到elementData从index开始的空间,最后使数组的size减1,最终remove方法会返回要移除的那个数。
    

    1.3 结合1.1与1.2,回答ArrayList存储数据时需要考虑元素的类型吗?

    答:不用考虑,ArrayList存储的数据都要是引用类型,而且ArrayList存储数据实际上是用Object的数组,之前有说过Object类是所有类的默认父类,所以除了基本类型就不需要考虑存储元素的类型了。
    

    1.4 分析add源代码,回答当内部数组容量不够时,怎么办?



    答:add是在list的末尾进行操作的,ensureCapacityInternal()确保数组有空间给新加进来的元素,如果需要加进来的空间比当前的空间大的话,就会使用grow()方法来进行扩容,grow中的Increases the capacity to ensure that it can hold at least the number of elements specified by the minimum capacity argument.(增加能力以确保它能够容纳至少由最小容量参数指定的元素数量。)说明add内部数组容量不够时可以扩大容量直到可以满足条件为止。
    

    1.5 分析private void rangeCheck(int index)源代码,为什么该方法应该声明为private而不声明为public?

    答:因为该方法只是用来判断给定的索引是否在范围内,有没有越界,外部并不需要访问它,更不能修改它,只需要知道结果就好,所以声明为private即可。
    

    HashSet原理

    2.1 将元素加入HashSet(散列集)中,其存储位置如何确定?需要调用那些方法?

    答:向散列表中插入一个新元素时,首先会调用hashCode()方法得到相应的散列码,根据散列码,决定存储位置,除此之外,Set中的元素是唯一的,所以要使用equals()方法确保对象的唯一性,若equals()方法返回值为假,则把新元素插入散列表中,如果返回值为真,则用新的元素替换旧的值。
    

    2.2 选做:尝试分析HashSet源代码后,重新解释1.1

    ArrayListIntegerStack

    题集jmu-Java-05-集合之5-1 ArrayListIntegerStack

    3.1 比较自己写的ArrayListIntegerStack与自己在题集jmu-Java-04-面向对象2-进阶-多态、接口与内部类中的题目5-3自定义接口ArrayIntegerStack,有什么不同?(不要出现大段代码)

    答:这次的是使用ArrayList来实现的,上次的是使用Integer数组来实现的。上次的push和pop都需要用到top指针,这次的需要用到remove。
    
    public Integer pop() {	//ArrayListIntegerStack
        if(list.isEmpty())
            return null;
        return list.remove(list.size()-1);
    }
    
    public Integer pop() {  //ArrayIntegerStack
    		top--;
    		if(top==-1){
    			top++;
    			return null;
    		}	
    		return array[top];
    	}
    

    3.2 简单描述接口的好处.

    答:接口本身只是定义了几个方法,没有实际意义,具体的实现是要在实现它的类中进行的,比如ArrayListIntegerStack和ArrayIntegerStack这两个类都实现了IntergerStack这个接口,但是它们中间的一些实现方法不同,如上题说到的push和pop方法不同,修改一个类中的push方法并不会影响到另一个类中的push方法,这就是接口的好处。
    

    Stack and Queue

    4.1 编写函数判断一个给定字符串是否是回文,一定要使用栈,但不能使用java的Stack类(具体原因自己搜索)。请粘贴你的代码,类名为Main你的学号。

    public class Main201521123039 {
    	public static void main(String[] args) {
    		Scanner input = new Scanner(System.in);
    		StringStack s = new ArrayListStringStack();
    		String str = input.next();
    		int a = 1;
    		for (int i = 0; i < str.length(); i++) {
    			s.push(String.valueOf(str.charAt(i)));//把输入的字符串分成一个个字符存入栈
    		}
    		for (int j = 0; j < str.length(); j++) {
    			if (String.valueOf(str.charAt(j)).equals(s.pop()));//出栈的结果和入栈的相比较
    			else
    				a = 0;//如果出栈和入栈的结果不同,则把0赋值给a,否则a值不变
    		}
    		if (a == 1)
    			System.out.println("该字符串是回文!");
    		else
    			System.out.println("该字符串不是回文!");
    	}
    
    }
    

    4.2 题集jmu-Java-05-集合之5-6 银行业务队列简单模拟。(不要出现大段代码)

    while(!qa.isEmpty()){
    			if(!qa.isEmpty()){
    				qc.add(qa.poll());
    				qc.add(qa.poll());
    			}
    			if(!qb.isEmpty())
    				qc.add(qb.poll());
    		}
    		while(!qc.isEmpty()){
    			int j=0;
    			if(j<qc.size()-1){
    				System.out.print(qc.poll()+' ');
    				++j;
    			}
    			else
    				System.out.print(qc.poll());
    		}
    
    
    题目要求A窗口处理完2个,B窗口才处理完一个,为了方便输出,先把2个队列合并为一个再输出,最后一定要注意不要留有空格!
    

    统计文字中的单词数量并按单词的字母顺序排序后输出

    题集jmu-Java-05-集合之5-2 统计文字中的单词数量并按单词的字母顺序排序后输出 (不要出现大段代码)

    while(input.hasNext()){
    			String str=input.next();
    			if(str.equals("!!!!!"))
    				break;
    			if(!list.contains(str))
    				list.add(str);
    		}
    		System.out.println(list.size());
    		Collections.sort(list);
    

    5.1 实验总结

    总结:一开始写的时候没有考虑重复的单词,所以没使用contains方法,直接使用数组,最后统计出来的是所有的单词数量为60。
    

    选做:加分考察-统计文字中的单词数量并按出现次数排序

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

    6.1 伪代码

    if(映射表中有这个单词)
        n加1;
    else
        map.put(该单词);
    sort(映射表);
    输出map.size;
    输出排名前10的单词及数量;
    

    6.2 实验总结

    总结:当时没注意Map<String, Integer>的String和Interger的顺序,所以在写sort函数的时候,在Comparator上出了问题,后来解决了。
    

    面向对象设计大作业-改进

    7.1 完善图形界面(说明与上次作业相比增加与修改了些什么)

    7.2 使用集合类改进大作业

    3.1. 码云代码提交记录

    我的码云好像出了问题了。。。提交就会出现下面的提示
    

    3.2. PTA实验

    实验总结已经在作业中体现,不用写。
  • 相关阅读:
    Bash简单介绍
    三大框架常遇的错误:hibernate : object references an unsaved transient instance
    第二十八篇: 学习笔记
    oracle表空间查询维护命令大全之二(undo表空间)
    JSON 数据的系统解析
    MySQL字符串函数
    HDU ACM 1025 Constructing Roads In JGShining&#39;s Kingdom-&gt;二分求解LIS+O(NlogN)
    实时竞价RTB广告平台_传漾科技_中国领先的智能数字营销引擎
    秒聘网-产品经理招聘,免费、专注、极速
    “小鸟推送”从DSP做到营销效果最大化,挂牌新三板后正在寻求B轮定增
  • 原文地址:https://www.cnblogs.com/wx-jum/p/6665852.html
Copyright © 2011-2022 走看看