内容
这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/
这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p/11867214.html
作业学习目标

(1) 掌握Vetor、Stack、Hashtable三个类的用途及常用API;

(2) 掌握ArrayList、LinkList两个类的用途及常用API;

(3) 了解java集合框架体系组成;

(4) 掌握Java GUI中框架创建及属性设置中常用类的API;

(5) 了解Java GUI中2D图形绘制常用类的API;

第一部分:九、十章理论知识总结

一、集合

1.一般将数据结构分为两大类:线性数据结构和非线性数据结构。

1)线性数据结构:线性表、栈、队列、串、数组和文件。

2)非线性数据结构:树和图。

2.链表

在java语言中,,所有列表实际上都是双向链接的——每一个还存放着指向前驱节点的引用。链表是一个有序集合。

3.数组列表

List接口用于描述有序集合,且有两种中访问元素的协议,(a)用迭代器(b)用get和set方法随机地访问每个元素。第二章方法不适用于链表却适用于数组,集合类提供了熟悉的ArrayList类,这个类也实现了List接口。

ArrayList封装了一个每个列表称为桶动态再分配的对象数组。

4.树集

树集是一个有序集合。可以以任意顺序将元素插入到集合中。自对集合进行遍历时,每个值将自动地按排序后的顺序呈现。创建一个树集的方法为:TreeSet()

5.队列与双端队列

有两个端头的队列称为双端队列。可在头部和尾部同时添加或者删除元素。不支持在队列中间插入。

6.栈:栈(Stack)也是一种特殊的线性表,是一种后进先出(LIFO)的结构。栈是限定仅在表尾进行插入和删除运算的线性表,表尾称为栈顶(top),表头称为栈底(bottom)。

7.优先级队列

可按任意顺序插入的元素,但按照排序的顺序进行检索。优先级队列用了堆(可以自我调整的二叉树)。一个优先级对象可以保存实现了Comparable接口的类对象,也可以保存在构造器中提供的Comparator对象。

8.散列表:散列表又称为哈希表。散列表算法的基本思想是:以结点的关键字为自变量,通过一定的函数关系(散列函数)计算出对应的函数值,以这个值作为该结点存储在散列表中的地址。当散列表中的元素存放太满,就必须进行再散列,将产生一个新的散列表,所有元素存放到新的散列表中,原先的散列表将被删除。

9.JAVA的集合框架:JAVA的集合框架实现对各种数据结构的封装,以降低对数据管理与处理的难度所谓框架就是一个类库的集合,框架中包含很多超类,编程者创建这些超类的子类可较方便的设计设计程序所需的类。例如:Swing类包集合(Collection或称为容器)是一种包含多个元素并提供对所包含元素操作方法的类,其包含的元素可以由同一类型的对象组成,也可以由不同类型的对象组成。

10.集合类的作用:

–Java的集合类提供了一些基本数据结构的支持。
–例如Vector、Hashtable、Stack等。

11.集合类的使用:

–Java的集合类包含在java.util包中。
–importjava.util.*;

12.集合类的特点:

1)只容纳对象。数组可以容纳基本数据类型数据和对象。

如果集合类中想使用基本数据类型,又想利用集合类的灵活性,可以把基本数据类型数据封装成该数据类型的包装器对象,然后放入集合中处理。

2) 集合类容纳的对象都是Object类的实例,一旦把一个对象置入集合类中,它的类信息将丢失,这样设计的目的是为了集合类的通用性。

因为Object类是所有类的祖先,所以可以在这些集合中存放任何类的对象而不受限制,但切记在使用集合成员之前必须对它重新造型。

13.新旧集合类:在JDK1.0和JDK1.1中提供了Vector(矢量),Hashtable(哈希表),Stack(堆栈),Properties(属性集)等集合类,

尽管这些类非常有用,但却彼此独立,缺少一个统一集中的机制。

1)Vector类:Vector类类似长度可变的数组。 Vector中只能存放对象。 Vector的元素通过下标进行访问。

2)Stack类:Stack类是Vector的子类。 Stack类描述堆栈数据结构,即LIFO。

3)Hashtable类:Hashtable通过键来查找元素。Hashtable用散列码(hashcode)来确定键。

所有对象都有一个散列码,可以通过Object类的hashCode()方法获得。

14.在JDK1.2中,JAVA设计了一个统一的类集,并对上述类进行了改写,使其统一纳入JAVA的集合框架。

集合框架中的基本接口:

1)Collection:集合层次中的根接口,JDK未提供这个接口的直接实现类。

2)Set:不能包含重复的元素。对象可能不是按存放的次序存放,也就是说不能像数组一样按索引的方式进行访问,SortedSet是一个按照升序排列元素的Set。

