201621123018《Java程序设计》第8周学习报告

1. 本周学习总结

以你喜欢的方式(思维导图或其他)归纳总结集合相关内容。
1121080-20171111102501653-1480502137.png

2. 书面作业

1. ArrayList代码分析

1.1 解释ArrayList的contains源代码

1121080-20171111102514028-866823299.png

contanis方法用indexOf来判断,有点像遍历数组一样,一个一个元素比较过去,其中也用到了equals方法。

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

1121080-20171111102525794-935041331.png

先找到所要删除的元素,然后将其一处,然后将后续元素全部往前移动,长度减一。

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

不需要,因为Object类为所有类的父类。

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

会调用grow方法,来扩大数组容量

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

因为该方法是用来判断数组是否越界,不需要让外界来访问它。

2. HashSet原理

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

  • 当我们象HashSet添加元素是,HashSet会调用hashCode()方法计算出hashCode值,就确定了元素的存储位置。如果桶中已经有其他元素,就调用equals()方法与已有元素比较,如果比较结果为假,则将对象插入。如果比较结果为真,则用新的值替换旧的值
  • 调用了hashCode()方法和equals()方法

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

    O(1)

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

    3. ArrayListIntegerStack

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

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

    1121080-20171111102637200-1293014942.png
    1121080-20171111102645497-26235930.png

  • ArrayListIntegerStack使用动态数组;ArrayIntegerStack使用数组。
  • ArrayListIntegerStack调用ArrayList自身的方法来实现操作,ArrayIntegerStack用指针top来实现操作

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

    接口只写了方法名,没有具体的实现过程,可以有多种实现方法。

    4. Stack and Queue

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

      package week08;
      import java.util.ArrayList;
      import java.util.Arrays;
      import java.util.List;
      import java.util.Scanner;
      class ArrayIntegerStack implements IntegerStack{
    
          private List<Character> arrlist = new ArrayList<Character>();
    
          public void push(char c) {
              arrlist.add(c);
          }
    
          @Override
          public void pop() {
              arrlist.remove(arrlist.size()-1);   
          }
    
          @Override
          public Character peek() {
              char temp = arrlist.get(arrlist.size()-1);
              return temp;
          }
    
          @Override
          public boolean empty() {
              if(arrlist.size()==0)
                  return true;
              return false;
          }
    
          @Override
          public int size() {
              return arrlist.size();
          }
    
      }
      interface IntegerStack<ArrayIntegerStack> {
          public void push(char c);
          public void pop();   
          public Character peek();  
          public boolean empty();
          public int size();      
      }
      public class Main201621123018{
          public static void main(String[] args) {
              Scanner in = new Scanner(System.in);
              ArrayIntegerStack stack = new ArrayIntegerStack();
              String str = in.next();
              char[] ch = str.toCharArray();
              for (char c : ch) {
                  stack.push(c);
              }
              int flag = 1;
              for (int i = 0; i < stack.size(); i++) {
                  if(ch[i] != stack.peek()){
                      flag = 0;
                      break;
                  }
                  stack.pop();
              }
              if(flag==0)
                  System.out.println("不是回文");
              else
                  System.out.println("是回文");
          }
      }

    1121080-20171111102705403-87917202.png
    1121080-20171111102714091-964237684.png

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

    while(!(queueA.isEmpty() && queueB.isEmpty())){
        if(queueA.isEmpty()){
            while(!queueB.isEmpty()){
                temp.add(queueA.poll());
            }
        }
        if(queueB.isEmpty()){
            while(!queueA.isEmpty()){
                temp.add(queueA.poll());
            }
        }
        if(!queueA.isEmpty() && !queueB.isEmpty()){
            if(queueA.size() == 1)
                temp.add(queueA.poll());
            if(queueA.size() >= 2){
                temp.add(queueA.poll());
                temp.add(queueA.poll());
            }
            temp.add(queueB.poll());
        }
    }

用了LinkedList实现类

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

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

5.1 实验总结

本题用到了TreeSet,利用了其排序的功能,在定义一个flag来控制输出前是个单词

while(true){
    String word = in.next();
    if(word.equals("!!!!!"))
        break;
    words.add(word);
    }
    
    
int flag = 0;
for (String e : words) {
    if(flag == 10)
        break;
    System.out.println(e);
    flag++;
}

6. 选做:统计文字中的单词数量并按出现次数排序

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

6.1 伪代码

6.2 实验总结

本题运用到了HashMap,key表示单词,value表示单词出现次数。程序中主要完成两个部分,一个是将keyvalue对应起来,另一个是要实现keyvalue的排序。

    while(true){    //key和value对应
        String word = in.next();
        if(word.equals("!!!!!"))
                break;
        if(map.get(word) == null){
            map.put(word, new Integer(1));
            
        }
        else{
            Integer temp = (Integer)map.get(word);
            temp = new Integer(temp.intValue()+1);
            map.put(word, temp);
        }
    }
    
    //排序
List<Map.Entry<String, Integer>> infoIds =new ArrayList<Map.Entry<String, Integer>>(map.entrySet());
    Collections.sort(infoIds, new Comparator<Map.Entry<String, Integer>>() {   
        public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
            if(o2.getValue() - o1.getValue()==0)
                return (o1.getKey()).toString().compareTo(o2.getKey());
            return (o2.getValue() - o1.getValue()); 
        }
    }); 

3.码云及PTA

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

3.1. 码云代码提交记录

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

3.2 截图PTA题集完成情况图

需要有两张图(1. 排名图。2.PTA提交列表图)
1121080-20171111102801559-478566597.png
1121080-20171111102815575-2023282058.png

3.3 统计本周完成的代码量

需要将每周的代码统计情况融合到一张表中。
1121080-20171111102827903-1382118643.png

周次总代码量新增代码量总文件数新增文件数
11601604949
2387227556
3630243594
4968238655
51171203694
61626445778
72061435803
82385324866

转载于:https://www.cnblogs.com/hamawep789/p/7818424.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值