20175227张雪莹 2018-2019-2 《Java程序设计》第八周学习总结

20175227张雪莹 2018-2019-2 《Java程序设计》第八周学习总结

教材学习内容总结

第十五章 泛型与集合框架

  • 泛型:主要目的是可以建立具有类型安全的集合框架,如链表、散列映射等数据结构。

    • 可以声明为: class People<E>
    • E是其中的泛型,可以是任何对象或接口,但不能是基本类型数据。
    • 使用泛型类声明对象
      • 泛型类声明和创建对象时,类名后多了一对“<>”,而且必须要用具体的类型替换“<>”中的泛型。例如:

        • Cone<Circle> coneOne;
        • coneOne =new Cone<Circle>(new Circle());
  • 链表:由若干个称作节点的对象组成的一种数据结构,每个节点含有一个数据和下一个节点的引用 。
    • LinkedList<E>泛型类:创建的对象以链表结构存储数据,习惯上称LinkedList类创建的对象为链表对象。例如:

      • LinkedList<String> mylist=new LinkedList<String>();
    • 遍历链表
      • 当用户需要遍历集合中的对象时,应当使用该集合提供的迭代器,而不是让集合本身来遍历其中的对象。
      • 链表对象可以使用iterator()方法获取一个Iterator对象,该对象就是针对当前链表的迭代器。
  • 排序与查找
    • Collections类提供的用于排序和查找的类方法如下:

      • public static sort(List<E> list) 该方法可以将list中的元素升序排列。
      • int binarySearch(List<T> list, T key,CompareTo<T> c) 使用折半法查找list是否含有和参数key相等的元素,如果key链表中某个元素相等,方法返回和key相等的元素在链表中的索引位置(链表的索引位置从0考试),否则返回-1。
  • 洗牌与旋转
    • Collections类还提供了将链表中的数据重新随机排列的类方法以及旋转链表中数据的类方法。

      • public static void shuffle(List<E> list)list中的数据按洗牌算法重新随机排列。
      • static void rotate(List<E> list, int distance) 旋转链表中的数据。(所有元素均向右移一位)
      • public static void reverse(List<E> list) 翻转list中的数据。
  • 堆栈
    • 堆栈是一种“后进先出”的数据结构,只能在一端进行输入或输出数据的操作。
    • Stack<E>泛型类创建一个堆栈对象,堆栈对象常用方法:
      • 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>对象为散列映射。
    • 该泛型类实现了泛型接口Map<K,V>,可以用接口回调技术,那么接口变量就可以调用类实现的接口方法。
  • 树集
    • TreeSet<E>泛型类:适合用于数据的排序

      • 例如:

        • TreeSet<String> mytree=new TreeSe<String>();
      • 然后使用add方法为树集添加节点,例如:
        • mytree.add("boy");
    • 树映射
      • TreeMap<K,V>类实现了Map<K,V>接口,称TreeMap<K,V>对象为树映射。
      • 树映射的结点存储关键字/值对。
  • 自动装箱与拆箱
    • 自动装箱:程序允许把一个基本数据类型添加到类似链表等数据结构中,系统会自动完成基本类型到相应对象的转换。

      • 例如:
ArrayList<Integer> list=new ArrayList<Integer>();
      for(int i=0;i<10;i++) {
         list.add(i);  //自动装箱,实际添加到list中的是new Integer(i)。
      }

该段程序中的list.add(i);等价于List.add(new Integer(i));

  • 自动拆箱:即自动装箱逆过程。

教材学习中的问题和解决过程

  • 问题1:在学习书上P446例子2代码时,不明白以下代码中泛型类List为何创建对象为LinkList
    List<String> list=new LinkedList<String>();
  • 问题1解决方案:
    在书上P445上方找到了答案:“LinkedList泛型类中的绝大部分方法都是泛型接口方法的实现。编程时,可以使用接口回调技术,即把LinkedList<E>对象的引用赋值给Collection<E>接口变量或List<E>接口变量,接口就可以调用类实现的接口方法。”
  • 问题2:不是很理解如书上例子5、6中遍历每个链表中或栈中的元素时,总是用Integer建立对象来作为输出媒介。
  • 问题2解决方法:通过查阅API得知:Integer类的作用,以及两个泛型类都是用的Integer类做的泛型,以实现元素的整型数据类型输出。
  • 问题3:不清楚书上P458上例子9如下代码的作用
for(int k=0;k<student.length;k++)
treemap.put(key[k],student[k]);
  • 问题3解决方法:通过查询API,找到了put方法作用,如下图所示:

