201521123002《Java程序设计》第7周学习总结
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周学习总结的更多相关文章
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- 20145213《Java程序设计》第二周学习总结
20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...
- 20145213《Java程序设计》第一周学习总结
20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...
- 21045308刘昊阳 《Java程序设计》第九周学习总结
21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...
- 20145330孙文馨 《Java程序设计》第一周学习总结
20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...
- 20145337 《Java程序设计》第九周学习总结
20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...
- 20145337 《Java程序设计》第二周学习总结
20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...
- 20145218《Java程序设计》第一周学习总结
20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...
- 《Java程序设计》第九周学习总结
20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...
- 《Java程序设计》第二周学习总结
20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...
随机推荐
- C#设计模式(3)-工厂方法模式
引言 上一篇介绍了设计模式中的简单工厂模式-C#设计模式(2)-简单工厂模式,本篇将介绍工厂方法模式,在简单工厂模式下进行改造: 工厂方法模式简介 工厂方法(FactoryMethod)模式:定义一个 ...
- JS正则密码复杂度校验之:至少有多种字符中的其中几种
概述 续接上文的密码校验要求: 这个需求有两个难点,一,是如何使用正则匹配所有半角英文标点符号,二,是如何验证密码段中在要求的四种(大写字母,小写字母,数字,标点符号)类型中至少存在三种. 第一个难点 ...
- sqlite 的基本使用2
sqlite的运算符有好几种,算术运算符,比较运算符,逻辑运算符,位运算符 1,算术运算符 算术运算符主要有 + - * . % (取余)这个很简单,举一个例子就行,要达到这样的效果需要格式化行输出 ...
- AIX smit下创建逻辑卷、添加文件系统并挂载
--AIX smit下创建逻辑卷,添加文件系统并挂载------------------------------------------2013/10/15 首先创建逻辑卷smit lv ,这里没多大 ...
- 两点补充——CSS3新属性以及弹性布局
CSS3 新属性 一.[ CSS3新增属性前缀 ] 1.-webkit-:chrome/safari 2.-moz-:火狐 3.-mo-:IE 4.-o-: Opera 欧朋 二 .[CSS 长度单位 ...
- .NET Core 2.0 开源Office组件 NPOI
前言 去年 12 月,我移植了大家所熟知 NPOI 到 .NET Core 版本,这里是当时发的博客,当时得到了很多同学的支持,社区反应也很好,在这里非常感谢当时推荐的朋友们. 去年的那个版本是针对于 ...
- 菜鸟的Xamarin.Forms前行之路——按钮的按下抬起事件的监控(可扩展至其他事件)
提问:监控按钮的点击事件,可以通过按钮的Click事件,或者Command绑定,那么如何监控按钮的按下与抬起,或者移动,长按,双击等事件? 解决方法:各个平台自定义渲染依赖注入. 共享项目PCL: 1 ...
- unity slua整合帅气的lua-pb解析protobuf
了解到lua的一个protobuf库,接口帅气,比之前用过的一些lua protobuf库要好很多,深得我心.而且能保持更新,比其他库几年没更新要放心. lua-pb动态解析protobuf协议,无需 ...
- WeQuant交易策略—RSI
RSI指标策略 策略介绍 RSI(相对强弱指标),是通过一段时期内的平均收盘上涨和下跌数,计算价格上涨所产生的波动占整个波动的百分比,来分析市场买卖盘的意向和实力. 计算公式(以日为单位举例) RSI ...
- 面试题1 -- Java 中,怎么在格式化的日期中显示时区?
使用SimpleDateFormat来实现格式化日期 import java.text.SimpleDateFormat; import java.util.Date; public class Da ...