1. 本周学习总结
以你喜欢的方式(思维导图或其他)归纳总结集合相关内容。
2. 书面作业
1. ArrayList代码分析
1.1 解释ArrayList的contains源代码
contains方法在执行后首先会调用indexOf()方法。indexOf()方法会判断传入的对象是否为空,如果为空,则遍历整个集合的元素,如果集合的某个元素为空,返回该元素的下标。如果传入对象不为空,则遍历整个集合的元素,如果该元素和集合内某个元素的equals比较结构为true,返回该元素下标。
1.2 解释E remove(int index)源代码
调用rangeCheck方法判断index是否越界,删除集合中index位置上的元素,并且在删除位置之后的元素向前移动一位,将最后一位为空
1.3 结合1.1与1.2,回答ArrayList存储数据时需要考虑元素的具体类型吗?
ArrayList存储数据时不需要考虑元素的具体类型
1.4 分析add源代码,回答当内部数组容量不够时,怎么办?
内存数组容量不够时,调用ensureExplicitCapacity实现数组的扩容,并将插入元素位置后的剩余元素的下标进行修改
1.5 分析private void rangeCheck(int index)源代码,为什么该方法应该声明为private而不声明为public?
rangeCheck方法是在remove元素时用于判断是否出现数组越界的情况,只要在本类中调用
2. HashSet原理
2.1 将元素加入HashSet(散列集)中,其存储位置如何确定?需要调用那些方法?
采用Hash算法决定集合元素的存储位置,发生冲突时,则连接在发生冲突的元素的后面,用链表连接。需要用到hashCode()方法和equals()方法。
2.2 将元素加入HashSet中的时间复杂度是多少?是O(n)吗?(n为HashSet中已有元素个数)
将元素加入HashSet中的时间复杂度是O(1)
3. ArrayListIntegerStack
题集jmu-Java-05-集合之ArrayListIntegerStack
3.1 比较自己写的ArrayListIntegerStack与自己在题集jmu-Java-04-面向对象2-进阶-多态、接口与内部类中的题目自定义接口ArrayIntegerStack,有什么不同?(不要出现大段代码)
存储形式上存在不同,ArrayIntegerStack是数组的方法来存储栈,而ArrayListIntegerStack是用动态数组来进行存储,可以自动改变数组的大小
3.2 结合该题简单描述接口的好处,需以3.1为例详细说明,不可泛泛而谈。
ArrayIntegerStack和ArrayIntegerStack都继承了自定义接口IntegerStack,但使用了不同存储方式,使得代码地使用更加方便
4. Stack and Queue
4.1 编写函数判断一个给定字符串是否是回文,一定要使用栈(请利用Java集合中已有的类),但不能使用java的Stack类(具体原因自己搜索)与数组。请粘贴你的代码,类名为Main你的学号。
4.2 题集jmu-Java-05-集合之银行业务队列简单模拟(只粘贴关键代码)。请务必使用Queue接口,并说明你使用了Queue接口的哪一个实现类?
使用了使用了Queue接口的LinkedList实现类
5. 统计文字中的单词数量并按单词的字母顺序排序后输出
题集jmu-Java-05-集合之5-2 统计文字中的单词数量并按单词的字母顺序排序后输出 (作业中不要出现大段代码)
5.1 实验总结
实验主要是运用了Set集,用TreeSet来存储数据可以排除重复的元素
3.码云及PTA
题目集:jmu-Java-05-集合
3.1. 码云代码提交记录
在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图
3.2 截图PTA题集完成情况图
需要有两张图(1. 排名图。2.PTA提交列表图)
3.3 统计本周完成的代码量
需要将每周的代码统计情况融合到一张表中。
周次 | 总代码量 | 新增代码量 | 总文件数 | 新增文件数 |
---|---|---|---|---|
9 | 2547 | 596 | 47 | 13 |