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类重新定义对象,修改程序后正常编译运行:

代码托管

上周考试错题总结

结对及互评

  • 博客中值得学习的或问题:

  • 该同学教材学习情况总结精炼,有自己的侧重点

  • 忘记写感悟了

  • 代码中值得学习的或问题:

  • 基于评分标准,我给本博客打分:10分。得分情况如下:正确使用Markdown语法(加1分);模板中的要素齐全(加1分);教材学习中的问题和解决过程, 一个问题加1分;代码调试中的问题和解决过程, 一个问题加1分;本周有效代码超过300分行的(加2分);排版精美的加一分;代码Commit Message规范的加1分;点评认真,能指出博客和代码中的问题的加1分;结对学习情况真实可信的加1分

点评过的同学博客和代码

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

  • 本周学习内容:链表、树集等泛型类,更好的将多元结构数据进行存储和下一步操作;其实这个和我们另一门课程数据结构和算法有很强的关联性。通过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版)]

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

  1. 201521123027 <java程序设计>第八周学习总结

    1.本周学习总结 1.1思维导图 2.书面作业 Q1.List中指定元素的删除(题目4-1) 1.1 实验总结 总结:判断List中是否存在指定元素,需要用到equals方法,若存在就用remove进 ...

  2. 2018-2019-2 20175227张雪莹《Java程序设计》实验三 《敏捷开发与XP实践》

    2018-2019-2 20175227张雪莹<Java程序设计> 实验三 <敏捷开发与XP实践> 实验报告封面 课程:Java程序设计 班级:1752班 姓名:张雪莹 学号: ...

  3. 2018-2019-2 20175227张雪莹《Java程序设计》 实验二《Java面向对象程序设计》

    2018-2019-2 20175227张雪莹<Java程序设计> 实验二<Java面向对象程序设计> 实验报告封面 课程:Java程序设计 班级:1752班 姓名:张雪莹 学 ...

  4. 2018-2019-2 20175227张雪莹 《Java程序设计》 实验一 Java开发环境的熟悉

    2018-2019-2 20175227张雪莹<Java程序设计> 实验一 Java开发环境的熟悉 一.实验报告封面 课程:Java程序设计 班级:1752班 姓名:张雪莹 学号:2017 ...

  5. 2018-2019-2 20175227张雪莹《Java程序设计》实验五 《网络编程与安全》

    2018-2019-2 20175227张雪莹<Java程序设计> 实验五 <网络编程与安全> 实验报告封面 课程:Java程序设计 班级:1752班 姓名:张雪莹 学号:20 ...

  6. 2018-2019-2 20175227张雪莹《Java程序设计》实验四 《Android程序设计》

    2018-2019-2 20175227张雪莹<Java程序设计> 实验四 <Android程序设计> 实验报告封面 课程:Java程序设计 班级:1752班 姓名:张雪莹 学 ...

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

    20175227张雪莹 2018-2019-2 <Java程序设计>第九周学习总结 教材学习内容总结 第十一章 JDBC数据库操作 MySQL数据库管理系统 下载安装MySQL 若下载的是 ...

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

    20175227张雪莹 2018-2019-2 <Java程序设计>第六周学习总结 教材学习内容总结 第七章 内部类与异常类 内部类:在一个类中定义另一个类:包含内部类的类为外嵌类 内部类 ...

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

    20175227张雪莹 2018-2019-2 <Java程序设计>第五周学习总结 教材学习内容总结 第六章接口与实现 接口 接口体中所有的常量访问权限一定是public和static(可 ...

随机推荐

  1. 注意&&前后两个表达式有顺序的差别

    //插入排序 public static void insertSort(int[] arr) { // 遍历所有数字 for (int i = 1; i < arr.length; i++) ...

  2. Java中返回类型方法名

    继承父类,子类含有两个分别为boy.Girl类名. 返回是需要返回方法 则返回变量名Person class Person { void eat() {} void speak() {} } clas ...

  3. Springboot中的事件Event

    事件Event作为一种常用的线程通讯工具,在Springboot中可以方便地提供开发者进行线程交互. 1.事件定义 1 import org.springframework.context.Appli ...

  4. JS判断

    /***************************************************************** 表单校验工具类 (linjq) ***************** ...

  5. python中用psutil模块,yagmail模块监控CPU、硬盘、内存使用,阈值后发送邮件

    import yagmailimport psutildef sendmail(subject,contents): #连接邮箱服务器 yag = yagmail.SMTP(user='邮箱名称@16 ...

  6. Vue中添加新的路由并访问

    1.搭建好Vue脚手架(这里使用的版本是Vue2.0) 2.在代码编辑器(这里使用的是Sublime Text)打开项目文件夹 3.在文件目录src中的component下创建一个新的vue页面,写入 ...

  7. videojs播放直播源rtmp时画面在左上角解决方案

    问题描述:https://stackoverflow.com/questions/30383135/videojs-live-rtmp-stream-player-and-video-size-iss ...

  8. i3wm菜单

    抛弃i3-dmenu-desktop吧,投入到 j4-demu-desktop 速度超快

  9. Python3.7 练习题(-) 如何使用Python生成200个优惠卷(激活码)

    # 如何使用Python生成200个优惠卷(激活码) import random import string # string.ascii_letters 26个大小写 # -9数字 # 获得激活码中 ...

  10. 执行shell脚本出错'\r': command not found

    在linux中执行脚本时出错 $'\r': command not found 错误原因是在脚本中有空行,如果脚本是在Windows下进行编辑之后上传到linux上去执行的话,就会出现这个问题. 因为 ...