3)List:是一个有序的集合,可以包含重复的元素。提供了按索引访问的方式。

4)Map:包含了key-value对。Map不能包含重复的key

5)SortedMap是一个按照升序排列key的Map。

二、图形程序设计

1.Swing概述

swing并没有完全取代AWT,而是基于AWT架构之上。swing仅仅提供了功能更加强大的用户界面组件。,尤其是在用swing编写程序是,还是需要使用基本的AWT处理时间。从现在开始,swing是指被绘制的用户界面类,而awt是指像事件处理这样抽象窗口工具箱的底层机制。
虽然在用户屏幕上显示基于swing的用户界面组件比现实awt基于对等体的界面元素要慢一些,但在计算机快速运行下这没什么。以下原因让人们选择swing:
1)swing拥有一个丰富、便捷的用户界面元素集合。

2)swing对平台的依赖很小,意味着他有很少的关于平台的bug。

3)给予用户一致的感觉。

对于第三点存在一些潜在问题,若在所有平台上用户界面元素看起来都一样,他们可能与平台的本地控件不一样,而这些平台的用户对此可能并不熟悉。swing采取一种巧妙的方式解决。指定观感(look and feel)。

2.创建框架
1)在Java中,顶层窗口(就是没有包含在任何其他窗口中的窗口)被称为框架(frame)。
2)在AWT库中有一个称为Frame的类,用于描述顶层窗口。这个类的Swing版本名为JFrame,它扩展于Frame类。
3)JFrame是极少数几个不绘制在画布上的Swing组件之一。因此,它的修饰部件(按钮、标题栏、图标等)由用户的窗口系统绘制,而不是由Swing绘制。
注意:绝大多数Swing组件类都以“J”开头,例如,JButton,JFrame等。在Java中有Button和Frame这样的类,但它们属于AWT组件。如果偶尔忘记了“J”程序仍然可以编译和运行,但是将Swing和AWT组件混合在一起使用将会导致视觉和行为的不一致。
3.Swing用户界面库是非基于对等体的GUI工具箱。Swing具有更丰富并且更方便的用户界面元素集合。Swing对底层平台的依赖很少,因此与平台相关的bug很少。Swing会带来交叉平台上的统一视觉体验。Swing类库被放在javax.swing包里。

4.大部分AWT组件都有其Swing的等价组件。Swing组件的名字一般是在AWT组件名前面添加一个字母“J”,如:JButton,JFrame,JPanel等。

5.通常把由Component类的子类或间接子类创建的对象称为一个组件

6.组件类的常用API

java.awt.Component1.0

–booleanisVisible()检查组件是否可见

–voidsetVisible(booleanb)设置组件可见

–voidsetSize(intwidth,intheight)把组件缩放到指定宽度和高度

–voidsetBounds(intx,inty,int width,intheight)移动并缩放组件

–DimensiongetSize()得到组件的大小

–voidsetSize(Dimensiond) 把组件缩放到指定的大小

–voidsetLocation(intx,inty)

7.容器是Java中能容纳和排列组件的组件。常用的容器是框架(Frame,JFrame)。

Container类提供了一个方法add(),用来在容器类组件对象中添加其他组件。

容器本身也是一个组件,可以把一个容器添加到另一个容器里,实现容器嵌套。

框架定位:常用Component类的setLocation和setBounds方法。常用属性:Title:框架标题;IconImage:框架图标。

确定框架大小:通过调用Toolkit类的方法来得到屏幕尺寸信息。

Jframe的结构:它由根面板、层级面板、玻璃面板和内容面板(contentpane)四层面板构成。

Swing程序员最关心的是内容面板,也称为内容窗格。

在AWT中可调用add()方法把组件直接添加到AWTFrame中,在Swing中组件则添加到内容窗格里。其中内容窗格是用来添加组件的,添加代码如下:ContainercontentPane=getContentPane();Componentc=…;contentPane.add(c);用户也可以自行创建一个组件类,并在组件上进行绘制,此时需要重载paintComponent()。用户的自建组件也可添加到内容窗格里。

paintComponent(Graphicsg)定义在JComponent类中,该方法在窗口需要重新绘图时(如扩大窗口或极小化窗口),被系统自动调用.

paintComponent()方法被调用时,系统就自动产生一个Graphics类型的参数,传递给paintComponent方法中的参数g。

第二部分:实验部分

实验1: 导入第9章示例程序,测试程序并进行代码注释。

测试程序1:

1) 使用JDK命令运行编辑、运行以下三个示例程序,结合运行结果理解程序;

2)掌握Vetor、Stack、Hashtable三个类的用途及常用API。

