第八次作业

1. 本周学习总结

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

2. 书面作业

1. ArrayList代码分析

1.1 解释ArrayList的contains源代码

首先调用了indexOf方法。而indexOf方法则是判断传入的参数是否为空,若为空,则遍历整个列表,直到遇到某个为空的元素,返回其下标;若不为空,则遍历整个列表,直到遇到某个值与参数相等的元素,返回其下标。若遍历完后还未找到与参数值相等的元素,则返回-1。contains方法通过判断调用indexOf方法返回的值是否大于等于0来判断列表中是否存在该元素。

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



首先调用rangeCheck()方法判断数组是否越界,然后再把被移除的元素后面的元素往前移动一位,最后修改数组大小。

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

不需要,通过以上两题的源代码可以发现传入参数都为Object类型,object是java类中的基类,所有类都继承object,所以设置形参为object时,其他所有类型都可以传入。

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



实际上Arraylist是有初始容量的,且初始容量为10,所以首先调用ensureCapacityInternal()方法判断是否需要对数组进行扩容,若需要则调用ensureExplicitCapacity()实现扩容。

首先判断指定位置是否越界,不越界的话再类似add(E e)进行扩容判断、添加元素。

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

因为该方法只是用来判断数组是否越界,用户只需要知道结果不需要知道方法的实现过程。

2. HashSet原理

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

首先调用hashCode()计算出待存储对象的散列码(HashCode),作为存储的位置的依据,若发生冲突,则调用equals()方法与已有元素进行比较,若比较结果为假,就将该元素通过解决冲突的方法放入对应的位置中,若比较结果为真,就用新值替换旧值。

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

时间复杂度为O(1),因为HashSet是通过哈希算法来实现的,该过程不需要遍历,是直接计算位置来添加元素。

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

3. ArrayListIntegerStack

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

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

本次的ArrayListIntegerStack是用动态数组写的,而上次的ArrayIntegerStack是用数组实现的。

存储形式的不同导致了后面操作方法的不同。

动态数组获取栈顶元素,可以通过size()方法来获取栈顶位置,而数组则需要自定义栈顶指针,通过指针的移动来获取栈顶位置。

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

我们之前已经编写过接口及实现该接口的ArrayIntegerStack,现在我们要新定义一个类ArrayListIntegerStack,只需要实现这个接口,然后自动添加接口里的方法,再把这些方法填充实现即可。方便灵活,不用再一个一个编写方法,同时可以根据不同的工作环境来使用不同的方式来实现接口里的方法。

4. Stack and Queue

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

import java.util.LinkedList;
import java.util.Scanner; public class Main201621123033{
public static void main(String[] args){
LinkedList<Character> stack=new LinkedList<Character>();
Scanner sr=new Scanner(System.in);
String str=sr.next();
char[] ch=str.toCharArray();
boolean flag = true;
for(int i=0;i<str.length();i++){
stack.add(ch[i]);
}
for(int i=0;i<str.length();i++){
if(stack.pollLast().equals(ch[i])){
flag=true;
}
else{
flag=false;
break;
}
}
if(flag==true)
System.out.println("这是回文");
else
System.out.println("这不是回文");
} }

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

        Queue<Integer> q1=new LinkedList();
Queue<Integer> q2=new LinkedList();

使用了Queue接口的LinkedList实现类。

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

题集jmu-Java-05-集合之5-2 统计文字中的单词数量并按单词的字母顺序排序后输出

5.1 实验总结

该题使用了TreeSet来存储数据,TreeSet具有排序功能且不会添加重复的数据。

首先使用next()方法来获取单词并调用add()方法将其添加到Set中,然后打印出单词数量。接下来定义一个计数用的变量count,遍历Set中的元素,并打印出来,每打印一次count就+1,直到count大于等于10则跳出循环。

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

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

6.1 伪代码

创建HashMap对象map

开始循环

IF 读入单词为"!!!!!"

退出循环

ELSE IF map中没有对应key

添加单词到map中并设置value为1

ELSE

将key对应的value值加1

创建ArrayList对象list

实现Collections接口对map对象进行排序

输出map的长度

输出排序后list中前十个数据

6.2 实验总结

一开始是先创建了一个String[]类型的对象来存储这些输入的单词,然后想一个个遍历再放进map中,结果发现放入map的过程中会出现空指针错误,最后参照7-2的方式,输入一个单词就放进map中。后面排序使用ArrayList实现Colletions接口来实现。

3.码云及PTA

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

3.1. 码云代码提交记录

3.2 截图PTA题集完成情况图

3.3 统计本周完成的代码量

周次 总代码量 新增代码量 总文件数 新增文件数
3 547 547 12 12
5 971 424 20 8
6 1577 606 29 9
7 2187 1216 41 21
8 2793 606 49 8
9 3040 247 56 7

201621123033 《Java程序设计》第8周学习总结的更多相关文章

  1. 20145213《Java程序设计》第九周学习总结

    20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...

  2. 20145213《Java程序设计》第二周学习总结

    20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...

  3. 20145213《Java程序设计》第一周学习总结

    20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...

  4. 21045308刘昊阳 《Java程序设计》第九周学习总结

    21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...

  5. 20145330孙文馨 《Java程序设计》第一周学习总结

    20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...

  6. 20145337 《Java程序设计》第九周学习总结

    20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...

  7. 20145337 《Java程序设计》第二周学习总结

    20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...

  8. 20145218《Java程序设计》第一周学习总结

    20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...

  9. 《Java程序设计》第九周学习总结

    20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...

  10. 《Java程序设计》第二周学习总结

    20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...

随机推荐

  1. v-if

    vue中通过v-if,v-else-if,v-else的对应的Boolean值来操作元素在dom中是否移除. 这里就以单纯的true,false来模拟一下.注:标签属性去出来的值为string类型. ...

  2. WebStrome react-native代码智能提示

    1.clone到本地 git clone https://github.com/virtoolswebplayer/ReactNative-LiveTemplate  2,添加ReactNative. ...

  3. Oracle中文乱码解决

    查看当前Oracle字符集 select userenv('language') from dual; USERENV('LANGUAGE') ---------------------------- ...

  4. MySQL - Linux下安装

    本安装方式仅对5.7.21版本负责. 下载地址:wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.21-linux-glibc2 ...

  5. springMVC入门二

    一.准备工作 参考springMVC入门一,搭建maven项目如下: 前台结构如下: 项目介绍:使用springMVC实现前后台数据交互,例如controller返回json,页面传入pojo 二.具 ...

  6. yii rbac

    一.简介 什么是rbac ? rbac是就是基于角色的访问控制. yii提供一套基础的底层接口,我们知道,rbac经历好几个阶段,从rbac0到rbac3,从基础的用户.角色.权限,到动态的rbac处 ...

  7. wlr快捷键

    ref:http://www.cnblogs.com/zhangyang/archive/2011/07/22/2113856.html   Windows Live Writer提供了许多方便的快捷 ...

  8. Git-Git分支

    代码管理之殇 分支是代码管理的利器.如果没有有效的分支管理,代码管理就适应不了复杂的开发过程和项目的需要.在实际的项目实践中,单一分支的单线开发模式还远远不够,因为: 成功的软件项目大多要经过多个开发 ...

  9. Oozie 实战之 Hive

    1.编辑job.propertiers nameNode=hdfs://cen-ubuntu.cenzhongman.com:8020 jobTracker=localhost:8032 queueN ...

  10. Android 意图通用类 IntentUrl

    1.整体分析 1.1.源代码如下,可以直接Copy. public class IntentUtil { /** * 打开链接 * 根据设置判断是用那种方式打开 * * @param context ...