我理解的意思是:关键字和值本无关系,通过put方法将二者联系起来

  • 问题4:书上15.7中讲解代码时说程序中的list.add(i);等价于List.add(new Integer(i));为了进一步学习,我将该代码改为注释中提示的形式
  • 问题4解决方法:程序正常编译、运行。

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

  • 问题1:编译例子6时出现以下问题,如图:

  • 问题1解决方案:在对stack的第一次压栈时,调用push方法括号里是对Integer类重新定义对象,修改程序后正常编译运行:

代码托管

上周考试错题总结

结对及互评

评分标准

  1. 正确使用Markdown语法(加1分):

    • 不使用Markdown不加分
    • 有语法错误的不加分(链接打不开,表格不对,列表不正确...)
    • 排版混乱的不加分
  2. 模板中的要素齐全(加1分)
    • 缺少“教材学习中的问题和解决过程”的不加分
    • 缺少“代码调试中的问题和解决过程”的不加分
    • 代码托管不能打开的不加分
    • 缺少“结对及互评”的不能打开的不加分
    • 缺少“上周考试错题总结”的不能加分
    • 缺少“进度条”的不能加分
    • 缺少“参考资料”的不能加分
  3. 教材学习中的问题和解决过程, 一个问题加1分
  4. 代码调试中的问题和解决过程, 一个问题加1分
  5. 本周有效代码超过300分行的(加2分)
    • 一周提交次数少于20次的不加分
  6. 其他加分:
    • 周五前发博客的加1分
    • 感想,体会不假大空的加1分
    • 排版精美的加一分
    • 进度条中记录学习时间与改进情况的加1分
    • 有动手写新代码的加1分
    • 课后选择题有验证的加1分
    • 代码Commit Message规范的加1分
    • 错题学习深入的加1分
    • 点评认真,能指出博客和代码中的问题的加1分
    • 结对学习情况真实可信的加1分
  7. 扣分:
    • 有抄袭的扣至0分
    • 代码作弊的扣至0分
    • 迟交作业的扣至0分

点评模板:

  • 博客中值得学习的或问题:
  • 该同学把老师上课讲过的重点列了出来,体现了自己重点学习的过程。
  • 感觉感悟那一块的内容可以在具体一点,比如说具体遇到什么问题,如何解决,从中收获了什么,或是教材学习中增长的关于调试代码的经验。
  • 代码中值得学习的或问题:
  • 基于评分标准,我给本博客打分:XX分。得分情况如下:xxx

点评过的同学博客和代码

  • 本周结对学习情况

    • 结对同学学号20175212
  • 结对照片
    • 结对学习内容

      • XXXX
      • XXXX
      • ...
  • 上周博客互评情况

其他(感悟、思考等,可选)

  • 本周学习内容:链表、树集等泛型类,更好的将多元结构数据进行存储和下一步操作;其实这个和我们另一门课程数据结构和算法有很强的关联性。通过java语言中链表、树集与C语言实现方式的比较,更好的看出了Java语言的优势:排序、删除、加入等操作都无需自己编程,直接调用方法即可。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
第一周 11/11 1/1
第二周 262/273 1/2
第三周 642/915 1/3
第四周 384/1299 2/5
第五周 661/1960 1/6
第六周 1031/2991 2/8
第七周 123/3114 2/10
第八周 941/4055 2/12

参考资料

  • [Java2实用教程(第5版)]

原文地址:https://www.cnblogs.com/zxy20175227/p/10742542.html

时间: 2024-07-30 06:24:48

20175227张雪莹 2018-2019-2 《Java程序设计》第八周学习总结的相关文章

# 20175227张雪莹 2018-2019-2 《Java程序设计》第四周学习总结

20175227张雪莹 2018-2019-2 <Java程序设计>第四周学习总结 教材学习内容总结 一.子类和父类. 1.子类只继承父类中的protected和public访问权限的成员变量(方法)作为子类的成员变量(方法). 2.若A->B->C->D, 在Other类中用D类中protected的成员变量和方法创建对象object,则两个类需处于同一个包中: 在Other类中用D类继承A类中protected的成员变量和方法创建对象object,则A类和Other类需处

20175227张雪莹 2018-2019-2 《Java程序设计》第五周学习总结

20175227张雪莹 2018-2019-2 <Java程序设计>第五周学习总结 教材学习内容总结 第六章接口与实现 接口 接口体中所有的常量访问权限一定是public和static(可以省略public.static.final) 接口体中所有的抽象方法访问权限都是public(可以省略public abstract) 用类实现方法时,方法的访问权限一定要明显用public修饰,且该类体中可直接使用接口中关键字 抽象类可以重写接口中方法,也可以直接拥有接口中方法 接口回调 接口变量调用被类

