1. 本周学习总结

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

2. 书面作业

1. ArrayList代码分析

1.1 解释ArrayList的contains源代码

答:

ArrayList的contains方法的作用是,判断一个数组中是否包含某个对象,并返回boolean型。看源代码可知其用了indexOf方法,看indexOf源代码可知,如果存在这个对象则返回下标,下标不会小于0,而当不小于0时,contains返回的是true,相反,如果不存在则indexOf会返回-1,-1小于0,所以contains会返回false。

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

答:


remove方法调用rangeCheck方法来判断数组是否越界,如果越界就进入IndexOutOfBoundsException,没有就进行删除,然后修改数组长度。

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

答:不用,源代码中数组均为Object类型,Object是超级父类,所有类型均可以使用。

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

答:

add方法调用了ensureCapacityInternal方法判断数组是否要扩容,当需要扩容时会自动修改数组的长度。

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

答:private是为了隐藏这个方法,这个方法是在调用remove方法时才使用的用于判断数组是否越界,只需要在本类中调用,用户在使用remove方法时不需要知道具体实现内容。

2. HashSet原理

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

答:元素加入HashSet时,调用hashCode方法计算元素的值,由值算出该元素的存储位置,如果此位置没有值就将该元素加入哈希表,如果已有值则用解决冲突的方法将该元素添加进哈希表的相应位置。

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

答:哈希表通过计算来确定元素的位置,不是通过遍历,所以时间复杂度应该是O(1)。

3. ArrayListIntegerStack

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

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

答:在自定义接口ArrayIntegerStack中我使用的是private Integer[] ints;,即用数组完成;在这次pta中使用的是private List<Integer> arrList=new ArrayList<Integer>();,即用动态数组完成;主要的不同就是,动态数组不需要事先规定一个范围,能够自动增加长度,也不需要定义一个指针来指向栈顶,比数组方便了许多。

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

答:以3.1中的两个题目为例,它们实现了同一个接口,但实现的具体方法并不一样,一个使用数组实现,一个使用动态数组实现,这说明了接口的灵活,可以使用不同的方法来实现接口中的方法,减少代码量,增加代码复用性。

4. Stack and Queue

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

答:

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

答:

使用了LinkedList的实现类。

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

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

5.1 实验总结

答: 这是主要代码:while(true){ String word=sc.next(); if(word.equals("!!!!!")) break; words.add(word); }
逐个输入单词,用空格做间隔,如果出现!!!!!则结束循环,利用Set<String> words=new TreeSet<>();来对这些单词进行排序,再输出前十个单词。

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

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

6.1 伪代码

答:创建HashMap对象map,持续输入单词,当碰到!!!!!时结束循环;对输入的单词进行判定,若已经有同样单词则将对应的值加一,没有则添加到map中并设置初始值为1。

6.2 实验总结

答:

加入单词的方法与5-2相同,将单词放入哈希表中,在处理新加入的单词时,先判断是否已有该单词,若有则将对应的值+1,若没有则将单词放入哈希表,并设值为1;之后使用Collection中的sort方法进行排序输出。

3.码云及PTA

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

3.1. 码云代码提交记录

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

3.2 截图PTA题集完成情况图



需要有两张图(1. 排名图。2.PTA提交列表图)

3.3 统计本周完成的代码量

需要将每周的代码统计情况融合到一张表中。

周次 总代码量 新增代码量 总文件数 新增文件数
1 0 0 0 0
2 0 0 0 0
3 313 313 9 9
4 641 328 20 11
5 946 305 25 5
6 1451 505 32 7
7 1969 518 35 3
8 2284 315 43 8

最新文章

  1. 【AR实验室】ARToolKit之概述篇
  2. PowerBuilder -- 字符
  3. css雪碧图生成工具4.3更新
  4. windows界面库种类
  5. Subway Icon Set – 306个像素完美的特制图标
  6. Blackfin DSP(五):BF533的SPI接口
  7. 【WPF】控件使用-宽度自动适应窗口大小
  8. cocos2dx 兼容性
  9. Android中Google地图路径导航,使用mapfragment地图上画出线路(google map api v2)详解
  10. ttt
  11. JVM工作原理和特点(一些二逼的逼神面试官会问的问题)
  12. 蝕刻技術(Etching Technology)
  13. 201521123085 《Java程序设计》第11周学习总结
  14. windows版本的phantomjs-2.1.1-windows安装
  15. Android多Module下的Application引用方式
  16. MySQL学习11 - MySQL创建用户和授权
  17. ExtJS5搭建MVVM框架
  18. Linux 信号signal处理函数
  19. Cannot determine embedded database driver class for database type NONE
  20. Android四大组件应用系列——Activity与Service交互实现APK下载

热门文章

  1. gearman mysql持久化
  2. redis的安装配置(转)
  3. iOS 结构简单清晰的 设置页面
  4. 对”唯一键可以包含NULL值,并且每个NULL值都是唯一的(即NULL!=NULL)“理解
  5. Linux Shell编程 sed命令
  6. 一个不成熟的编程员,写写 js 的面向对象
  7. 系统封装接口层 cmsis_os
  8. python异步库
  9. 5.1深入理解计算机系统——系统级I/O
  10. python 中文字符的处理