1. 本周学习总结

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

使用工具:百度脑图

2. 书面作业

1.ArrayList代码分析

1.1 解释ArrayList的contains源代码

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方法在执行后首先会调用indexOf()方法。indexOf()方法会判断传入的对象是否为空,如果为空,则遍历整个集合的元素,如果集合的某个元素为空,返回该元素的下标。如果传入对象不为空,则遍历整个集合的元素,如果该元素和集合内某个元素的equals比较结构为true,返回该元素下标。可以看到如果遍历完集合后没有元素存在于集合中就返回-1。 结论:判断集合中是否含有此元素;有,返回true。没有,返回false;

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


E remove(int index)源代码: public E remove(int index) {
RangeCheck(index); modCount++;
E oldValue = (E) elementData[index]; int numMoved = size - index - 1;
if (numMoved > 0)
System.arraycopy(elementData, index+1, elementData, index,
numMoved);
elementData[--size] = null; // Let gc do its work return oldValue;
} 分析:首先是检查范围,修改modCount,保留将要被移除的元素,将移除位置之后的元素向前挪动一个位置,将list末尾元素置空(null),返回被移除的元素。 结论: 删除ArrayList的指定元素

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

1.1与1.2中并没有对ArrayList的数据类型有任何定义,可知ArrayList存储数据时不需要考虑元素的类型。

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

ArrayList中add方法
/**
* Appends the specified element to the end of this list.
*
* @param e element to be appended to this list
* @return <tt>true</tt> (as specified by {@link Collection#add})
*/
public boolean add(E e) {
ensureCapacityInternal(size + 1); // Increments modCount!!
elementData[size++] = e;
return true;
}
//添加操作,首先会调用ensureCapacityInternal(size + 1),其作用为保证数组的容量始终够用,其中size是elementData数组中元组的个数,初始为0。 ArrayList中ensureCapacityInternal方法 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);
} //在ensureCapacityInternal()函数中,用if判断,如果数组没有元素,给数组一个默认大小,会选择实例化时的值与默认大小中较大值,然后调用ensureExplicitCapacity()。

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

private void rangeCheck(int index)源代码:
/**
* Checks if the given index is in range.
*/
private void RangeCheck(int index) {
if (index >= size)
throw new IndexOutOfBoundsException(
"Index: "+index+", Size: "+size);
} 就是检查一下是不是超出数组界限了,超出了就抛出IndexOutBoundsException异常。
使用private声明,说明此方法只在代码内部进行,外部也确实不会用到这个方法,所以没必要用public。

2.HashSet原理

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

HashSet的存储形式用链表数组实现->每个列表被称为桶。
当我们向HashSet中添加一个元素时,HashSet会先调用该对象的hashCode()方法得到其hashCode值,根据该值决定该对象在桶中存储位置。
如果桶中已有其他元素,则调用加入对象的equals()方法与已有元素进行比较。如果比较结果为假,则将对象插入桶中。如果比较结果为真,则用新的值替换旧的值。//详见PPT《集合》33.34页

3.ArrayListIntegerStack

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

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

public ArrayIntegerStack(int n) {
this.arr = new Integer[n];
} public ArrayListIntegerStack(){
this.list = new ArrayList<Integer>();
} ArrayListIntegerStack是用ArrayList来实现栈,ArrayIntegerStack是用Integer数组来实现栈。

3.2 简单描述接口的好处.

两个类都继承了一个接口,那就是IntegerStack.

假设在 ArrayIntegerStack的基础上,如果我需求改变了,我不想用 ArrayIntegerStack ,想用ArrayListIntegerStack,那么按照上面写的话,只需要改下部分代码,否则需要改的就多了。

简单打比方,你定义一个杀鸡的接口,再写个用小刀来杀的实现类,以后用接口就可以了,如果想换牛刀的话,自己再定义一个用牛刀的实现类,然后在代码中改成换牛刀的就好,这样就不需要你改大量代码了。

4.Stack and Queue

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

