第八周java学习总结

时间:2022-09-24 19:31:23

学号 20175206 《Java程序设计》第八周学习总结

教材学习内容总结

第十五章:泛型与集合框架

主要内容
泛型
链表
堆栈
散列映射
树集
树映射

重点和难点
重点:泛型和集合的使用
难点:集合的使用

泛型类声明
可以使用“class 名称”声明一个类,为了和普通的类有所区别,这样声明的类称作泛型类,如:
class People
其中People是泛型类的名称,E是其中的泛型,也就是说我们并没有指定E是何种类型的数据,它可以是任何对象或接口,但不能是基本类型数据。

使用泛型类声明对象
泛型类声明和创建对象时,类名后多了一对“<>”,而且必须要用具体的类型替换“<>”中的泛型。例如:
Cone coneOne;
coneOne =new Cone(new Circle());

链表
链表是由若干个称作节点的对象组成的一种数据结构,每个节点含有一个数据和下一个节点的引用 。

LinkedList泛型类
LinkedList泛型类创建的对象以链表结构存储数据,习惯上称LinkedList类创建的对象为链表对象。例如,
LinkedList mylist=new LinkedList();
创建一个空双链表。
add(E obj) 向链表依次增加节点

LinkedList泛型类常用方法
LinkedList泛型类实现Lis泛型接口中的一些常用方法。
public boolean add(E element) 向链表末尾添加一个新的节点,该节点中的数据是参数elememt指定的数据。
public void add(int index ,E element) 向链表的指定位置添加一个新的节点,该节点中的数据是参数elememt指定的数据。
public void clear() 删除链表的所有节点,使当前链表成为空链表。
public E remove(int index) 删除指定位置上的节点。
public boolean remove(E element) 删除首次出现含有数据elemen的节点。
public E get(int index) 得到链表中指定位置处节点中的数据。
LinkedList泛型类本身新增加的一些常用方法
public void addFirst(E element) 向链表的头添加新节点,该节点中的数据是参数elememt指定的数据。
public void addLast(E element) 向链表的末尾添加新节点,该节点中的数据是参数elememt指定的数据。
public E getFirst() 得到链表中第一个节点中的数据。
public E getLast() 得到链表中最后一个节点中的数据。
public E removeFirst() 删除第一个节点,并返回这个节点中的数据。

遍历链表
当用户需要遍历集合中的对象时,应当使用该集合提供的迭代器,而不是让集合本身来遍历其中的对象。由于迭代器遍历集合的方法在找到集合中的一个对象的同时,也得到待遍历的后继对象的引用,因此迭代器可以快速地遍历集合。
链表对象可以使用iterator()方法获取一个Iterator对象,该对象就是针对当前链表的迭代器。

排序与查找
Collections类提供的用于排序和查找的类方法如下:
public static sort(List list) 该方法可以将list中的元素升序排列。
int binarySearch(List list, T key,CompareTo c) 使用折半法查找list是否含有和参数key相等的元素,如果key链表中某个元素相等,方法返回和key相等的元素在链表中的索引位置(链表的索引位置从0考试),否则返回-1。

洗牌与旋转
Collections类还提供了将链表中的数据重新随机排列的类方法以及旋转链表中数据的类方法。
public static void shuffle(List list) 将list中的数据按洗牌算法重新随机排列。
static void rotate(List list, int distance) 旋转链表中的数据。
public static void reverse(List list) 翻转list中的数据。

堆栈
堆栈是一种“后进先出”的数据结构,只能在一端进行输入或输出数据的操作。
Stack泛型类创建一个堆栈对象,堆栈对象常用方法:
public E push(E item);实现压栈操作
public E pop();实现弹栈操作。
public boolean empty();判断堆栈是否还有数据。
public E peek();获取堆栈顶端的数据,但不删除该数据。
public int search(Object data);获取数据在堆栈中的位置。

散列映射
HashMap<K,V>泛型类
HashMap<K,V>对象采用散列表这种数据结构存储数据,习惯上称HashMap<K,V>对象为散列映射。
例如:
HashMap<String,Student> hashtable= HashSet<String,Student>();
hashtable可以存储“键/值”对数据。
相关方法:
public V put(K key,V value)将键/值对数据存放到散列映射中,该方法同时返回键所对应的值。
public void clear() 清空散列映射。
public Object clone() 返回当前散列映射的一个克隆。
public boolean containsKey(Object key) 如果散列映射有“键/值”对使用了参数指定的键,方法返回true,否则返回false。
public boolean containsValue(Object value) 如果散列映射有“键/值”对的值是参数指定的值。
public V get(Object key) 返回散列映射中使用key做键的“键/值”对中的值。
public boolean isEmpty() 如果散列映射不含任何“键/值”对,方法返回true,否则返回false。
public V remove(Object key) 删除散列映射中键为参数指定的“键/值”对,并返回键对应的值。
public int size() 返回散列映射的大小,即散列映射中“键/值”对的数目。

