1. 本周学习总结

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

2. 书面作业

1.ArrayList代码分析

1.1 解释ArrayList的contains源代码

源代码如下

  1. public boolean contains(Object o) {
  2. return indexOf(o) >= 0;
  3. }
  4. public int indexOf(Object o) {
  5. if (o == null) {
  6. for (int i = 0; i < size; i++)
  7. if (elementData[i]==null)
  8. return i;
  9. } else {
  10. for (int i = 0; i < size; i++)
  11. if (o.equals(elementData[i]))
  12. return i;
  13. }
  14. return -1;
  1. 遍历元素,如果存在查找的元素,就返回true,否则就返回false

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

源代码如下

  1. public E remove(int index) {
  2. RangeCheck(index);
  3. modCount++;
  4. E oldValue = (E) elementData[index];
  5. int numMoved = size - index - 1;
  6. if (numMoved > 0)
  7. System.arraycopy(elementData, index+1, elementData, index,
  8. numMoved);
  9. elementData[--size] = null; // Let gc do its work
  10. return oldValue;
  11. }
  1. 查找这个ArrayList中是否含有要找的元素,如果有,则返回true,否则就返回false

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

  1. 不需要,因为ArrayList中的方法中参数的类型都是Object类,而Object类是所有类的父类,所以ArrayList存储数据时不需要考虑元素的类型。

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

先贴上原码

  1. public boolean add(E e) {
  2. ensureCapacityInternal(size + 1); // Increments modCount!!
  3. elementData[size++] = e;
  4. return true;
  5. }
  6. private void ensureCapacityInternal(int minCapacity) {
  7. if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
  8. minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);
  9. }
  10. ensureExplicitCapacity(minCapacity);
  11. }
  12. private void ensureExplicitCapacity(int minCapacity) {
  13. modCount++;
  14. // overflow-conscious code
  15. if (minCapacity - elementData.length > 0)
  16. grow(minCapacity);
  17. }
  18. private void grow(int minCapacity) {
  19. // overflow-conscious code
  20. int oldCapacity = elementData.length;
  21. int newCapacity = oldCapacity + (oldCapacity >> 1);
  22. if (newCapacity - minCapacity < 0)
  23. newCapacity = minCapacity;
  24. if (newCapacity - MAX_ARRAY_SIZE > 0)
  25. newCapacity = hugeCapacity(minCapacity);
  26. // minCapacity is usually close to size, so this is a win:
  27. elementData = Arrays.copyOf(elementData, newCapacity);
  28. }
  29. private static int hugeCapacity(int minCapacity) {
  30. if (minCapacity < 0) // overflow
  31. throw new OutOfMemoryError();
  32. return (minCapacity > MAX_ARRAY_SIZE) ?
  33. Integer.MAX_VALUE :
  34. MAX_ARRAY_SIZE;
  35. }
  1. ensureCapacityInternal(size + 1) ,保证内部数组有足够的空间。 grow(minCapacity);增加数组容量。 elementData = Arrays.copyOf(elementData, newCapacity);将旧数组的值copy到新数组中去, ArrayList引用了新数组。

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

  1. rangeCheck方法保证了remove等操作的容量范围,如果超出则会显示异常,避免被外界访问。

2.HashSet原理

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

  1. 散列表采用Hash算法决定集合元素的存储位置。需要调用hashCode()方法和equals()方法。

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

3.ArrayListIntegerStack

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

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

  1. 1.存储方式不同,前者使用ArrayList,虽然它的本质也是数组存储,但不需要一开始就要考虑数组长度,而后者是数组存储,并且需要一个指针top来确定栈顶元素;
  2. 2.前者不需要考虑栈满的情况,但是后者受一开始输入的数组长度的约束,需要考虑栈满的情况。

3.2 简单描述接口的好处.

  1. 接口是一种规范,同样的方法和操作可以有不同的实现,也可以供不同的类使用。

4.Stack and Queue

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

  1. public class Main201521123092 {
  2. public static void main(String[] args) {
  3. // TODO Auto-generated method stub
  4. ArrayListIntegerStack stack=new ArrayListIntegerStack();
  5. Scanner sc = new Scanner(System.in);
  6. String s=sc.next();
  7. for(int i=0;i<s.length();i++){
  8. stack.push(s.charAt(i));
  9. }
  10. boolean f=true;
  11. for(int i=0;i<s.length();i++)
  12. if(stack.pop()!=s.charAt(i)){
  13. f=false;
  14. break;
  15. }
  16. if(f)
  17. System.out.println("yes");
  18. else
  19. System.out.println("no");
  20. }
  21. }

