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自动化运维二:业务服务监控

    p { margin-bottom: 0.25cm; line-height: 120% } a:link { } p { margin-bottom: 0.25cm; line-height: 12 ...

  2. 使用DbFunctions来解决EF按照日期分组数据

    如下一张表 要进行MyDate的date部分进行分组,我们会发现如下写法会报异常 那么如何才能使linq正确转化为sql语句呢,这就要使用到了DbFunctions这个工具类 转到定义可以看到此类在e ...

  3. MD5加密工具

    import java.math.BigInteger; import java.security.MessageDigest; import java.security.NoSuchAlgorith ...

  4. XP oracle32位客户端安装找不到orandce11.dll.dbl

    同事在XP上装oracle客户端,遇到下面的问题,mark一下. 提示找不到:orandce11.dll.dbl 点继续还会提示这个文件:orancds11.dll.dbl 网上找到解决方法: 删除注 ...

  5. ExecutorService的submit方法使用

    在Java5之后,并发线程这块发生了根本的变化,最重要的莫过于新的启动.调度.管理线程的一大堆API了.在Java5以后,通过Executor来启动线程比用Thread的start()更好.在新特征中 ...

  6. iconfont 使用

    阿里巴巴适量图库  http://www.iconfont.cn/ 官方帮助中有非常详细的操作指导 http://www.iconfont.cn/help/detail?spm=a313x.77810 ...

  7. 【转载】初识google test

    一.前言 本篇将介绍一些gtest的基本使用,包括下载,安装,编译,建立我们第一个测试Demo工程,以及编写一个最简单的测试案例. 二.下载 如果不记得网址, 直接在google里搜gtest,第一个 ...

  8. jaspersoft studio 的初级入门(一)

    前言 最近的工作涉及到企业的报表生成功能,于是就想用此篇博客来记录我的学习历程.进入Jasperreport项目的官网发现有一个软件叫Jaspersoft studio的,它的版本也是6.3.1跟Ja ...

  9. C# 逆变与协变

    该文章中使用了较多的 委托delegate和Lambda表达式,如果你并不熟悉这些,请查看我的文章<委托与匿名委托>.<匿名委托与Lambda表达式>以便帮你建立完整的知识体系 ...

  10. Effective Java通俗理解(下)

    Effective Java通俗理解(上) 第31条:用实例域代替序数 枚举类型有一个ordinal方法,它范围该常量的序数从0开始,不建议使用这个方法,因为这不能很好地对枚举进行维护,正确应该是利用 ...