第7周-集合

  1. 本周学习总结

其他注意点:

(1)List主要特征:
其元素以线性方式存储
集合中允许存放重复对象
(2)Set中的对象:
不按特定方式排序
没有重复对象
Set最多有一个null元素
(3)hashCode与equals方法:
如果一个两个对象通过equals方法比较为true
那么他们的hashCode方法返回的值也要相等
(4)TreeSet支持两种排序方式:
a.Comparable
放入TreeSet中的类必须实现Comparable接口
b.Comparator
放入TreeSet中的类不必实现Comparable接口,但是必须创建一个实现Comparator接口的类

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;
}
从源代码可以看出调用了indexOf方法,indexOf方法对于传入的是否是null进行了区分,如果找到了,就直接返回,找不到跳出循环外面,就返回-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;
}
remove函数通过RangeCheck(index)函数来判断所删除的位置是否超过了原列表的size(),然后将查找到的元素置为null,进行size()--操作

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

不需要,但是不能是基本数据类型

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

 public boolean add(E e) {
ensureCapacityInternal(size + 1); // Increments modCount!!
elementData[size++] = e;
return true;
} 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);
if (newCapacity - minCapacity < 0)
newCapacity = minCapacity;
if (newCapacity - MAX_ARRAY_SIZE > 0)
newCapacity = hugeCapacity(minCapacity);
elementData = Arrays.copyOf(elementData, newCapacity);
} 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?

  /**
* Checks if the given index is in range. If not, throws an appropriate
* runtime exception. This method does *not* check if the index is
* negative: It is always used immediately prior to an array access,
* which throws an ArrayIndexOutOfBoundsException if index is negative.
*/
private void rangeCheck(int index) {
if (index >= size)
throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
}
使用private是不希望外部类使用它

**2.HashSet原理

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

首先使用hashCode(),计算出元素的哈希码,根据哈希码找到散列表中对应的列表(称为桶),如果存储的位置已经有元素占用,则利用equals()方法进行比较,不相同则插入桶中,相同则替换掉原来的元素。

**3.ArrayListIntegerStack

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

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

不同之处在于前者使用了ArrayList的动态数组,不需要判断是否栈满,用完的时候会自动扩充,后者是Integer数组

3.2 简单描述接口的好处.

好处是我们可以使用一个接口来操作不同的类,至于操作哪一个类,就通过由动态绑定来决定。

4.Stack and Queue

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

package two;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.Scanner; public class Main201521123066 { public static void main(String[] args) { Scanner s = new Scanner(System.in);
while (s.hasNext()) {
ArrayList<String> str = new ArrayList<String>();
String str1 = s.next();
for (int i = 0; i < str1.length(); i++) {
String s1 = str1.substring(i, i + 1);
str.add(s1);
}
String s1 = "";
for (int i = str1.length() - 1; i >= 0; i--) {
s1 = s1 + str.get(i);
}
if (str1.equals(s1)) {
System.out.println("是回文");
} else {
System.out.println("不是回文");
}
}
} }

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

使用队列来写,关键代码如下:

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

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

5.1 实验总结

1.可以用Iterator
(也可以利用TreeSet自动排序功能(后来从舍友处学来))
2.用Set,不允许内容重复

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

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

3.1. 码云代码提交记录

3.2. PTA实验

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

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

201521123066《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. webpack+react搭建环境

    近日自己项目遇到需要用webpack搭建react环境,查了挺多 ,自己总结一下 1.下载安装最新版node.js(https://nodejs.org/en/) 2.主要看自己网络情况,可以选择安装 ...

  2. Orcle导入导出dmp文件

    --Orcle导入导出dmp文件 --------------------------2013/12/06 导出表:   exp scott/tiger@mycon tables=(dept,emp) ...

  3. 研究分析JS中的三种逻辑语句

    JS中的三种逻辑语句:顺序.分支和循环语句. 一.顺序语句 代码规范如下:1. <script type="text/javascript"> var a = 10;  ...

  4. dll的两种加载方式(pend)+ delayload

    看过关于动态库的调用例子,于是决定动手做一做:dll的对外接口声明头文件,Mydll.h: //Mydll.h #include <stdio.h> #include <stdlib ...

  5. phpexcel导入excel处理大数据

    先下载对应phpExcel 的包就行了https://github.com/PHPOffice/PHPExcel下载完成 把那个Classes 这个文件夹里面的 文件跟文件夹拿出来就好了.直接写到PH ...

  6. mysql my.ini配置文件修改无效,修改mysql默认字符集

    问题 开始于 使用mysql命令插入中文数据插不进去 ERROR 1366 (HY000): Incorrect string value: '\xD6\xD0\xCE\xC4' for column ...

  7. 【PL/SQL Developer】动态执行表不可访问,本会话的自动统计被禁止

    在执行菜单里你可以禁止统计,或在v_$session,v_$sesstat 和 v_$statname 表里获得select权限 解决办法 [oracle@localhost ~]$ sqlplus ...

  8. C语言指针(二)指向指针的指针

    注意:指向指针的指针适合于做链表 1.声明方式:在变量名前放置两个*符号 int**var; 2.实例: #include<stdio.h>int main (){intvar;int*p ...

  9. 读Zepto源码之Ajax模块

    Ajax 模块也是经常会用到的模块,Ajax 模块中包含了 jsonp 的现实,和 XMLHttpRequest 的封装. 读 Zepto 源码系列文章已经放到了github上,欢迎star: rea ...

  10. SpringMVC简单配置

    SpringMVC简单配置 一.eclipse安装Spring插件 打开help下的Install New Software 点击add,location中输入http://dist.springso ...