4.2 题集jmu-Java-05-集合之5-6 银行业务队列简单模拟。(不要出现大段代码)

  1. Set<String> strset=new TreeSet<String>();
  2. for(i=0;;i++){
  3. str=in.next();
  4. if(str.equals("!!!!!")) break;
  5. else strset.add(str);
  6. }
  7. for(String s:strset){
  8. x=x+1;
  9. System.out.println(s);
  10. if(x==10) break;
  11. }

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

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

5.1 实验总结

  1. 这题主要利用了treeset的排序功能,输出时要注意格式。

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

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

6.1 伪代码

6.2 实验总结

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

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

7.2 使用集合类改进大作业

参考资料:

JTable参考项目

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

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

3.1. 码云代码提交记录

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

3.2. PTA实验

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

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

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

  1. 201521123027 <java程序设计>第七周学习总结

    1.本周学习总结 2.书面作业 Q1.ArrayList代码分析 1.1 解释ArrayList的contains源代码 答: 源代码: //contains()方法 public boolean c ...

  2. 201871010106-丁宣元 《面向对象程序设计(java)》第七周学习总结

    201871010106-丁宣元 <面向对象程序设计(java)>第七周学习总结 正文开头: 项目 内容 这个作业属于哪个课程 https://home.cnblogs.com/u/nwn ...

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

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

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

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

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

    20145236 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API ...

  6. 20155304田宜楠2006-2007-2 《Java程序设计》第一周学习总结

    20155304田宜楠2006-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 - 浏览教材,根据自己的理解每章提出一个问题 第一章 除了书上提到的开发工具还有什么适合 ...

  7. 20155303 2016-2017-2 《Java程序设计》第二周学习总结

    20155303 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 『注意』 "//"为单行批注符: "/*"与&quo ...

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

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

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

    20175209 <Java程序设计>第九周学习总结 一.教材知识点总结 有关数据库下载中存在可能出现的问题已经在博客<数据库安装和使用过程中出现的一些问题>给出了相应的解决办 ...

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

    20175317 <Java程序设计>第九周学习总结 学前准备 首先下载XAMPP,下载完成后打开: 将前两个选项打开 在IDEA中配置驱动mysql-connector-java-5.1 ...

随机推荐

  1. [Usaco2007 Open]Fliptile 翻格子游戏 状态压缩

    考试想到了状压,苦于T1废掉太长时间,于是默默输出impossible.. 我们知道,一个格子的翻转受其翻转次数和它相邻翻转次数的影响. 由每一个位置操作两次相当于把它翻过来又翻回去,所以答案中每一个 ...

  2. 【有意思的BUG】反转的水印

    今天无意中看到一个图集,翻着翻着感觉到哪儿不对劲.是的,水印打反了,怎么会出现这样的局面我也不知道,可能就是手抖了吧. 通过与懂这方面知识的人请教,120%的可能是因为图片本身就自带水印,而不是因为后 ...

  3. 项目记事【SpringMVC-1】:后台接收前端传来的JSON,并转成对象

    背景: 最近项目中使用SpringMVC,需要从前端接收JSON格式的请求,在后端自动转成一个与JSON格式相同的对象. 由于是一个老项目,Spring的版本是3.2.7. 问题1:POST or G ...

  4. java模拟斗地主发牌看牌

    import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; public class Dou ...

  5. Javaweb向服务器上传文件以及从服务器下载文件的方法

    先导入jar包 点击下载 commons-fileupload是Apache开发的一款专门用来处理上传的工具,它的作用就是可以从request对象中解析出,用户发送的请求参数和上传文件的流. comm ...

  6. ID3算法(1)

    1 简述1.1    id3是一种基于决策树的分类算法,由J.Ross Quinlan在1986年开发.id3根据信息增益,运用自顶向下的贪心策略建立决策树.信息增益用于度量某个属性对样本集合分类的好 ...

  7. CSS3笔记之第一天

    通过展示实例来初步学习CSS3 1.背景 设置背景色:background-color:#b0c4de; 设置背景图片:background-image:url('paper.gif'); 设置背景图 ...

  8. JavaScript即时判断输入密码的强度

    源码示例: 1.javascript代码 <script type="text/javascript"> //CharMode函数 //测试某个字符是属于哪一类. fu ...

  9. mysql中group by 的用法解析

    1. group by的常规用法 group by的常规用法是配合聚合函数,利用分组信息进行统计,常见的是配合max等聚合函数筛选数据后分析,以及配合having进行筛选后过滤. 假设现有数据库表如下 ...

  10. ASP.NET静态化方法

    直接通过访问页面获取html代码实现静态化 突然想到一个静态化页面的方法:直接保存源代码即可. 模拟浏览器访问,获得源码,写入文件.不知道是否存在安全风险:各位大神请指点: 注意 1.资源使用绝对路径 ...