1. 本周学习总结

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

2. 书面作业

1.ArrayList代码分析

1.1 解释ArrayList的contains源代码

先查看源代码



contains调用indexOf方法,indexOf遍历数组如果是null就查看是否有null的项返回i,如果o与数组中的元素equals就返回i如果没找到就放回-1,所以如果结果大于等于0就包含该o。

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



首先判断是否越界如果越界抛出异常,如果没有则就把其后的元素向前移,并把最后一个元素置为null然后用GC清楚元素。

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

只要不是基本数据类型就都可以,因为Arraylist是用object数组实现的,根据多态我们知道可以保存任何类型。

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

public boolean add(E e) {
ensureCapacityInternal(size + 1); // Increments modCount!!
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);
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);
}

首先确保内博有size+1的容量,如果超出容量调用grow方法,增加用来容量的一半,那么新的数组的容量是原来的1.5倍,之后再把旧的数组里的内容拷贝的新的数组里。

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

用private修饰表示给方法不希望被外部引用,而且这个方法只在内部使用,用public没什么意义。使用用private修饰就可以了。

2.HashSet原理

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

这边需要调用到hashCode与equals方法,

首先根据hashCode算出散列码找到对应的列表,这时如果其中没有其他元素就直接加入,如果已经有其他元素了就调用equals方法逐一比较,如果比较结果为假就加入,如果为真就用新的元素代替旧的元素。

3.ArrayListIntegerStack

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

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

前者用内部使用ArrayList对象存储,后者用内部使用数组实现。这里的区别就是ArrayList有很多自带发方法了,我们在我们实现接口的方法是很多地方可以直接调用ArrayList的方法,这样非常快代码也很简洁。

3.2 简单描述接口的好处.

经过这段时间的学习和pta的实践,首先先从上面这题入手,你看如果有一个接口,我们就可以根据不同的需要用不同的方法进行实现非常的灵活不会固定死代码,

其二就是如果我们在还不知道具体怎么实现时,先把自己想实现的方法先声明出来,这样如果你和他人合作时,别人可以根据你的需求进行写代码。

4.Stack and Queue

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

public class Main201521123002 {

	public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayListIntegerStack stack=new ArrayListIntegerStack();
Scanner sc = new Scanner(System.in);
String s=sc.next();
for(int i=0;i<s.length();i++){
stack.push(s.charAt(i));
}
boolean f=true;
for(int i=0;i<s.length();i++)
if(stack.pop()!=s.charAt(i)){
f=false;
break;
}
if(f)
System.out.println("yes");
else
System.out.println("no");
} }

这里只是截取关键代码,上面的ArrayListIntegerStack就是我们pta上面的题目只是把Integer改为Character

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

		Queue<Integer> A= new LinkedList<Integer>();
Queue<Integer> B= new LinkedList<Integer>();
ArrayList<Integer> C=new ArrayList<Integer>();
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
for(int i=0;i<n;i++){
int x=sc.nextInt();
if(x%2==0){
B.offer(x);
}
else
A.offer(x);
}
while(!A.isEmpty()&&!B.isEmpty()){
for(int i=0;i<2&&!A.isEmpty();i++){
C.add(A.poll());
}
C.add(B.poll());
}
if(!A.isEmpty())
C.addAll(A);
else if(!B.isEmpty())
C.addAll(B);
int i;
for(i=0;i<n-1;i++)
System.out.print(C.get(i)+" ");
System.out.print(C.get(i));
}
}

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

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

package chpt06;

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

5.1 实验总结

这题主要就是学会用TreeSet,TreeSet会自动把add进去的string按照顺序排序,然后输入这个地方的代码要注意一下,最后输出部分其实可以用迭代器。

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

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

7.2 使用集合类改进大作业

import java.util.ArrayList;

public class Cart {
ArrayList<Book> item = new ArrayList<Book>();
public void add(Book e) {
if(item.contains(e)){
item.get(item.indexOf(e)).num+=e.num;
}
else item.add(e);
} public void delete(Book e) {
item.remove(e);
} public void clear() {
if (item.size() != 0) {
item.clear();
}
} public void display() {
if (item.isEmpty()) {
System.out.println("您的购物车没有东西,快去买买买吧!");
}
else {
System.out.println("你的购物列表");
for (Book e : item) {
System.out.println(e);
}
}
}
public void totalPrice() {
double sum = 0;
for (Book e : item) {
sum += e.getPrice() * e.getNum();
}
System.out.println("总计为"+sum+"元");
}
}

参考资料:

JTable参考项目

3. 使用码云管理Java代码

4. 实验总结

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

201521123002《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. python基础===zip在python3中的用法

    name=["ad","kein","tom"] age=[23,45,22] tel=['157','139','167'] print( ...

  2. shell编程之数组

    bash 编程只支持一维数组,不支持多维,类似c语言,数组下标从0开始,下标可以是整数,也可以是表达式 数组的定义 在shell中用括号来表示数组,中间用空格来隔开 主要有两种种定义形式: arr=( ...

  3. DATAGUARD常用管理命令

    --DATAGUARD常用管理命令 ----------------------------2014/04/22 备用服务器的管理模式与只读模式 1.1备库启动到管理恢复模式 SQL>shutd ...

  4. ORACLE_RESETLOGS浅析[转]

    alter database open resetlogs 这个命令我想大家都很熟悉了,那有没有想过这个resetlogs选项为什么要用?什么时候用?它的原理机制是什么?他都起哪些作用? 我们都知道数 ...

  5. Dbentry4.2连接MSSQL

    Dbentry4.2 连接MSSQL <Leafing.Settings> <add key="DefaultContext" value="mssql ...

  6. Java的static和final关键字的用法

    static关键字的用法 static的意思是"'静态的",在java里面可用于修饰属性和方法. static关键字的应用应注意以下几种情形: 1.static作用于某个字段,一个 ...

  7. 突然兴起复习一下Swift3.0

    /// 参考Swift3.0.1文档 /// 摘录来自: Apple Inc. "The Swift Programming Language (Swift 3.0.1)". iB ...

  8. 抛开深层次底层,快速入门SpringMVC

    SpringMVC主要有三个核心部分组成,DispatcherServlet.Controller.ViewResolver.          DispatcherServlet:     请求输入 ...

  9. .Net Framework下对Dapper二次封装迁移到.Net Core2.0遇到的问题以及对Dapper的封装介绍

    今天成功把.Net Framework下使用Dapper进行封装的ORM成功迁移到.Net Core 2.0上,在迁移的过程中也遇到一些很有意思的问题,值得和大家分享一下.下面我会还原迁移的每一个过程 ...

  10. linux各个文件夹的用途

    英文: /bin: where binary programs live. /boot: the special programs that start the system when you tur ...