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 ... 
随机推荐
- 【head first python】1.初识python  人人都爱列表
			#coding:utf-8 #创建简单的python列表 movies = ["The Holy Grail", "The Life of Brain", &q ... 
- android学习ProgressBar的简单使用
			android 提供的ProgressBar控件分为两种,一种是不带进度的进度条,一种是带进度的进度条,如果可以计算任务的完成量那么就用带进度条的,如果无法计算任务量,那么就使用不带进度的进度条.Pr ... 
- 【开源社交系统研发日记】利用 Docker 包 Laradock 服务器部署 Laravel & ThinkSNS+ 等程序实战(多项目)
			什么是ThinkSNS+ ThinkSNS(简称TS),一款全平台综合性社交系统,为国内外大中小企业和创业者提供社会化软件研发及技术解决方案,目前最新版本为ThinkSNS+. 前段时间不知道抽上面疯 ... 
- Go语言中函数的实现
			Go 语言函数 函数是基本的代码块,用于执行一个任务. Go 语言最少有个 main() 函数. 你可以通过函数来划分不同功能,逻辑上每个函数执行的是指定的任务. 函数声明告诉了编译器函数的名称,返回 ... 
- JS模拟类的实现
			http://www.ruanyifeng.com/blog/2012/07/three_ways_to_define_a_javascript_class.html 
- Spring Data Jpa(Hibernate) OneToMany
			这个其实非常简单.假设有topic 和 subscriber两个实体类,不考虑关联关系,则连个类的代码如下: /** * Created by csonezp on 2017/8/31. */ @En ... 
- 知名渗透测试利器分享 - Appscan下载
			安全测试应该是测试中非常重要的一部分,但他常常最容易被忽视掉. 尽管国内经常出现各种安全事件,但没有真正的引起人们的注意.不管是开发还是测试都不太关注产品的安全.当然,这也不能怪我们苦B的" ... 
- thinkjs—控制器方法名不能大写
			async updateInfoAction(){ ... } 上面的接口如果通过ajax访问,就会报404的错误.原因似乎在于访问updateInfo时,会自动转化成小写,而小写的updateinf ... 
- python基础教程(五)
			字符串基本操作 所有标准的序列操作(索引.分片.乘法.判断成员资格.求长度.取最小值和最大值)对字符串同样适用,前面已经讲述的这些操作.但是,请注意字符串都是不可变的. 字符串的方法: 字符串从str ... 
- python基础教程(二)
			继续第一篇的内容,讲解,python的一些基本的东西. 注释 为了让别人能够更容易理解程序,使用注释是非常有效的,即使是自己回头再看旧代码也是一样. >>> #获得用户名: > ... 
