java- week 8 集合

1. 本周学习总结

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

1121205-20171111095339309-71229246.png

2. 书面作业

1. ArrayList代码分析

1.1 解释ArrayListcontains源代码

1121205-20171111095604919-715645816.png
答:我们可以从源代码的注释可以知道,如果这个列表中包含指定的元素即满足(0==null?e==null:o.equals(e))的元素e时,则它的返回值为“true”。

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

1121205-20171111100631872-488083200.png
答:先判断所要删除的位置是否超出了数组大小:若超出,则抛出异常;若未超出,则删除该位置的元素(类似数组查找元素),并将该位置之后的元素逐一往前移,最后把空出来的位置设为null

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

答:不需要,因为ArrayList存储的数据都是Object类,Object是所有数据类型的父类,所以不需要考虑。

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

1121205-20171111101540716-1909214216.png
答:由源代码知使用了“ensureCapacityInternal方法”,确保数组容量是传入参数和默认长度的最大值即可。

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

1121205-20171111103337606-74723460.png

答:因为使用private声明,说明该方法只对同包的类和继承该类的子孙类可见。不用public作声明,是因为没有必要对外部可见。rangeCheck方法用于判断是否超出容量范围,无返回值。

2. HashSet原理

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

答:1、存储位置的确定:当集合中需要添加一个元素时,HashSet会先调用hashCode()方法得到该元素的哈希值,根据该值确定决定该对象在表中应存放的位置。如果表中已有其他元素,则调用equals()方法与数组中已有的元素进行比较。若比较的结果为false,则将对象插入数组中;若比较结果为真,则用新值替换旧值。

2、调用的方法:equals()方法和hashCode()方法

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

答:时间复杂度为:O(1),因为HashSet是由哈希表来实现的,所以在添加元素时不需要重新遍历。

3. ArrayListIntegerStack

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

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

答:答:使用 ArrayListIntegerStackArrayIntegerStack更为简单。
ArrayListIntegerStack是用ArrayList来实现栈,用它来实现的栈不需要考虑栈满的情况,因为ArrayList本身是可以自动扩容的。而ArrayIntegerStack是用数组来实现栈,需要考虑栈满的情况。

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

答:在3.1中表现的是:方法名可以相同(都是ArrayIntegerStack),而且都继承了IntegerStack接口,但是方法内的具体实现不一样;所以接口的好处体现在:接入同一个接口,完成同一功能,不考虑其具体的实现方法。

4. Stack and Queue

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

1121205-20171111110109091-2094927779.png

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

答:创建两个队列:A,B;当输入正整数为偶数时,进B队列,反之进A队列;
1121205-20171111110331575-1417789832.png

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

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

5.1 实验总结

答:因为题目要求最后按照字母顺序输出,所以需要排序后输出,我们知道TreeSet具有自动排序功能,因此这题应该选用TreeSet进行定义更为合适。

3.码云及PTA

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

3.1. 码云代码提交记录

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

1121205-20171111160731403-177219754.png

3.2 截图PTA题集完成情况图

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

1121205-20171111161115513-740775500.png
1121205-20171111161323497-420508922.png

3.3 统计本周完成的代码量

1121205-20171111161941731-365514518.png

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

转载于:https://www.cnblogs.com/288myl/p/7818330.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值