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. Wpf binging(一) 基础

    1.C# 代码后台绑定 分别步骤为 1. 准备数据源 2.实例化 binging对象   以及设置 该对象的 数据源 和数据源的访问路径(也就是该数据源的什么属性绑定) 3. 把前端ui控件的 Tex ...

  2. 强大的css3库

    http://www.html5tricks.com/demo/css3-animate-css/index.html 关注微信小程序

  3. 关于jetbrains系列产品2018.1.5以后的使用(crack)方法

    产品请一律官网下载:https://www.jetbrains.com/ 我这里以JetBrains GoLand 2018.2.1为例说明下非付费的使用方法(若资金允许,请点击https://www ...

  4. 常用git操作命令

     查看远程仓库 ->$ git remote -v    如果你本地有一个项目,想把他放到远程git服务器上,那就用上面的命令把项目 add 到远程服务器 ->$ git remote a ...

  5. leetcode 687.Longest Univalue Path

    寻找最长的路径,那么会在左边或者右边或者是从左到跟然后再到右方的路径的. /** * Definition for a binary tree node. * struct TreeNode { * ...

  6. DashBoard创建各种表(一)

    创建透视表 1.首先需要创建一个DashBoard,然后点击开始导航栏中的透视,创建一个透视表,透视表可以交叉式的显示报告,让我们可以更直观的看到多维数据. 2.把CategroyName和Categ ...

  7. mysql启动报错 mysql InnoDB: Error: could not open single-table tablespace file

    mysql启动不成功,报错 mysql InnoDB: Error: could not open single-table tablespace file innodb_force_recovery ...

  8. APNs

    生成推送证书: 1. 登陆开发者中心:https://developer.apple.com2. 点开 certificates.identifiers 和 proversionprofiles 里面 ...

  9. unity 常用插件 3

    一.   遮罩插件   Alpha Mask UI Sprites Quads 1.51 介绍:功能感觉很强大的一个遮罩插件,能实现LOGO高光闪动动画,圆形遮罩,透明通道图片遮罩,还真是项目必备. ...

  10. jirba库的使用和好玩的词云

    1.jieba库基本介绍 (1).jieba库概述 jieba是优秀的中文分词第三方库 - 中文文本需要通过分词获得单个的词语         - jieba是优秀的中文分词第三方库,需要额外安装 - ...