201621123060《JAVA程序设计》第八周学习总结
1. 本周学习总结
以你喜欢的方式(思维导图或其他)归纳总结集合相关内容。

2. 书面作业
1. ArrayList代码分析
1.1 解释ArrayList的contains源代码
源代码:
public boolean contains(Object o) {
return indexOf(o) >= 0;
}
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;
}
- contains:如果列表中包含指定的元素则返回true.
- indexOf:遍历整个数组,找到就返回该数组的的下标,找不到就返回-1.
- 即意思就是简单判断一下返回值如果>=0,在此中返回指定元素的第一次发生的索引。
1.2 解释E remove(int index)源代码
源代码:
public E remove(int index) {
rangeCheck(index);
modCount++;
E oldValue = elementData(index);
int numMoved = size - index - 1;
if (numMoved > 0)
System.arraycopy(elementData, index+1, elementData, index,
numMoved);
elementData[--size] = null; //关键的一句
return oldValue;
}
private void rangeCheck(int index) {
if (index >= size)
throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
}
- remove:移除列表中指定位置上的元素,向左移动所有后序元素(将其索引减1)
- rangeCheck:如果删除位置越界,抛出异常。
- 即先判断所要删除的位置是否超出数组大小:若超出,则抛出异常;若未超出,则删除该位置的元素,并将该位置之后的元素逐一往前移
1.3 结合1.1与1.2,回答ArrayList存储数据时需要考虑元素的具体类型吗?
不需要考虑,参数属于Object类(各类的父类)。
1.4 分析add源代码,回答当内部数组容量不够时,怎么办?
A:add源码如下
public boolean add(E e) {
ensureCapacityInternal(size + 1); // Increments modCount!!
elementData[size++] = e;
return true;
}
在尾部加,数组长度加一。
同样的,调用了ensureCapacityInternal方法,源码如下:
private void ensureCapacityInternal(int minCapacity) {
if (elementData == EMPTY_ELEMENTDATA) {
minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);
}
ensureExplicitCapacity(minCapacity);
}
ensureCapacityInternal是判断是否要扩容的方法。首先是判断现在的ArrayList是不是空的,如果是空的,minCapacity就取默认的容量和传入的参数minCapacity中的大值。
该方法最后一句又调用了ensureExplicitCapacity方法,源码如下:
private void ensureExplicitCapacity(int minCapacity) {
modCount++;
// overflow-conscious code
if (minCapacity - elementData.length > 0)
grow(minCapacity);
}
如果minCapacity的值大于add数据之前的大小,就调用grow方法,进行扩容,否则什么也不做。
private void grow(int minCapacity) {
// overflow-conscious code
int oldCapacity = elementData.length;
int newCapacity = oldCapacity + (oldCapacity >> 1);
if (newCapacity - minCapacity < 0)
newCapacity = minCapacity;
if (newCapacity - MAX_ARRAY_SIZE > 0)
newCapacity = hugeCapacity(minCapacity);
// minCapacity is usually close to size, so this is a win:
elementData = Arrays.copyOf(elementData, newCapacity);
}
用grow方法进行扩容。关键语句:int newCapacity = oldCapacity + (oldCapacity >> 1);,相当于新的最大容量是 size+1+size/2 相当于原来的1.5倍然后加1。
1.5 分析private void rangeCheck(int index)源代码,为什么该方法应该声明为private而不声明为public?
private修饰仅同类可见。因为外部人员无需使用这个方法,只要内部操作人员知道是否越界即可。
2. HashSet原理
2.1 将元素加入HashSet(散列集)中,其存储位置如何确定?需要调用那些方法?
计算哈希码,即调用对象的hashCode方法,根据哈希码查找到对应的桶(HashSet的存储形式用链表数组实现:每个列表被称为桶)如果桶中已有其他元素,则调用元素的equals方法与已有元素进行比较。
如果比较结果为假,则将元素插入桶中,如果比较结果为真,则用新的值替换旧的值。
2.2 将元素加入HashSet中的时间复杂度是多少?是O(n)吗?(n为HashSet中已有元素个数)
复杂度为O(1),它靠的不是遍历而是计算哈希码.
3. ArrayListIntegerStack
题集jmu-Java-05-集合之ArrayListIntegerStack
3.1 比较自己写的ArrayListIntegerStack与自己在题集jmu-Java-04-面向对象2-进阶-多态、接口与内部类中的题目自定义接口ArrayIntegerStack,有什么不同?(不要出现大段代码)
- ArrayListIntegerStack是用ArrayList来实现栈。ArrayList实际就是长度可变的数组,以它所实现的栈不用考虑栈满的情况,因为ArrayList可以自动扩容。
- ArrayIntegerStack是用数组来实现栈。需要考虑栈满的情况,在一开始便须设定栈的深度,并设定一个top指针,根据出栈入栈的情况移动top指针。
3.2 结合该题简单描述接口的好处,需以3.1为例详细说明,不可泛泛而谈。
- 接口是一类行为的总和,实现接口就可以拥有这些行为。
- 接口能避免因为只需要某类的某一个或几个方法而继承这个类,把操作变得更简单。
- 接口为编程工作者实现代码交互及任务分工提供便捷。
4. Stack and Queue
4.1 编写函数判断一个给定字符串是否是回文,一定要使用栈(请利用Java集合中已有的类),但不能使用java的Stack类(具体原因自己搜索)与数组。请粘贴你的代码,类名为Main你的学号。
public class Main201621123060 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Please input the number: ");
String a = sc.next();
int i = a.length();
System.out.println(huiwen(a));
}
public static boolean huiwen(String a){
List<Character> stack1 = new ArrayList<Character>();
List<Character> stack2 = new ArrayList<Character>();
int b = a.length()/2;
for(int i=0;i<b;i++){
stack1.add(a.charAt(i));//前半字符正向入栈
stack2.add(a.charAt(a.length()-i-1));//后半字符反向入栈
}
for(int i=b-1;i>=0;i--){
if(stack1.remove(i).equals(stack2.remove(i))){
return true ;
}
}
return false;
}
}
4.2 题集jmu-Java-05-集合之银行业务队列简单模拟(只粘贴关键代码)。请务必使用Queue接口,并说明你使用了Queue接口的哪一个实现类?
for (int i = 0; i < N; i++) {
int x=in.nextInt();
if(x%2!=0)
q1.offer(x);
else
q2.offer(x);
}
while(q1.size()!=0||q2.size()!=0){
if(q1.size()!=0){
if(flage==0) {
System.out.print(q1.poll());
System.out.print(" "+q1.poll());
flage=1;
}
else {
System.out.print(" "+q1.poll());
System.out.print(" "+q1.poll());
}
}
if(q2.size()!=0){
if(flage==0) {
System.out.print(q2.poll());
flage=1;
}
else {
System.out.print(" "+q2.poll());
}
主要用了Queue中的offer()方法、size()方法、poll()方法
5. 统计文字中的单词数量并按单词的字母顺序排序后输出
题集jmu-Java-05-集合之5-2 统计文字中的单词数量并按单词的字母顺序排序后输出 (作业中不要出现大段代码)
关键代码:
Set<String> a = new TreeSet<String>();
a.add(str);
System.out.println(a.size());
int i=0;
for(String b:a)
{
if(i==10)break;
System.out.println(b);
i++;
用到了add、size、forEach遍历
5.1 实验总结
使用了Set的自然排序实现类TreeSet,此类可以对添加的对象进行默认排序。
3.码云及PTA
题目集:jmu-Java-05-集合
3.1. 码云代码提交记录

在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图
3.2 截图PTA题集完成情况图
需要有两张图(1. 排名图。2.PTA提交列表图)


3.3 统计本周完成的代码量
| 周次 | 总代码量 | 新增代码量 | 总文件数 | 新增文件数 |
| 1 | 70 | 70 | 5 | 5 |
| 2 | 207 | 207 | 4 | 4 |
| 3 | 205 | 205 | 11 | 11 |
| 4 | 81 | 81 | 4 | 4 |
| 5 | 365 | 365 | 4 | 4 |
| 6 | 296 | 296 | 7 | 7 |
| 7 | 274 | 274 | 5 | 5 |
需要将每周的代码统计情况融合到一张表中。
201621123060《JAVA程序设计》第八周学习总结的更多相关文章
- 201521123027 <java程序设计>第八周学习总结
1.本周学习总结 1.1思维导图 2.书面作业 Q1.List中指定元素的删除(题目4-1) 1.1 实验总结 总结:判断List中是否存在指定元素,需要用到equals方法,若存在就用remove进 ...
- 201571030332 扎西平措 《面向对象程序设计Java》第八周学习总结
<面向对象程序设计Java>第八周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https: ...
- 201871010106-丁宣元 《面向对象程序设计(java)》第八周学习总结
201871010106-丁宣元 <面向对象程序设计(java)>第八周学习总结 正文开头: 项目 内容 这个作业属于哪个课程 https://home.cnblogs.com/u/nwn ...
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- 21045308刘昊阳 《Java程序设计》第九周学习总结
21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...
- 20145236 《Java程序设计》第九周学习总结
20145236 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API ...
- 20155303 2016-2017-2 《Java程序设计》第二周学习总结
20155303 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 『注意』 "//"为单行批注符: "/*"与&quo ...
- 20145237 《Java程序设计》第九周学习总结
20145237 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令 ...
- 20175209 《Java程序设计》第九周学习总结
20175209 <Java程序设计>第九周学习总结 一.教材知识点总结 有关数据库下载中存在可能出现的问题已经在博客<数据库安装和使用过程中出现的一些问题>给出了相应的解决办 ...
- 20175317 《Java程序设计》第九周学习总结
20175317 <Java程序设计>第九周学习总结 学前准备 首先下载XAMPP,下载完成后打开: 将前两个选项打开 在IDEA中配置驱动mysql-connector-java-5.1 ...
随机推荐
- POI 的API大全二
1.POI结构与常用类 (1)POI介绍 Apache POI是Apache软件基金会的开源项目,POI提供API给Java程序对Microsoft Office格式档案读和写的功能. .NET的开发 ...
- setBit testBit权限管理(shiro项目中来的二)
一,setBit testBit权限管理的理解 1.1.jdk7文档解释 public boolean testBit(int n)Returns true if and only if the de ...
- 《你不知道的 JavaScript 上卷》 学习笔记
第一部分: 作用域和闭包 一.作用域 1. 作用域:存储变量并且查找变量的规则 2. 源代码在执行之前(编译)会经历三个步骤: 分词/此法分析:将代码字符串分解成有意义的代码块(词法单元) 解析/语法 ...
- C#图解教程 第二十一章 命名空间和程序集
命名空间和程序集 引用其他程序集 mscorlib库 命名空间 命名空间名称命名空间的补充命名空间跨文件伸展嵌套命名空间 using 指令 using命名空间指令using别名指令程序集的结构 程序集 ...
- 爬虫抓包工具Charles设置
1.安装注册 感谢https://www.jianshu.com/p/89111882fa99提供注册码软件去官网下载安装即可. Registered Name:https://zhile.io Li ...
- 【BZOJ3527】力(FFT)
[BZOJ3527]力(FFT) 题面 Description 给出n个数qi,给出Fj的定义如下: \[Fj=\sum_{i<j}\frac{q_i q_j}{(i-j)^2 }-\sum_{ ...
- Linux系统中svn服务器设置开机启动
安装完svn服务器后虽然好用但是因为经常重启Linux服务器,每次重启完就要去手动启动svn服务器,很是麻烦,于是在网上找了一些方法后,自己把svn服务器设置成开机启动 步骤一:安装svn服务器: h ...
- angular路由详解六(路由守卫)
路由守卫 CanActivate: 处理导航到某个路由的情况. CanDeactivate:处理从当前路由离开的情况. Resole:在路由激活之前获取路由数据. 1.CanActivate: 处理导 ...
- 部署用于生产的Exceptionlees(一个强大易用的日志收集服务)
Exceptionless是一个非常优秀的事件记录服务,目前我们的自部署的Exceptionless已经稳定运行了近一年的时间,收集了千万条事件信息.但Exceptionless官方自宿主部署的文档不 ...
- JavaScript编码规范(1)
参考的是百度公司的JS规范,分为两部分.这是第一部分 [建议] JavaScript 文件使用无 BOM 的 UTF-8 编码. 空格 [强制] 二元运算符两侧必须有一个空格,一元运算符与操作对象之间 ...