遍历散列映射
public Collection values()方法返回一个实现Collection接口类创建的对象。
使用接口回调技术,即将该对象的引用赋给Collection接口变量,该接口变量可以回调iterator()方法获取一个Iterator对象,这个Iterator对象存放着散列映 射中所有“键/值”对中的“值”。

基于散列映射的查询
对于经常需要进行查找的数据可以采用散列映射来存储这样的数据,即为数据指定一个查找它的关键字,然后按着“健-值”对,将关键字和数据一并存入散列映射中。

树集
TreeSet泛型类
TreeSet类创建的对象称作树集。
树集用add方法添加节点,节点会按其存放的数据的“大小”顺序一层一层地依次排列,在同一层中的节点从左到右按“大小”顺序递增排列,下一层的都比上一层的小。
public boolean add(E o) 向树集添加加节点。
public void clear() 删除树集中的所有节点。
public void contains(Object o) 如果树集中有包含参数指定的对象,该方法返回true,否则返回false 。
public E first() 返回树集中的第一个节点中的数据(最小的节点)。
public E last() 返回最后一个节点中的数据(最大的节点)。
public isEmpty() 判断是否是空树集,如果树集不含任何节点,该方法返回true 。
public boolean remove(Object o) 删除树集中的存储参数指定的对象的最小节点。
public int size() 返回树集中节点的数目。

树映射
TreeMap<K,V>类实现了Map<K,V>接口,称TreeMap<K,V>对象为树映射。
树映射使用public V put(K key,V value);方法添加节点。

代码调试中的问题和解决过程

  • 问题1:遍历链表所用时间的不同方法

迭代器遍历链表
get(int index)遍历链表

第八周java学习总结

  • 问题2:链表中的排序与查找
  • 问题2解决方案:

第八周java学习总结

  • 问题3:洗牌与旋转
  • 问题3解决方案:

第八周java学习总结

上周考试错题总结

  • 错题1
    接口Statement中定义的execute方法的返回类型是(C)

A .ResultSet

B .int

C .boolean

D .double

  • 错题2
    下列操作数据库时遇到的异常情况说法正确的是(BD)

A .java.sql.SQLException: Unknown column 'sid' in 'field list' (SQL语句表名错误)

B .java.sql.SQLException:结果集已耗尽 (结果集用尽或未调用next)

C .java.sql.SQLException: Data too long for column 'id' at row 1(列名定义过长)

D .java.sql.SQLException: No suitable driver(URL拼写错误)

  • 错题3
    下列说法错误的是(B)

A .Statement的executeQuery()方法会返回一个结果集

B .Statement的executeUpdate()方法会返回是否更新成功的boolean值

C .使用ResultSet中的getString()可以获得一个对应于数据库中char类型的值

D .ResultSet中的next()方法会使结果集中的下一行成为当前行

  • 错题4
    以下代码中有两个线程:(B)

public class E {
public static void main(String args[]) {
Target target =new Target();
Thread thread =new Thread(target);
target.run();
for(int i= 0;i<=10;i++) {
System.out.println("yes");
try{ Thread.sleep(1000);
}
catch(InterruptedException exp){}
}
}
}
class Target implements Runnable{
public void run() {
for(int i= 0;i<=10;i++) {
System.out.println("ok");
try{
Thread.sleep(1000);
}
catch(InterruptedException exp){}
}
}
}
A .true

B .false

[代码托管]