20175227张雪莹 2018-2019-2 《Java程序设计》第十一周学习总结

20175227张雪莹 2018-2019-2 <Java程序设计>第十一周学习总结 教材学习内容总结 第十三章 Java网络编程 URL类 一个URL对象通常包含最基本的三部分信息:协议.地址.资源. URL对象调用 InputStream openStream() 方法可以返回一个输入流,该输入流指向URL对象所包含的资源.通过该输入流可以将服务器上的资源读入到客户端. InetAdress类 获取地址 获取Internet上主机的地址 可以使用InetAddress类的静态方法getBy

2019-2020-1 20175227张雪莹《信息安全系统设计基础》 实验四 《外设驱动程序设计》

2019-2020-1 20175227张雪莹<信息安全系统设计基础> 实验四 <外设驱动程序设计> 实验报告封面 课程:信息安全系统设计基础 班级:1752班 姓名:张雪莹 学号:20175227 指导教师:娄嘉鹏 实验日期:2019年11月25日 实验时间:--- 实验序号:四 实验题目:外设驱动程序设计 实验步骤 任务一 要求: 学习资源中全课中的"hqyj.嵌入式Linux应用程序开发标准教程.pdf"中的第十一章 提交康奈尔笔记的照片(可以多张) 任务

20175204 张湲祯 2018-2019-2《Java程序设计》第二周学习总结

20175204 张湲祯 2018-2019-2<Java程序设计>第二周学习总结 教材学习内容总结 -第二章基本数据类型与数组要点: -标识符与关键字:标识符的第一个字符不能是数字字符: 标识符不能是关键字: 标识符不能是true.false和null: 标识符是区分大小写的. -基本数据类型:1.共8种基本数据类型:逻辑类型:Boolean 整数类型:byte,short,int,long 字符类型:char 浮点类型:float,double 2.逻辑类型:常量:true,false:变

20165218 2017-2018-2 《Java程序设计》第一周学习总结

20165218 2017-2018-2 <Java程序设计>第一周学习总结 教材学习内容总结 第一章.Java入门 1. Java特点 Java具有简单.面向对象.平台无关.多线程.动态等特点,其中平台无关是使它风靡全球的最重要的特点.平台无关指同样的Java指令在不同的平台上都可以运行,不受平台本身的机器码的影响.这是由于Java可以在计算机的操作系统之上在提供一个Java运行环境. graph LR A[Java语言]-->B[字节码] B-->C[机器指令] 2. 平台=O

20155336 2016-2017-2《JAVA程序设计》第二周学习总结

20155336 2016-2017-2 <JAVA 程序设计>第二周学习总结 教材学习内容 1: GIT版本检测 2: JAVA中基本类型 整数 字节 浮点数 字符 布尔(▲) 通过API可以得知各个类型可存储的数值范围 public class Range {public static void main(String[] args){ //byte.short.int.long的范围 System.out.printf("%d~%d%n", Byte.MIN_VALU

20145201 《Java程序设计》第一周学习总结

# 20145201 <Java程序设计>第一周学习总结 ## 教材学习内容总结 万事开头难,终于开始学习了Java.寒假的时候看到老师的要求确实有点慌,但是这周翻开书,从书本知识第一行学起,发现并不是自己想想中那么难,只要一步一个脚印,每周有自己的计划,并按照计划按部就班的完成,最后一定会拥有自己的小成果的. 1.1Java不只是语言 Java经过多年的版本更新后,最新的版本是Java SE8. 在java发展的过程中,它的应用领域越来越广,根据不同级别的应用开发区分了不同的应用版本,最终j

20145326蔡馨熠《Java程序设计》第一周学习总结

20145326蔡馨熠 <Java程序设计>第一周学习总结 教材学习内容总结 转眼间新的一学期终于开始了!为什么我这么期待呢?因为这学期可以上娄嘉鹏老师的java程序设计课,我不是什么电脑天才,之前c语言学得也不是特别好.可我就是对hdl和java特别感兴趣(之前在我的问卷调查报告里面提到过),并且寒假的时候在家里也预习了一部分java知识.第一周要求学习两个章节并作心得体会,虽然我早已看过前两章的知识,不过为了进一步巩固,我还是用了星期六一天的时间把第一章和第二章的知识从头到尾仔仔细细的看了