作业08-集合

1. 本周学习总结

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

2. 书面作业

1. ArrayList代码分析

1.1 解释ArrayList的contains源代码

其源码为:

  public boolean contains(Object o) {
        return indexOf(o) >= 0;
    }

而indexOf()的源码又为:

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

由此可见indexOf()的作用为查找值为给定参数的动态数组元素个数(-1);若其返回值大于等于0,则代表数组中包含相应元素,这便是Contains方法的原理。

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

此处不再赘述E remove(int index)源码。由源码可知,数组中移除一个元素时先检测并整体复制将其后的元素向前移动一位,最后再将最后的位置填充null。

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

不需要,因为其操作的对象都是引用,其基础操作也都是附加于引用上面的,至于具体引用的是什么类型的数据则没有要求。

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

将数组原始长度乘以二。

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

次方法只有在ArrayList类内部才会调用,声明为私有可以更好体现java严密的封装特性,是的数据结构更加安全。

2. HashSet原理

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

根据阿西映射原理,计算出储存块位置,再挨个比较内容;

需要调用的方法有getHash、equals。

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

由于其储存区块是由计算哈希值得出,所以时间复杂度为O(1)。

3. ArrayListIntegerStack

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

不同的是:

  1. 这次直接使用java自带的集合类填充栈的方法,代码更简洁,花的时间更少,更方便。
  2. 继承Stack接口,代码进一步简洁。

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

像之前那样我们还要用top指针,还要考虑栈溢出和空栈的情况,虽然使用集合类后仍然要进行考虑但是一个isEmpty方法就足够了,还是相当简洁明了的。

而且以前还要考虑实现栈的所有必须方法,自己纯手动,但是继承了接口后就不一样了,所有必须具有必须实现的方法都一键生成源代码,我们只需要填充内容就好了,不必担心少写漏写。

4. Stack and Queue

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


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

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

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

主要是使用了TreeSet既实现了统计也实现了排序,这道题还是很简单的,使用字符串的默认比较方法即可,打码量也比较少。

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

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

创建HashMap对象map<String,Integer>
循环读入所输入单词
IF 读入”!!!!!”
	退出循环
ELSE
    IF map中没有相应的单词(key)
        添加单词到map中并设置value为1
    ELSE 
        将key对应的value值加1
创建对象list
实现Collections接口对map对象进行排序
输出map的长度
输出排序后list中前十个数据

6.2 实验总结

后面检索这道题我用的Map集合来用单词映射所在行数,多次检索是靠Set集合之间的交并实现,比较费解与麻烦,我在想应该是会有更简单的方法的。

然后我觉得最难搞的地方就是那个多次检索,虽然最后做出来了但总觉得方法不对。

3.码云及PTA

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

3.1. 码云代码提交记录

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

3.2 截图PTA题集完成情况图

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

3.3 统计本周完成的代码量

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

不知道为什么,重新安了下软件改了个名字就成这样子了,这周打了好多代码呢

posted @ 2017-11-10 22:12  jmu贾海涛  阅读(280)  评论(1编辑  收藏  举报