一、本周学习总结

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)

实验总结已经在作业中体现,不用写。

最新文章

  1. ORA-12541:TNS没有监听器
  2. 20151210study
  3. .net sharepoint文档库操作
  4. Leetcode Integer to Roman
  5. 程序集、应用程序配置及App.config和YourSoft.exe.config .
  6. ASP-----分页功能的实现
  7. COM实践经验
  8. 武汉科技大学ACM:1002: 华科版C语言程序设计教程(第二版)例题6.6
  9. hdu 4512 吉哥系列故事——完美队形I_LCIS
  10. 2015第14周日WebSocket
  11. QTabWiget Change Color 改变颜色(每个QWidget都有一个自己的调色板palette,设置它的颜色,然后setAutoFillBackground即可)
  12. LintCode ---- 刷题总结
  13. Eclipse格式化代码换行、删除空行
  14. kafka集群中常见错误的解决方法:kafka.common.KafkaException: Should not set log end offset on partition
  15. JMeter之Http协议接口性能测试
  16. 通过配置文件新建solr的core
  17. android开发(42) 使用andorid操作蓝牙打印机
  18. 011 - JDK自带的性能监控工具
  19. 《程序员面试金典》习题解答(C/C++)
  20. Sql Server自增ID与序号的使用

热门文章

  1. Modelsim调用用do脚本自动化仿真
  2. [ZYNQ-7]PS处理PL外部中断的简单实例的剖析 (参考米联miz702n)
  3. 关于HttpSession
  4. Java基础二
  5. php sql uuid 32位
  6. asp.net mvc 接入美圣短信 验证码发送
  7. 数据结构-二叉树 C和C++实现
  8. CSS3笔记之第二天
  9. 归并排序—Java版
  10. Spring Security学习笔记