码云学习项目链接(https://gitee.com/ldc792975996/20175206_li_dechen/tree/master/%E7%AC%AC%E5%85%AB%E5%91%A8%E4%BB%A3%E7%A0%81/%E7%AC%AC%E5%8D%81%E4%BA%94%E7%AB%A0%E4%BB%A3%E7%A0%81/src)

第八周java学习总结

第八周java学习总结

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 3500行 8篇 100小时
第五周 350/500 2/2 15/20
第六周 350/500 2/2 20/30
第七周 600/1000 2/2 25/25
第八周 300/1500 2/2 15/25

尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

参考:软件工程软件的估计为什么这么难软件工程 估计方法

  • 计划学习时间:25小时

  • 实际学习时间:15小时

  • 改进情况:

(有空多看看现代软件工程 课件
软件工程师能力自我评价表
)

参考资料

第八周java学习总结的更多相关文章

  1. 20165223《Java程序设计》第八周Java学习总结

    教材学习内容总结 第12章-JAVA多线程机制 要点 Java中的线程 Thread类与线程的创建 线程的常用方法 线程同步 协调同步的线程 线程联合 GUI线程 计时器线程 教材学习中的问题和解决过 ...

  2. 2019年8月19日~8月25日 第八周JAVA学习总结

    临近开学,本周的任务完成情况不够好,平常乱七八糟的事情比较多,所以放在学习上的心思比较少.平均每天放在JAVA学习的时间约1个小时,放在编程的时间约半小时,解决问题的时间约1小时. 下一个星期就要开学 ...

  3. 20145307第八周JAVA学习报告

    20145307<Java程序设计>第8周学习总结 教材学习内容总结 通用API 日志API 1.java.util.logging包提供了日志功能相关类与接口,使用日志的起点是logge ...

  4. 20165236 第六周Java学习总结

    20165236 第六周Java学习总结 一. 第八章内容: 1.String 类: String对象.常量对象:字符串并置: 常用方法: length,equals,startsWith,compa ...

  5. 第五周Java学习总结(补)

    第五周java学习内容(补) 学习内容: File类方法的操作 public String getName() public boolean canRead() public boolean canW ...

  6. 20165203《Java程序设计》第七周Java学习总结

    20165203<Java程序设计>第七周Java学习总结 教材学习内容总结 第11章 JDBC与MySQL数据库 MySQL数据库管理系统 MySQL数据库管理系统,简称MySQL,是世 ...

  7. 20145307陈俊达第六周JAVA学习总结

    20145307陈俊达第六周JAVA学习总结 知识点梳理 第十章节 S1 ·若要将数据从来源中取出,可以使用输入串流:若要将数据写入目的地,可以使用输出串流.在java中,输入串流代表对象为java. ...

  8. 第十一周java学习总结

    目录 第十一周java学习总结 学习内容 学习总结 提交代码截图 代码推送 第十一周java学习总结 学习内容 第13章 Java网络编程 主要内容 URL类 InetAdress类 套接字 UDP数 ...

  9. 第十周java学习总结

    目录 第十周java学习总结 学习内容 代码上传截图 代码链接 第十周java学习总结 学习内容 第12章 Java多线程机制 主要内容 Java中的线程 Thread类与线程的创建 线程的常用方法 ...

随机推荐

  1. http错误码

    2xx  成功  200  正常:请求已完成.  201  正常:紧接 POST 命令.  202  正常:已接受用于处理,但处理尚未完成.  203  正常:部分信息 - 返回的信息只是一部分.   ...

  2. AC日记——大整数加法 openjudge 1&period;6 10

    10:大整数加法 总时间限制:  1000ms 内存限制:  65536kB 描述 求两个不超过200位的非负整数的和. 输入 有两行,每行是一个不超过200位的非负整数,可能有多余的前导0. 输出 ...

  3. JavaScript内的类型转换

    JavaScript内的类型转换 1.分为自动转换和强制转换,我们一般用强制转换.其他类型转换为整数是parseInt();其他类型转化为小数parseFloat(); 2.判断是不是一个合法数字   ...

  4. jedis入门实例

    在使用传统的关系数据库,我们都需要依赖一个所谓的实现了jdbc规范的驱动程序来连接数据库,这些驱动程序由各大数据库厂商提供.这些驱动就是jar包,里面就是封装了对数据库的通信协议,我们通过简单的调用就 ...

  5. 多线程之RunLoop

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  6. Redis时延问题

    单线程你别阻塞,Redis时延问题分析及应对 内容目录: 耗时长的命令造成阻塞 fork产生的阻塞 持久化造成的阻塞 单线程你别阻塞,Redis时延问题分析及应对 Redis的事件循环在一个线程中处理 ...

  7. Android自定义模糊匹配搜索控件(二)

    在项目中遇到一个需要通过某个字的值筛选匹配带出其他信息的需求,在这里将实现思路整理出来. 源码地址:https://github.com/whieenz/SearchSelect 先看效果图 上图中的 ...

  8. 源码分析之RequestContextHolder

    先看源码 /* * Copyright 2002-2012 the original author or authors. * * Licensed under the Apache License, ...

  9. L1-057 PTA使我精神焕发

    以上是湖北经济学院同学的大作.本题就请你用汉语拼音输出这句话. 输入格式: 本题没有输入. 输出格式: 在一行中按照样例输出,以惊叹号结尾. 输入样例: 无 输出样例: PTA shi3 wo3 ji ...

  10. iOS开发第三方库一 IQKeyboardManager

    每一个iOS应用的开发者在工作中都会遇到需要用户键盘输入数据的需求,而输入框(UITextField/UITextView)的父界面可能是普通的UIView,也可能是UIScrollView,UITa ...