201621123005《java程序设计》第八次实验总结
201621123005《Java程序设计》第八次实验总结
- 本周学习总结
以你喜欢的方式(思维导图或其他)归纳总结集合相关内容。
- 书面作业
- ArrayList代码分析
1.1 解释ArrayList的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;
}
当元素不为null时,调用equals()方法来确定元素是否存在,当存在是返回true,否则返回false
1.2 解释E remove(int index)源代码
public E remove(int index) {
rangeCheck(index);
modCount++;
E oldValue = elementData(index);
int numMoved = size - index - 1;
if (numMoved > 0)
System.arraycopy(elementData, index+1, elementData, index,
numMoved);
elementData[--size] = null;
return oldValue;
}
先判断数组是否越界,当不越界时,将对应的元素取出来,然后把后面所有的元素往前,最后返回被删除的元素。原来最后一个元素位置为null
1.3 结合1.1与1.2,回答ArrayList存储数据时需要考虑元素的具体类型吗?
不需要,因为是用Object数组实现,而Object类又是所有类的父亲,所以不需要考虑。
1.4 分析add源代码,回答当内部数组容量不够时,怎么办?
public boolean add(E e) {
ensureCapacityInternal(size + 1);//判断空间是否足够,不够就扩充
elementData[size++] = e;//容量增一,在尾部增加
return true;
}
private void ensureCapacityInternal(int minCapacity) {
if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA)
{
minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity); }
ensureExplicitCapacity(minCapacity);
}
当elementData是默认的长度的空数组的时,就确保数组容量是传入参数和默认长度的最大值。
private void ensureExplicitCapacity(int minCapacity) {
modCount++;
if (minCapacity - elementData.length > 0)
grow(minCapacity);
}
modCount先自增,当数组容量不够时,调用grow()方法。
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);
}
private static int hugeCapacity(int minCapacity) {
if (minCapacity < 0) // overflow
throw new OutOfMemoryError();
return (minCapacity > MAX_ARRAY_SIZE) ?
Integer.MAX_VALUE :
MAX_ARRAY_SIZE;
}
所以当数组容量不够时,数组容量会对数组进行自动扩容并把原数组的值拷贝到这个数组中。
1.5 分析private void rangeCheck(int indeyo'ox)源代码,为什么该方法应该声明为private而不声明为public?
因为类的用户是不需要知道remove()的时候具体发生了什么,只需要知道是否正确删除就可以了。
2、HashSet原理
2.1 将元素加入HashSet(散列集)中,其存储位置如何确定?需要调用那些方法?
首先计算哈希码的值即调用hashCode方法,然后根据哈希码查找对应存储位置,如果指定位置已有其他元素,则调用equals方法与已有元素进行比较,如果比较结果为假,则将元素插入,如果为真,则用新的值替换旧的值。
2.2 将元素加入HashSet中的时间复杂度是多少?是O(n)吗?(n为HashSet中已有元素个数)
时间复杂度是o(1),因为添加的时候是通过哈希算法来确定元素的添加位置,判断次数是常量。
3、 ArrayListIntegerStack
题集jmu-Java-05-集合之ArrayListIntegerStack
3.1 比较自己写的ArrayListIntegerStack与自己在题集jmu-Java-04-面向对象2-进阶-多态、接口与内部类中的题目自定义接口ArrayIntegerStack,有什么不同?(不要出现大段代码)
存储方式不同,上次运用数组存储,这次用动态数组,相比动态数组简简洁很多,比如动态数组在获取栈顶元素或出栈都可以直接运用size()来获得栈顶位置,然后进行操作,而数组则需定义一个top指针。
3.2 结合该题简单描述接口的好处,需以3.1为例详细说明,不可泛泛而谈。
先定义一个接口,在接口内存放接口的名称,然后在类里面根据所需要的功能去重写这些方法,如果想要修改时就直接在类里面修改,想要增加时就只需要在接口中添加想要的,然后在类里面去编写这个方法,所以就是很方便而且灵活。
4、 Stack and Queue
4.1 编写函数判断一个给定字符串是否是回文,一定要使用栈(请利用Java集合中已有的类),但不能使用java的Stack类(具体原因自己搜索)与数组。请粘贴你的代码,类名为Main你的学号。
package week9;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
interface IntegerStack{
public Integer push(Integer item);
public Integer pop();
}
class ArrayInterStack implements IntegerStack{
private List<Integer> list;
public ArrayInterStack (){
list=new ArrayList<Integer>();
}
@Override
public Integer push(Integer item) {
// TODO Auto-generated method stub
if (item == null)
return null;
list.add(item);
return item;
}
@Override
public Integer pop() {
// TODO Auto-generated method stub
if (list.isEmpty())
return null;
return list.remove(list.size() - 1);
}
@Override
public String toString() {
return list.toString();
}
}
public class Main201621123005{
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayInterStack arr=new ArrayInterStack();
Scanner sc=new Scanner(System.in);
String str=sc.nextLine();
char ch[]=str.toCharArray();
for (int i = 0; i < str.length(); i++) {
arr.push((int) ch[i]);
}
for (int i = 0; i < ch.length; i++) {
if(ch[i]==arr.pop())
{
System.out.println("huiwen");
break;
}
else
{
System.out.println("buhuiwen");
break;
}
}
}
}
4.2 题集jmu-Java-05-集合之银行业务队列简单模拟(只粘贴关键代码)。请务必使用Queue接口,并说明你使用了Queue接口的哪一个实现类?
把A,B窗口存放的人放在两个队列
Queue<Integer> dequeA=new ArrayDeque<>();
Queue<Integer> dequeB=new ArrayDeque<>();
根据奇偶入队
if(m%2==0){
{ dequeB.add(m);
}
else
dequeA.add(m);
}
}
输出操作
while(dequeA.size()!=0||dequeB.size()!=0){
if(dequeA.size()>=2&&dequeB.size()>=1)
{
//
}
else if(dequeA.size()<2&&dequeB.size()>=1){
//
}
else if(dequeA.size()>=2&&dequeB.size()<1)
{
//
}
else
System.out.print(dequeA.remove());
}
5、 统计文字中的单词数量并按单词的字母顺序排序后输出
5.1 实验总结
用Set集时可以避免重复元素进入,而且TreeSet使字符排序。
for (String e : words) {
if(i<10)
{ i++;
System.out.println(e);
}
else break;
}
用如上来输出排名前十的字符。
6、 选做:统计文字中的单词数量并按出现次数排序
6.1 伪代码
创建HashMap对象map;
读入字符串;
当遇到!!!!!时退出;
当map中不存在word时times=1;
当map中存在word时times+1;
创建ArrayList对象list;
用Collections.sort()排序;
输出map长度;
输出前十个数据;
6.2 实验总结
List<Map.Entry<String,Integer>> list=new ArrayList<Map.Entry<String,Integer>>(map.entrySet());
Collections.sort(list,new Comparator<Map.Entry<String,Integer>>(){
public int compare(Map.Entry<String,Integer>o1,Map.Entry<String,Integer>o2)
{
if(o1.getValue()==o2.getValue()){
return o1.getKey().compareTo(o2.getKey());
}
if( o1.getValue()>o2.getValue())
return -1;
else
return 1;
}
});
这道题是主要把Map中的键值对放进ArrayList,然后用Collections.sort()排序。
3.码云及PTA
题目集:jmu-Java-05-集合
3.1. 码云代码提交记录
3.2 截图PTA题集完成情况图
3.3 统计本周完成的代码量
周次 | 总代码量 | 新增代码量 | 总文件数 | 新增文件数 |
---|---|---|---|---|
2 | 381 | 381 | 12 | 5 |
3 | 661 | 280 | 19 | 7 |
4 | 974 | 313 | 24 | 5 |
5 | 1358 | 384 | 33 | 9 |
6 | 2211 | 853 | 37 | 4 |
7 | 4623 | 412 | 42 | 5 |
201621123005《java程序设计》第八次实验总结的更多相关文章
- 201621123005《Java程序设计》第九次实验总结
201621123005<Java程序设计>第九周实验总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 1.2 选做:收集你认为有用的代码片段 ...
- 20145330《Java程序设计》第二次实验报告
20145330<Java程序设计>第二次实验报告 实验二 Java面向对象程序设计 实验内容 1.初步掌握单元测试和TDD 2.理解并掌握面向对象三要素:封装.继承多态 3.初步掌握UM ...
- 20145320《Java程序设计》第二次实验报告
20145320<Java程序设计>第二次实验报告 北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1453 指导教师:娄嘉鹏 实验日期:2016.04.12 15: ...
- 《Java程序设计》第二次实验报告
20145220 <Java程序设计>第二次实验报告 课程:Java程序设计 指导教师:娄嘉鹏 实验日期:2016.04.12 实验名称:Java面向对象程序设计 实验内容 初步掌握单元测 ...
- 20145333 《Java程序设计》第二次实验报告
2014333 <Java程序设计>第二次实验报告 课程:Java程序设计 指导教师:娄嘉鹏 实验日期:2016.04.12 实验名称:Java面向对象程序设计 实验内容 初步掌握单元测试 ...
- 20144303 《Java程序设计》第二次实验实验报告
20144303 <Java程序设计>第二次实验实验报告 北京电子科技学院(besti)实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握U ...
- 20145240 《Java程序设计》第二次实验报告
20145240 <Java程序设计>第二次实验报告 北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1452 指导教师:娄嘉鹏 实验日期:2016.04.12 实验 ...
- 201621123005《Java程序设计》第十次实验总结
201621123005<Java程序设计>第十周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 1. 常用异常 1.1 自己 ...
- Java程序设计第四次实验报告
北京电子科技学院(BESTI) 实 验 报 告 课程:java程序设计 班级:1352 姓名:何伟钦 学号:20135223 成绩: 指导教师:娄嘉鹏 ...
- 201771010123汪慧和《面向对象程序设计JAVA》第八周实验总结
一.理论部分 1.接口 用interface声明,是抽象方法和常量值定义的集 合.从本质上讲,接口是一种特殊的抽象类. 在Java程序设计语言中,接口不是类,而是对类 的一组需求描述,由常量和一组抽象 ...
随机推荐
- C#基础整理(二)
1.变量类型int.double.string.char.bool.decimal变量使用规则:先声明,再赋值,最后使用 2.命名规范:Camel:第一个单词首字母小写,其他单词首字母大写,其余字母小 ...
- centos7.3下ScyllaDB1.6安装
转自:http://10710016.blog.51cto.com/10700016/1900483 ScyllaDB 安装配置 1.说明: scylladb支持centos7.2 64位 及以上版本 ...
- 通过生成器yield实现单线程的情况下实现并发运算效果(异步IO的雏形)
一.协程: 1.生成器只有在调用时才会生成相应的数据 2.调用方式有 " str__next__.() str.send() ", 3.并且每调用一次就产生一个值调用到最后一个 ...
- hive表与外部表的区别
相信很多用户都用过关系型数据库,我们可以在关系型数据库里面创建表(create table),这里要讨论的表和关系型数据库中的表在概念上很类似.我们可以用下面的语句在Hive里面创建一个表: hive ...
- python3 函数即变量的使用
函数即变量的意思是函数被使用时后面不用(),类似变量的使用,具体如下面的示例代码: def say(name): print(name) hi = say hi('你好!') def add(): p ...
- 多线程Java面试题总结
57.Thread类的sleep()方法和对象的wait()方法都可以让线程暂停执行,它们有什么区别?答:sleep()方法(休眠)是线程类(Thread)的静态方法,调用此方法会让当前线程暂停执行指 ...
- hashset和treeset的区别
hashset 和 treeset的区别 hashset 和 treeset的区别 1.TreeSet 是二差树实现的,Treeset中的数据是自动排好序的,不允许放入null值. 2.HashSet ...
- Mail.Ru Cup 2018 Round 2 Solution
A. Metro Solved. 题意: 有两条铁轨,都是单向的,一条是从左往右,一条是从右往左,Bob要从第一条轨道的第一个位置出发,Alice的位置处于第s个位置,有火车会行驶在铁轨上,一共有n个 ...
- Avito Cool Challenge 2018 Solution
A. Definite Game 签. #include <bits/stdc++.h> using namespace std; int main() { int a; while (s ...
- 牛客国庆集训派对Day2 Solution
A 矩阵乘法 思路: 1° 牛客机器太快了,暴力能过. #include <bits/stdc++.h> using namespace std; #define N 5000 in ...