学号 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)遍历链表

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

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

上周考试错题总结

  • 错题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)

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 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. Dynamics 365-N:N Relationship的记录处理

    在Dynamics CRM中,两个Entity之间是可以有N:N Relationship的,但是CRM实现N:N,是通过系统自创建一个中间表来实现的.这个中间表,如果环境是OnPremise,可以根 ...

  2. 【原】无脑操作:EasyUI Tree实现左键只选择叶子节点、右键浮动菜单实现增删改

    Easyui中的Tree组件使用频率颇高,经常遇到的需求如下: 1.在树形结构上,只有叶子节点才能被选中,其他节点不能被选中: 2.在叶子节点上右键出现浮动菜单实现新增.删除.修改操作: 3.在非叶子 ...

  3. git stash解决代码merge出错

    最近在使用git提交代码时,遇到一个问题,就是我修改了几个文件的代码,然后又想把自己代码库里面的代码更新到最新版本,然后不出所料,代码冲突了!作为一个喜欢解决问题的程序员,怎么会被这样的问题所困住呢? ...

  4. Web Storage:浏览器端数据储存机制

    目录 概述 操作方法 存入/读取数据 清除数据 遍历操作 storage事件 参考链接 概述 这个API的作用是,使得网页可以在浏览器端储存数据.它分成两类:sessionStorage和localS ...

  5. 我为什么要花大力气从头研发智表ZCELL(一个仿EXCEL的前端插件)

    为什么呢,一个前端用的,类似EXCEL的操作的JS 插件,从头研发真的有必要吗?可能你会觉得没有必要吧,其实我自己也问过自己好多遍.因为业界有更加强大的spreadjs,也有比较轻型的JEXCEL,自 ...

  6. sql优化个人总结(全)

    sql优化总结--博客 第一次自己写博客,以后要坚持每掌握一个技能点,就要写一篇博客出来,做一个不满足于一个只会写if...else的程序员. 最近三个月入职了一家新的公司,做的是CRM系统,将公司多 ...

  7. 最新版jQuery v3.3.1的BUG以及解决办法(什么问题不重要,怎么解决问题才重要)

    发现问题 最新版的 FineUIPro v5.2.0 中,我们将内置的 jQuery v1.12.4 升级到 jQuery v3.3.1 ,可以看升级记录: +升级到jQuery v3.3.1.    ...

  8. JS 转换HTML转义符

    JS转换HTML转义符   //去掉html标签 1 2 3 function removeHtmlTab(tab) {  return tab.replace(/<[^<>]+?& ...

  9. 关于ES6的module的循环加载

    今天写js时,碰到了一个模块循环加载的错误,下面时例子: // testa.mjs import testb from './testb.mjs'; const {b} = testb; const ...

  10. C语言之将弧度值转换为角度值

    #include<stdio.h> #include<stdlib.h> #define pi 3.141592 void conver_radian(float radian ...