201521123103 《Java学习笔记》 第七周学习总结
一、本周学习总结
1、以你喜欢的方式(思维导图或其他)归纳总结集合相关内容。

二、书面作业
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()方法:当且仅当此列表包含至少一个满足 (o==null ? e==null : o.equals(e)) 的元素 e 时,则返回 true。而indexOf方法对于传入的o是否是null进行了区分,因为null去调用equals是会报空指针的错误的。代码第二段首先判断o是否为null,如果o为null就没有equals方法了,则返回序号i;否则调用equals方法,若equals,则返回序号i,contains()方法直接就返回indexOf(o) >= 0。如果此列表不包含元素o,则返回 -1,contains()方法也会直接返回false。
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; // clear to let GC do its work
return oldValue;
}
private void rangeCheck(int index) {
if (index >= size)
throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
}
答:先检查要删除的位置,如果其超出index的大小,就会出现IndexOutOfBoundsException异常。不超出的话就类似数组删除操作,删掉某个元素后,其位置之后的元素前移,最后返回被删除的元素即可。同时size需要自减一次,原来最后一个元素所在的位置为null。
1.3 结合1.1与1.2,回答ArrayList存储数据时需要考虑元素的类型吗?
答:不需要,因为ArrayList存储数据的参数均为Objcet类型的对象,Object类又是所有类的父类,所以所有对象都为Object。
1.4 分析add源代码,回答当内部数组容量不够时,怎么办?
源代码如下,注释说明:
public boolean add(E e) {
ensureCapacityInternal(size + 1);// 保证内部数组有足够的空间,ensureCapacityInternal用来调整容量
elementData[size++] = e;
return true;
}
private void ensureCapacityInternal(int minCapacity) {
if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);
}
ensureExplicitCapacity(minCapacity);
}
private void ensureExplicitCapacity(int minCapacity) {
modCount++;
// overflow-conscious code
if (minCapacity - elementData.length > 0)
grow(minCapacity);//增加数组容量
}
private void grow(int minCapacity) {
// overflow-conscious code
int oldCapacity = elementData.length;
int newCapacity = oldCapacity + (oldCapacity >> 1);//将数组扩大为原来数组的1.5倍
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);//将旧数组的值copy新数组中去, 然后ArrayList引用了新数组
}
private static int hugeCapacity(int minCapacity) {
if (minCapacity < 0) // overflow
throw new OutOfMemoryError();
return (minCapacity > MAX_ARRAY_SIZE) ?
Integer.MAX_VALUE :
MAX_ARRAY_SIZE;
}
1.5 分析private void rangeCheck(int index)源代码,为什么该方法应该声明为private而不声明为public?
答:rangeCheck的作用只是关心数组是否超出其范围,它不需要外部进行修改或者访问,所以不需要用public声明。
2、HashSet原理
2.1 将元素加入HashSet(散列集)中,其存储位置如何确定?需要调用那些方法?
答:上课PPT中提到HashSet使用是由链表数组实现的,每个列表的位置被称为桶。可以根据hashCode值(哈希码)查找到对应的桶。
调用的方法有hashCode与equals方法,具体如下:
(1)当我们向HashSet中添加一个元素时,HashSet会先调用该对象的hashCode()方法得到其hashCode值(哈希码),根据该值决定该对象在桶中存储位置。
(2)如果桶中已有其他元素,则调用该对象的equals()方法与已有元素进行比较。如果比较结果为假,则将该对象插入桶中。如果比较结果为真,则用新的值替换旧的值。
3、ArrayListIntegerStack:题集jmu-Java-05-集合之5-1 ArrayListIntegerStack
3.1 比较自己写的ArrayListIntegerStack与自己在题集jmu-Java-04-面向对象2-进阶-多态、接口与内部类中的题目5-3自定义接口ArrayIntegerStack,有什么不同?(不要出现大段代码)
答:(1)ArrayListIntegerStack是用ArrayList对象存储即list接口,ArrayIntegerStack是用数组存储。
(2)ArrayIntegerStack在出栈的时候需要移动top指针,ArrayListIntegerStack不需要top指针,调用ArrayList自有的remove()方法就可以。
3.2 简单描述接口的好处.
答:可以使用一个接口来操作不同的类,如上ArrayListIntegerStack类与ArrayIntegerStack类都继承IntegerStack接口。
4、Stack and Queue
4.1 编写函数判断一个给定字符串是否是回文,一定要使用栈,但不能使用java的Stack类(具体原因自己搜索)。请粘贴你的代码,类名为Main你的学号。
import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;
@SuppressWarnings("unused")
public class Main201521123103 {
public static void main(String[] args) {
@SuppressWarnings("resource")
Scanner sc=new Scanner(System.in);
System.out.println("请输入字符串");
ArrayListStringStack Stack=new ArrayListStringStack();
String n= sc.next();
for(int i=0;i<n.length();i++)
{
Stack.push(String.valueOf(n.charAt(i)));
}
for(int j=0;j<n.length();j++){
if(String.valueOf(n.charAt(j)).equals(Stack.pop())){
System.out.println("是回文");
break;
}
else {
System.out.println("不是回文");
break;
}
}
}
public class ArrayListStringStack implements StringStack {
private ArrayList<String> list;
public ArrayListStringStack() {
list=new ArrayList<String>();
}
public String push(String item) {
if(item==null)
return null;
list.add(item);
return item;
}
@Override
public String pop() {
if(list.isEmpty())
return null;
return list.remove(list.size()-1);
}
}
public interface StringStack {
public String push(String item);
public String pop();
}
4.2 题集jmu-Java-05-集合之5-6 银行业务队列简单模拟。(不要出现大段代码)
PTA提交及输出结果如图:


5、统计文字中的单词数量并按单词的字母顺序排序后输出:题集jmu-Java-05-集合之5-2 统计文字中的单词数量并按单词的字母顺序排序后输出 (不要出现大段代码)
PTA提交以及输出结果如图:


5.1 实验总结
使用TreeSet,因为其本身就已经有进行排序,所以这时候只需输出前十个就行。
三、码云上代码提交记录及PTA实验总结
题目集:jmu-Java-05-集合
3.1. 码云代码提交记录
在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图
实验5-1和5-2周三实验课完成,5-6周日完成

3.2. PTA实验
编程(5-1, 5-2, 5-3(选做), 5-6)
实验总结已经在作业中体现,不用写。
201521123103 《Java学习笔记》 第七周学习总结的更多相关文章
- 20145213《Java程序设计》第七周学习总结
20145213<Java程序设计>第七周学习总结 教材学习内容总结 周末快乐的时间总是短暂的,还没好好感受就到了要写博客的周日.有人喟叹时间都去哪儿了,那本周我们就来认识一下Java里的 ...
- 20145337《JAVA程序设计》第七周学习总结
20145337 <Java程序设计>第七周学习总结 教材学习内容总结 时间的度量 格林威治时间GMT,世界时UT,国际原子时TAI,世界协调时间UTC 就目前来说,即使标注为GMT,实际 ...
- 20145320 《Java程序设计》第七周学习总结
20145320 <Java程序设计>第七周学习总结 教材学习内容总结 13章 时间与日期 时间的度量: 格林威治标准时间(GMT时间),现已不作为标准时间使用. 世界时(UT),秒的单位 ...
- 《Java程序设计》第七周学习总结
20145224 <Java程序设计>第七周学习总结 教材学习内容总结 13.1 认识时间与日期 ·想要度量时间首先要有时间基准,目前国际上通用的有一下六个时间基准: 1.格林威治标准时间 ...
- 20175314 《Java程序设计》第七周学习总结
20175314 <Java程序设计>第七周学习总结 教材学习内容总结 第八章:常用实用类 String()类代表字符串:Java 程序中的所有字符串字面值(如 "abc&quo ...
- 20175126《Java程序设计》第七周学习总结
# 20175126 2016-2017-2 <Java程序设计>第七周学习总结 ## 教材学习内容总结 - 本周学习方式主要为手动敲代码并理解内容学习. - 学习内容为教材第八章,本章主 ...
- 20175234 2018-2019-2 《Java程序设计》第七周学习总结
目录 20175234 2018-2019-2 <Java程序设计>第七周学习总结 教材学习内容总结 String类常用用法 Date类与Calendar类常用用法 Math类的常用方法 ...
- 20165235 祁瑛 2018-4 《Java程序设计》第七周学习总结
20165235 祁瑛 2018-4 <Java程序设计>第七周学习总结 教材学习内容总结 MySQL数据管理系统 MySQL数据管理系统,简称MySQL,是世界上流行的数据管理系统. M ...
- 20172325 2018-2019-2 《Java程序设计》第七周学习总结
20172325 2018-2019-2 <Java程序设计>第七周学习总结 教材学习内容总结 二叉查找树 二叉查找树:是含附加属性的二叉树,即其左孩子小于父节点,而父节点又小于或等于右孩 ...
- 20155337 2016-2017-2 《Java程序设计》第七周学习总结
20155337 2016-2017-2 <Java程序设计>第七周学习总结 教材学习内容总结 •认识时间与日期 •格林威治标准时间:简称GMT时间,参考格林威治皇家天文台的标准太阳时间. ...
随机推荐
- mycat学习心得
最近老大要求我们学习mycat,并运用到实际项目中.现在简单分享下自己的学习心得,也算是只是积累吧. 什么是mycat? 用我的话理解就是:mycat是一种技术,采用mycat后可以提高程序的速度,也 ...
- insertBefore 和 insetAfter函数详解
在Javascript DOM编程艺术上面讲到,insertBefore( )函数,即在已有元素前面插入一个新元素: 语法: parentElement . insertBefore(newEle ...
- 从Google Play下载应用并不安全,上千款监视软件伪装其中
如果你认为在官方应用市场里下载app就觉得安全的话,小编可以负责任的回答你:"too young too simple,sometimes native" 今年4月,BankBot ...
- Hibernate(三)
1.1Hibernate的检索方式 1.1.1Hibernate的检索方式概述 Hibernate提供了以下几种检索对象的方式: 导航对象图检索方式:根据已经家就在的对象导航到其他对象. Custom ...
- TCP/IP小记
--TCP/IP小记 -----------------2014/06/11 TCP的要求是:local_ip:local_port <==>remote_ip:remote_port这个 ...
- sql server 2000登录名与数据库用户名的关联问题
MS SQL Server 2000 数据库使用备份还原造成的孤立用户和对象名‘xxx’无效的错误的解决办法 在使用数据库的过程中,经常会遇到数据库迁移或者数据迁移的问题,或者有突然的数据库损 ...
- 【leetcode】147. Insertion Sort List
Sort a linked list using insertion sort. 链表的插入排序. 需要创建一个虚拟节点.注意点就是不要节点之间断了. class Solution { public: ...
- HTML-CSS相关(1)
一 浮动 1.标准流中的块级盒子,宽度将会自动伸展为100%而浮动的块级盒子,宽度不会自动伸展,而是由内容撑开. 2.当一个盒子浮动,标准流中未浮动的其他盒子,将视浮动盒子不存在而占据浮动盒子原来的 ...
- SpringMVC注解@RequestMapping之produces属性导致的406错误
废话不多说,各位,直接看图说话,敢吗?这个问题网上解决的办法写的狠是粗糙,甚至说这次我干掉它完全是靠巧合,但是也不否认网上针对406错误给出的解决方式,可能是多种情况下出现的406吧?我这次的流程就是 ...
- C++模板之Vector与STL初探
STL源码初步接触 STL = Standard Template Library,直译过来是:标准模板库,是惠普实验室开发的一系列软件的统称.从根本上说,STL是一些"容器"的集 ...