zoukankan      html  css  js  c++  java
  • 8

    1. 本周学习总结

    2. 书面作业

    1. 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;
    
    }
    

    解释:先判断对象是否为空,如果是,则遍历数组查看是否有null,若存在返回下标,没有则返回-1。若对象不为空,则用equals()比较数组中是否有与o相同的对象,有则返回下标没有则返回-1。

    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;           
    
     return oldValue;
    
    }
    

    解释:首先检查是否在范围内,然后删除元素,被删除的元素存到oldValue中,删除后的元素整体前移一位,把移除后的空位置设为null。

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

    不需要,ArrayList是动态数组,在存储数据的时候可以改变类型,变成object型,所以添加不同类型的元素不出错。

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

    public boolean add(E e) {
      
      ensureCapacityInternal(size + 1);  // Increments modCount!!   //判断是否要进行数组的扩容
    
        elementData[size++] = e;     
      
      return true;
    
    }
    
    private void ensureCapacityInternal(int minCapacity) {
       
     if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {            //  elementData为默认长度
       
         minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);                   // 传入参数,默认长度
      
      }
    
    
        ensureExplicitCapacity(minCapacity);
    
    }
    
    private void ensureExplicitCapacity(int minCapacity) {                         // 每调用一次就增加一次
      
      modCount++;
    
      
      // overflow-conscious code
        
    if (minCapacity - elementData.length > 0)         //如果数组长度不足就调用grow()
       
         grow(minCapacity);
    
     }
    
    
    private void grow(int minCapacity) {
          
     // overflow-conscious code
          
     int oldCapacity = elementData.length;
         
      int newCapacity = oldCapacity + (oldCapacity >> 1);//向右移动一位
          
     if (newCapacity - minCapacity < 0)
           
        newCapacity = minCapacity;
          
     if (newCapacity - MAX_ARRAY_SIZE > 0)
            
       newCapacity = hugeCapacity(minCapacity);
        
       // minCapacity is usually close to size, so this is a win:
        
       elementData = Arrays.copyOf(elementData, newCapacity);
      
     }
    

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

    rangeCheck用来判断数组是否越界,是内部调用,不需要别人了解是如何调用的,所以声明为private。

    2. HashSet原理

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

    当向HashSet中添加一个元素时,HashSet会调用该对象的hashCode()方法得到其hashCode值,然后根据该值决定该对象的存储位置,但是如果有两个元素通过equals()方法比较返回true,而它们的hashCode()方法返回值不等,HashSet也会将它们存储在不同的位置。
    方法:hashCode()方法、equals()方法

    2.2 将元素加入HashSet中的时间复杂度是多少?是O(n)吗?(n为HashSet中已有元素个数)

    将元素加入HashSet中的时间复杂度是O(1),不是O(n),因为可以直接加入,和元素个数无关

    3. ArrayListIntegerStack

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

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

    ArrayListIntegerStack是用List列表存储元素的,而采ArrayIntegerStack采用的是数组的形式存储的。

    3.2 结合该题简单描述接口的好处,需以3.1为例详细说明,不可泛泛而谈。

    对于这道题,两个ArrayIntegerStack方法接口内部名称都相同,但是对IntegerStack接口的实现不同进行不同,所以好处便是对要完成功能相似但是实现方法不一样的,可以使用的方法名称相同但是实现方法可以不同,来根据不同的需求来用不同的方法去实现

    4. Stack and Queue

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


    4.2 题集jmu-Java-05-集合之银行业务队列简单模拟(只粘贴关键代码)。请务必使用Queue接口,并说明你使用了Queue接口的哪一个实现类?

      //定义两个队列
    
      Queue<Integer> listA = new LinkedList<Integer>();
    
      
      Queue<Integer> listB = new LinkedList<Integer>();
     
     //入队
     
    for (int i = 0; i < m; i++) {
                
     int a = sc.nextInt();
               
      if (a % 2 == 1)
                
         listA.add(a);
             
        else
                   
      listB.add(a);
    
        }
    

    类通过使用LinkedList实现。

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

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

    5.1 实验总结

    利用 TreeSet排序,将单词按字母顺序排序输出,还有判断文章是否结束用if判断感叹号,用words.size统计单词个数。

    3.码云及PTA

    题目集:jmu-Java-05-集合

    3.1. 码云代码提交记录

    3.2 截图PTA题集完成情况图


    3.3 统计本周完成的代码量

    周次 总代码量 新增代码量 总文件数 新增文件数
    1 86 86 8 8
    2 342 342 10 10
    3 762 762 16 16
    4 762 0 16 0
    5 1229 967 24 8
    6 1752 523 29 5
    7 2117 365 33 4
    8 2493 376 36 3
    9 2887 511 43 7
  • 相关阅读:
    腾讯云环境配置之PHP5.6.3 + redis扩展 稳定版
    越狱后的ios如何用apt-get 安装各种命令
    批量 kill mysql 中运行时间长的sql
    谷歌Chrome浏览器开发者工具的基础功能
    话说好像是这样,ios下面通常用iframe来打开你的scheme地址; Android下通常用location.href来。。。 不过实际情况好像比这个复杂得多。。
    js判断移动端是否安装某款app的多种方法
    设计不错的网站
    BADIP filter
    开窗函数 函数() OVER()
    2018年1月初的一次面试题
  • 原文地址:https://www.cnblogs.com/biechusheng/p/7818671.html
Copyright © 2011-2022 走看看