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

    1. 本章学习总结

    2. 书面作业

    Q1. ArrayList代码分析

    1.1 解释ArrayList的contains源代码

      答:代码如下
    
     public boolean contains(Object o) {
                return indexOf(o) >= 0;
             }
              public int indexOf(Object o) {
                if (o == null) {
                    for (int i = 0; i < size; i++)
             if (elementData[i]==null)
             return i;
             } else {
             for (int i = 0; i < size; i++)
             if (o.equals(elementData[i]))
             return i;
              }
              return -1;
              }
              public boolean equals(Object obj) {
             return (this == obj);
             }
    
     contains方法返回indexOf(o)》=0;indexOf方法先判断o是否为空,若为空则返回-1,跳出,程序false,不为空则执行下一步,判断elemenData【i】是否为空,为空返回i,i++重新判断,若不为空则执行equals方法,equals方法的作用是判断o和elemenData【i】是否相等,若相等则返回序号i,
    

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

     答:代码如下
    
    public E remove(int index) {
        rangeCheck(index);
    
        modCount++;
        E oldValue = elementData(index);
    
        int numMoved = size - index - 1;
        if (numMoved > 0)
            System.arraycopy(elementData, index+1, elementData, index,
                                 numMoved);
        elementData[--size] = null; // clear to let GC do its work
    
        return oldValue;
    }
    private void rangeCheck(int index) {
        if (index >= size)
            throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
    }
    
     remove的源代码是执行删除操作,先rangCheck()判断index是否超过数组大小,若超过则抛出IndexOutOfBoundsException()异常,不超过执行删除,然后后一个补前一个,到最后size-1为空,在处理掉。
    

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

     答:需要,java中,数组可以存放基本数据类型,而集合就不行,集合中存放的必须是对象。但可以转换。将基本数据类型转换为对象
    

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

     答:代码如下
    
    public boolean add(E e) {
        ensureCapacityInternal(size + 1);  
        elementData[size++] = e;
        return true;
    }  
    
    private void ensureCapacityInternal(int minCapacity) {
        if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
            minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);
        }
    
        ensureExplicitCapacity(minCapacity);
    }
        modCount++;
        if (minCapacity - elementData.length > 0) 
            grow(minCapacity);
    }   
    
    private void grow(int minCapacity) {
        int oldCapacity = elementData.length;
        int newCapacity = oldCapacity + (oldCapacity >> 1); 
        if (newCapacity - minCapacity < 0)
            newCapacity = minCapacity;
        if (newCapacity - MAX_ARRAY_SIZE > 0)
            newCapacity = hugeCapacity(minCapacity);
        elementData = Arrays.copyOf(elementData, newCapacity); 
    }  
    
    如果超出容量,则调用grow方法增加到一点五倍容量。把旧数组拷贝至新数组,并不是增加原来数组的大小,而是引用了一个大小为原来数组1.5倍的新数组。
    

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

     答:代码如下
    
    private void rangeCheck(int index) {
        if (index >= size)
            throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
    }
    
    private的属性是只能被包里或子类访问,不能被外部访问,所以显然是为了防止被外部的访问。
    

    Q2.HashSet原理

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

     答:确定储存地址需要调用hashCode方法计算地址,根据哈希码找到对应的捅,如果桶中已有元素,调用equals比较对象是否相等,若不相等将值插入,相等用新值替换旧值。用到hashCode()和equals()方法。
    

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

     答:分析完了,至少我知道的都在上面了。
    

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

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

     答:主要区别:动态数组和内部实现数组,ArrayListIntegerStack内部使用ArrayList动态对象存储。jmu-Java-04-面向对象2-进阶-多态、接口与内部类中的题目5-3自定义接口ArrayIntegerStack内部使用Integer数组储存。因为动态数组和普通数组的区别出栈和入栈也会有区别。
    

    3.2 简单描述接口的好处.

     答:接口可以有多个实现,一个类可以实现多个接口,所以接口有 简单、规范性:如果一个项目比较庞大,那么就需要一个能理清所有业务的架构师来定义一些主要的接口;安全、严密性:接口是实现软件松耦合的重要手段,它描叙了系统对外的所有服务;而不涉及任何具体的实现细节。这样就比较安全、严密一些;
    

    Q4.Stack and Queue

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

      答:代码如下
    
    	 public static void main(String[] args) {
    		  String str = "201521123053";
    		  System.out.println(str + "回文数:" + isPalindrome(str));
    		   
    		  str = "201521123053";
    		  System.out.println(str + "回文数:" + isPalindrome(str));
    		 }
    		 public static boolean isPalindrome(String pValue){
    		  List<Character>  stack = new ArrayList<Character>();
    		  List<Character>  stack2 = new ArrayList<Character>();
    		  int haflen = pValue.length()/2;
    		   
    		  for(int i=0;i<haflen;i++){
    		   stack.add(pValue.charAt(i));
    		   stack2.add(pValue.charAt(pValue.length()));
    		  }
    		  boolean bFlag = true;
    		  for(int i=haflen-1;i>=0;i--){
    		   if(stack.remove(i) != stack2.remove(i)){
    		    bFlag = false;
    		    break;
    		   }
    		  }
    		  return bFlag;
    		 }
    		}
    		 
    
    }
    

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

      答:
    

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

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

    5.1 实验总结

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

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

    6.1 伪代码

    6.2 实验总结

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

    3.1本周Commit历史截图

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

    3.2 实验总结

    实验碰到的问题、思考、收获与解决方案

    4. 其他的一些题目,如特别加分的实验题目、小任务、自己用Java做的一些小东西(可选,加分)

  • 相关阅读:
    STL_算法_05_集合算法
    STL_算法_04_算术和生成算法
    STL_算法_03_拷贝和替换算法
    STL_算法_02_排序算法
    STL_算法_01_查找算法
    STL_容器使用时机
    STL_容器共通能力
    Qt5_选择文件对话框
    Qt5_当前exe所在路径
    Java 静态代理和动态代理
  • 原文地址:https://www.cnblogs.com/Einsten/p/6681149.html
Copyright © 2011-2022 走看看