1. 本周学习总结

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



(嗯。。都画了那么久的导图,还是用导图归纳吧~)

2. 书面作业

ArrayList代码分析

1.1 解释ArrayList的contains源代码

A: 源码如下

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

看出调用了indexOf方法,又点开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;

解释:contains就是判断某某元素是否被包含的方法。indexOf方法就是从0往后找遍历整个数组,找到就返回该数组的的下标,找不到就返回-1。继而contains里又调用indexOf,简单判断一下返回值如果>=0,在此中返回指定元素的第一次发生的索引。

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

A:源码如下

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

还是一样的看看rangeCheck方法的源码,如下

private void rangeCheck(int index) {
if (index >= size)
throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
}

解释:rangeCheck方法:如果删除位置越界,抛出异常。未抛出异常的话就移除该元素并使该元素后面的元素位置都往前进一,最后一个元素填入null。

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

A:不需要。参数都是Object类的,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是判断是否要扩容的方法。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]: http://blog.csdn.net/glory1234work2115/article/details/50858122

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

A:源码如下

 private void rangeCheck(int index) {
if (index >= size)
throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
}

解释: private修饰仅同类可见。因为外部人员无需使用这个方法,只要内部操作人员知道是否越界即可。


HashSet原理

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


A:

  • 计算哈希码,即调用对象的hashCode方法
  • 根据哈希码查找到对应的桶
  • 如果桶中已有其他元素,则调用元素的equals方法与已有元素进行比较。
  • 如果比较结果为假,则将元素插入桶中,如果比较结果为真,则用新的值替换旧的值。

ArrayListIntegerStack

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

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


A:jmu-Java-04的栈是使用数组实现,jmu-Java-05的栈是使用ArrayList实现。

3.2 简单描述接口的好处.

A:

  • 接口是一类行为的总和,实现接口就可以拥有这些行为。
  • 接口能避免因为只需要某类的某一个或几个方法而继承这个类,把操作变得更简单。
  • 接口为编程工作者实现代码交互及任务分工提供便捷。

Stack and Queue

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


A:

public class Main074 {
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-集合之5-6 银行业务队列简单模拟。(不要出现大段代码)

A:思路简单点:A的优先级高于B的,所以关于A的语句就先与B出现。运用了LinkedList当作队列使用。方法offer()、poll()、peek()以及while、if语句编写即可。最后的错误正在努力修正中...

啊。。搞完了,问了嘉廉大学霸,加了一个Boolean修饰的first变量。

//加了这个逻辑语句在每次输出前,即可防止最后还打出空格的情况
if (first) {
first = false;
} else {
System.out.print(" ");
}

关键代码如下:

Queue<Integer> queueA = new LinkedList<Integer>();
B...
while(!queueA.isEmpty()&&!queueB.isEmpty())
queueA.peek();
System.out.print(queueA.poll()); while(!queueA.isEmpty()||!queueB.isEmpty())
{
if(!queueA.isEmpty())
{
for (int i = 0; i < queueA.size(); i++) {
...
}
}
if(!queueB.isEmpty())
{
...

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

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

A:这题挺简单的,就是用元素不重复的TreeSet。输入实验课老师已讲。其他的大致就是用到了add、size、forEach遍历。

以下贴关键的代码

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

5.1 实验总结

A:

  • 大致学会了几种集合的使用方法,TreeSet、ArrayList、Queue。
  • 不同的实现类有不同的特性,例如5-2的不重复单词就用TreeSet。
  • 5-1、5-2搞的挺快、5-6搞的挺久,一开始不知道Queue<Integer> queueA = new Queue<Integer>();为啥是错的,ArrayList就可以。后来明白了,Queue是接口,ArrayList是类。把语句换成Queue queueA = new LinkedList();像书上272页讲的一样,用LinkedList当作队列来用。

面向对象设计大作业-改进

7.1 完善图形界面(说明与上次作业相比增加与修改了些什么)

7.2 使用集合类改进大作业

参考资料:

JTable参考项目


3. 码云上代码提交记录及PTA实验总结

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

3.1. 码云代码提交记录

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

3.2. PTA实验

编程(5-1, 5-2, 5-3(选做), 5-6)

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



附注:5-6可能因为最后那个空格的问题。。自己也不会弄。。时间快来不及了,先提交,后续会改正。

改正了改正了 开心~

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

  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. NOIP 2002 提高组 字串变换

    题目描述 已知有两个字串 A, B 及一组字串变换的规则(至多6个规则): A1 -> B1 A2 -> B2 规则的含义为:在 A$中的子串 A1 可以变换为 B1.A2 可以变换为 B ...

  2. Linux - 简明Shell编程11 - 调用脚本(CallTheScript)

    脚本地址 https://github.com/anliven/L-Shell/tree/master/Shell-Basics 示例脚本及注释 主脚本: CallTheScript.sh #!/bi ...

  3. Java入门——(2)面对对象(上)

      关键词:面对对象.类..构造方法.this.static.内部类   一.面对对象的概念:把解决的问题安装一定规则划分为多个独立的对象,然后通过调用对象的方法来解决问题.其特点可概括为封装性.继承 ...

  4. python编码问题一点通

    一.了解字符编码的知识储备 1. 文本编辑器存取文件的原理(nodepad++,pycharm,word) 打开编辑器就打开了启动了一个进程,是在内存中的,所以在编辑器编写的内容也都是存放与内存中的, ...

  5. MFC对话框中显示背景图片

    在MFC对话框中显示图片,四个步骤. 1.首先得在VC6.0或者VS2008(其他版本也是一样)中导入GDI文件.(网上下载:) GDI含义是图形设备接口,主要任务是负责系统与绘图程序之间的信息交换, ...

  6. iOS9中关于 NSURLSession/NSURLConnection HTTP load failed 的解决办法

    最近为了新的存管app上线,忙了近一个月,重新过了一段996的日子,今天终于可以喘口气,继续更新博客了.本文记录一下在iOS 9中发送https请求遇到的问题及解决办法,希望通过本文,可以对ATS的配 ...

  7. CSS层级关系

    http://www.blogbus.com/eskimo-logs/69626018.htmlhttp://www.dmtuan.com/?p=574

  8. 一点点刚学不久的JS

    1   js中的变量和输入输出 {使用js的三种方式} 1 在html标签中直接内嵌js(并不提倡使用): <button onclick="alert('小婊砸你真点啊!')&quo ...

  9. 自定义EasyUI的datetimebox控件日期时间的显示格式(转)

    工作中遇到的问题,在此记录一下. 需求:前台页面使用了EasyUI框架,在某一个html页面中要求datetimebox显示格式为年月日和小时,如图所示: 尝试过两种方法,分别如下: 第一种方法: d ...

  10. EasuUI-js(EasyUI formatter格式化教程)常用判断收集

    YN标记: formatter : function(c1, row,index) { var a = ""; if(c1 == "Y"){ a = a + & ...