示例程序1代码如下:

  1. import java.util.Vector;
  2.  
  3. class Cat {
  4.  
  5. private int catNumber;
  6.  
  7. Cat(int i) {
  8.  
  9. catNumber = i;
  10.  
  11. }
  12.  
  13. void print() {
  14.  
  15. System.out.println("Cat #" + catNumber);
  16.  
  17. }
  18.  
  19. }
  20.  
  21. public class Cats{
  22.  
  23. public static void main(String[] args){
  24.  
  25. Vector<Cat> cats= new Vector<Cat>();
  26.  
  27. for(int i=; i<; i++)
  28.  
  29. cats.addElement(new Cat(i));
  30.  
  31. for(int i=; i<cats.size(); i++)
  32.  
  33. (cats.elementAt(i)).print();
  34.  
  35. }
  36.  
  37. }

运行结果:

示例程序2代码如下:

  1. import java.util.*;
  2.  
  3. public class Stacks
  4.  
  5. {
  6.  
  7. static String[] months={"金","银","铜","铁"};
  8.  
  9. public static void main(String[] args){
  10.  
  11. Stack<String> stk = new Stack<String> ();
  12.  
  13. for(int i=; i<months.length; i++)
  14.  
  15. stk.push(months[i]);
  16.  
  17. System.out.println(stk);
  18.  
  19. System.out.println("element 2=" + stk.elementAt());
  20.  
  21. while(!stk.empty())
  22.  
  23. System.out.println(stk.pop());
  24.  
  25. }
  26.  
  27. }

运行结果:

示例程序3代码如下:

  1. import java.util.*;
  2.  
  3. class Counter {
  4.  
  5. int i = ;
  6.  
  7. public String toString() {
  8.  
  9. return Integer.toString(i);
  10.  
  11. }
  12.  
  13. }
  14.  
  15. public class Statistics {
  16.  
  17. public static void main(String[] args) {
  18.  
  19. Hashtable ht = new Hashtable();
  20.  
  21. for (int i = ; i < ; i++) {
  22.  
  23. Integer r = new Integer((int) (Math.random() * ));
  24.  
  25. if(ht.containsKey(r))
  26.  
  27. ((Counter)ht.get(r)).i++;
  28.  
  29. else
  30.  
  31. ht.put(r, new Counter());
  32.  
  33. }
  34.  
  35. System.out.println(ht);
  36.  
  37. }
  38.  
  39. }

运行结果:

ListDemo:

  1. import java.util.*;
  2.  
  3. public class LinkedListDemo {
  4.  
  5. public static void main(String[] argv) {
  6.  
  7. LinkedList l = new LinkedList();
  8.  
  9. l.add(new Object());
  10.  
  11. l.add("Hello");
  12.  
  13. l.add("zhangsan");
  14.  
  15. ListIterator li = l.listIterator();
  16.  
  17. while (li.hasNext())
  18.  
  19. System.out.println(li.next());
  20.  
  21. if (l.indexOf("Hello") < )
  22.  
  23. System.err.println("Lookup does not work");
  24.  
  25. else
  26.  
  27. System.err.println("Lookup works");
  28.  
  29. }
  30.  
  31. }

运行结果:

在Elipse环境下编辑运行调试教材360页程序9-1,结合程序运行结果理解程序;

掌握ArrayList、LinkList两个类的用途及常用API。

程序代码:

  1. package linkedList;
  2.  
  3. import java.util.*;
  4.  
  5. /**
  6. * This program demonstrates operations on linked lists.//此程序演示对链接列表的操作
  7. * @version 1.12 2018-04-10
  8. * @author Cay Horstmann
  9. */
  10. public class LinkedListTest
  11. {
  12. public static void main(String[] args)
  13. {
  14. var a = new LinkedList<String>();//创建一个链表对象
  15. a.add("Amy");
  16. a.add("Carl");
  17. a.add("Erica");
  18.  
  19. var b = new LinkedList<String>();
  20. b.add("Bob");
  21. b.add("Doug");
  22. b.add("Frances");
  23. b.add("Gloria");
  24. //把b中的单词合并成a
  25.  
  26. // merge the words from b into a
  27.  
  28. ListIterator<String> aIter = a.listIterator();
  29. Iterator<String> bIter = b.iterator();
  30.  
  31. while (bIter.hasNext())
  32. {
  33. if (aIter.hasNext()) aIter.next();
  34. aIter.add(bIter.next());
  35. }
  36.  
  37. System.out.println(a);
  38.  
  39. // remove every second word from b
  40. //b中每间隔一个元素删除
  41.  
  42. bIter = b.iterator();
  43. while (bIter.hasNext())
  44. {
  45. bIter.next(); // skip one element跳过一个元素
  46. if (bIter.hasNext())
  47. {
  48. bIter.next(); // skip next element
  49. bIter.remove(); // remove that element
  50. }
  51. }
  52.  
  53. System.out.println(b);
  54.  
  55. // bulk operation: remove all words in b from a
  56. //批量操作:从a中删除b中的所有单词
  57.  
  58. a.removeAll(b);
  59.  
  60. System.out.println(a);
  61. }
  62. }