public class Main201521123051 {
public static void main(String[] args){
Scanner input=new Scanner(System.in);
System.out.print("Enter a string: ");
String s=input.nextLine();
if(isPalindrome(s))
System.out.println(s+" is a palindrome");
else
System.out.println(s+" is not a palindrome");
}
public static boolean isPalindrome(String s){
int low=0;
int high=s.length()-1;
while(low<high){
if(s.charAt(low)!=s.charAt(high))
return false;
low++;
high--;
}
return true;
} }

示例

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

for (int i = 1; i <= n; i++) {
int sc = scanner.nextInt();
if (sc % 2 == 0) {
B.offer(x);
} else {
A.offer(x);
}
}
区分奇偶。 while(!A.isEmpty() || !B.isEmpty())
{
Integer a = A.poll();
if(a1 != null){
if(B.isEmpty() && A.isEmpty())
System.out.print(a);
else
System.out.print(a + " "); ... ...
}

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

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

package homework;

import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet; public class Main02 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
Set<String> arr = new TreeSet<String>();
String str=null;
while(true)
{
String word=sc.next();
if(word.equals("!!!!!"))break;
arr.add(word); } System.out.println(arr.size()); int i=0;
for(String s:arr)
{
if(i==10)break;
else if(i>arr.size())break;
System.out.println(s);
i++;
}
}
}

5.1 实验总结

  使用了Set的自然排序实现类TreeSet可较容易完成本题。
TreeSet会调用集合元素的compareTo(Object obj)方法来比较元素之间大小关系,然后将集合元素按升序排列,这种方式就是自然排序。

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

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

6.1 伪代码

6.2 实验总结

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

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

3.1. 码云代码提交记录

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

3.2. PTA实验

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

201521123051《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. ASP.NET Core身份验证服务框架IdentityServer4-整体介绍

    一.整体情况 现代应用程序看起来更像这个: 最常见的相互作用: 浏览器与Web应用程序的通信 Browser -> Web App Web应用程序与Web API通信 基于浏览器的应用程序与We ...

  2. DIV+CSS架构网站的7种版面布局形式

    "T"结构布局形式.所谓"T"结构,就是指页面顶部为横条网站标志+广告条,下方左面为主菜单,右面显示内容的布局,整体效果类似英文字母"T", ...

  3. SQL之运算符操作

    算数运算符: 用select可以实现加减乘除,求模操作等: 加法操作,      减法操作,      乘法操作,      除法操作,      DIV 除法操作,      求模操作,      ...

  4. kali linux 2.0下搭建DVWA渗透测试演练平台

    DVWA (Dam Vulnerable Web Application)DVWA是用PHP+MySQL编写的一套用于常规WEB漏洞教学和检测的WEB脆弱性测试程序.包含了SQL注入.XSS.盲注等常 ...

  5. 使用可以为 null 的类型

    ??运算符 ?? 运算符定义在将可以为 null 的类型分配给非可以为 null 的类型时返回的默认值. C#   int? c = null; // d = c, unless c is null, ...

  6. ACL权限控制列表

    1.查看文件系统是否支持ACL (xfs文件系统强制开启ACL,如果该分区已格式化为xfs,在使用dumpe2fs会看不到superblocks信息)zheng@ubuntu16:~$ sudo du ...

  7. Java温故而知新-杨辉三角形

    Java温故而知新-杨辉三角形 一. 先说需求 需求 打印输出杨辉三角形,行数可变,支持50行内的任意数. 预期结果如图所示 1 这是第几行呢,是第1 1 1 这是第几行呢,是第2 1 2 1 这是第 ...

  8. java选择排序详解

    排序算法--选择排序 public class Selector implements ISortAble{ @Override public void sort(int[] a) { int n=a ...

  9. Django编写RESTful API(三):基于类的视图

    欢迎访问我的个人网站:www.comingnext.cn 前言 在上一篇文章中,主要讲的是请求和响应,项目里面views.py中的视图函数都是基于函数的,并且我们介绍了@api_view这个很有用的装 ...

  10. STM32经典概述(干货 )

    STM32经典概述(干货 ) 首先,在学习Cortex-M3时,我们必须要知道必要的缩略语.  在网上看的,觉得挺好的,分享过来了 整理如下: AMBA:先进单片机总线架构   ADK:AMBA设计套 ...