运行结果:

201777010217-金云馨《面向对象程序设计(Java)》第十二周学习总结的更多相关文章

  1. 20155322 2016-2017-2 《Java面向对象程序设计》第十二周课堂练习之Arrays和String单元测试

    20155322 2016-2017-2 <Java面向对象程序设计>第十二周课堂练习之Arrays和String单元测试 练习目地 在IDEA中以TDD的方式对String类和Array ...

  2. 201571030332 扎西平措 《面向对象程序设计Java》第八周学习总结

    <面向对象程序设计Java>第八周学习总结   项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https: ...

  3. 201521123072《java程序设计》第十二周学习总结

    201521123072<java程序设计>第十二周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student对象 ...

  4. 201521123038 《Java程序设计》 第十二周学习总结

    201521123038 <Java程序设计> 第十二周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student ...

  5. 201521123061 《Java程序设计》第十二周学习总结

    201521123061 <Java程序设计>第十二周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student对 ...

  6. 201521123122 《java程序设计》第十二周学习总结

    ## 201521123122 <java程序设计>第十二周实验总结 ## 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将St ...

  7. 201771010118马昕璐《面向对象程序设计java》第八周学习总结

    第一部分:理论知识学习部分 1.接口 在Java程序设计语言中,接口不是类,而是对类的一组需求描述,由常量和一组抽象方法组成.Java为了克服单继承的缺点,Java使用了接口,一个类可以实现一个或多个 ...

  8. 201771010134杨其菊《面向对象程序设计java》第八周学习总结

    第八周学习总结 第一部分:理论知识 一.接口.lambda和内部类:  Comparator与comparable接口: 1.comparable接口的方法是compareTo,只有一个参数:comp ...

  9. 201771010134杨其菊《面向对象程序设计java》第七周学习总结

    第七周学习总结 第一部分:理论知识 1.继承是面向对象程序设计(Object Oriented Programming-OOP)中软件重用的关键技术.继承机制使用已经定义的类作为基础建立新的类定义,新 ...

  10. 201521123005 《Java程序设计》 第十二周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student对象(属性:int id, String name,int age,doubl ...

随机推荐

  1. Python 栈(stack)

    Python 栈(stack) 栈(stack)又名堆栈,它是一种运算受限的线性表 栈只能在一端进行插入和删除操作,它按照先进后出(FILO)的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶 ...

  2. Sencha Modern

    Sencha Modern  前言         经过一个月捣鼓,基于sencha公司最新框架版本 ExtJS7.0 modern 的示例代码可以和大家见面了.示例中对系统主题.公共(组件,方法)封 ...

  3. Python 下载图片的三种方法

    import os os.makedirs('./image/', exist_ok=True) IMAGE_URL = "http://image.nationalgeographic.c ...

  4. Kubernetes 之 Nameserver limits were exceeded

    1.问题描述 最近查看kubernetes 的events,发现了有两个节点经常出现下面的信息: DNSConfigForming Nameserver limits were exceeded, s ...

  5. WPF 通过EventTrigger修改鼠标样式

    难倒是不难. 除去eventtrigger之外还有别的触发器可以实现. 这个主要是难在对xaml的数据理解上. 代码实现 <Button Content=" > <Butt ...

  6. go中interface空指针不为nil判断方法

    interface空指针不为nil 当把一个空指针对象赋值给一个interface后,再判断!= nil就不再成立了 代码如下 package main import "fmt" ...

  7. CentOS 配置阿里云 yum 源

    CentOS 1.备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 2.下载新的Cent ...

  8. SQL 除去数字中多于的0

    /* 除掉多于的0 */ CREATE FUNCTION [dbo].[fn_ClearZero] ( ) ) ) AS BEGIN ); IF (@inValue = '') SET @return ...

  9. Flask--g属性

    目录 Flask之g属性 使用 session,flash,g的区别 Flask之g属性 专门用来存储用户信息的g对象,g的全称的为global g对象在一次请求中的所有的代码的地方,都是可以使用的 ...

  10. 开发技术--Python核心知识A

    开发|Python核心知识A A篇,主要介绍Python基础中列表,元祖,字典,集合,字符串,I/O,条件与循环,异常处理的底层知识与使用的注意事项. 希望大家对于Python会有新的收获,本篇不同于 ...