博文正文开头格式:(2分)

项目

内容

这个作业属于哪个课程

https://www.cnblogs.com/nwnu-daizh/

这个作业的要求在哪里

https://www.cnblogs.com/lily-2018/p/11441372.html

作业学习目标

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

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

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

(4) 应用结对编程(Pair programming),体验程序开发中的两人合作。

随笔博文正文内容包括:

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

1.数据结构:分为a.线性数据结构,如线性表、栈、队列、串、数组和文件。

b.非线性数据结构,如树和图。

1)所有数据元素在同一个线性表中必须是相同的数据类型。

  线性表按其存储结构可分为顺序表和链表。

2)栈:也是一种特殊的线性表,是一种后进先出(LIFO)的结构。

  栈是限定仅在表尾进行插入和删除运算的线性表,表尾称为栈顶,表头称为栈底。

3)队列:限定所有的插入只能在表的一端进行,而所有的删除都在表的另一端进行的线性表。是一种先进先出(FIFO)的结构。

  表中允许插入的一端称为队尾,允许删除的一端称为队头。

2.集合:(容器)是一种包含多个元素并提供对所包含元素操作方法的类,其包含的元素可以由同一类型的对象组成,也可以由不同类型的对象组成。

  1)集合框架:JAVA集合类库的统一架构。

  2)集合类的作用(包含在java.util包中):提供一些基本数据结构的支持,如Vector、Hashtable、Stack等。

  3)集合类的特点:a.只容纳对象;

b.集合类容纳的对象都是Object类的实例(一旦把一个对象置入集合类中,它的类信息将丢失)

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

  5)Stack类(Vector的子类):它描述堆栈数据结构。(所有对象都有一个散列码,可以通过Object类的hashCode方法获得。)

3.集合框架中的基本接口:a.Collection(构造类集框架的基础):集合层次中的根接口,JDK未提供这个接口的直接实现类。

b.Set:不能包含重复的元素,即元素必须唯一。对象可能不是按存放的次序存放。(实 现 Set 接口的类有HashSet,TreeSet)

c.List:有序的集合,可以包含重复的元素。提供了按索引访问的方式。实现它的类有ArrayList和LinkedLis(如ArrayList:能够自动增长容量的数组)

d.Map:Map接口映射唯一关键字到值。包含了key-value对。Map不能包含重复的key。SortedMap是一个按照升序排列key的Map。

3.用户界面:用户与计算机系统(各种程序)交互的接口

  图形用户界面:以图形方式呈现的用户界面

4.AWT:Java 的抽象窗口工具箱( Abstract WindowToolkit, AWT)包含在java.awt包中,它提供了许多用来设计GUI的组件类和容器类。

  AWT库处理用户界面元素的方法:把图形元素的创建和行为委托给本地GUI工具箱进行处理。

5.Swing:Swing用户界面库是非基于对等体的GUI工具箱。

  Swing具有更丰富并且更方便的用户界面元素集合。

  Swing对底层平台的依赖很少,因此与平台相关的bug很少。

  Swing类库被放在javax.swing包里。

大部分AWT组件都有其Swing的等价组件。Swing组件的名字一般是在AWT组件名前面添加一个字母“J”。

创建框架

1.组件:构成图形用户界面的元素,拿来即用用图形表示(能在屏幕上显示,能和用户进行交互)

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

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

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

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

4.在组件中显示信息

在AWT中可调用add()方法把组件直接添加到AWTFrame中,在Swing中组件则添加到内容窗格里。

其中内容窗格是用来添加组件的,添加代码如下:

  Container contentPane = getContentPane();

用户也可以自行创建一个组件类,并在组件上进行绘制,此时需要重载paintComponent()。

用户的自建组件也可添加到内容窗格里。

public void setEnabled(boolean b):设置组件是否可被激活。
  当参数b取值true时,组件可以被激活。
  当参数b取值false 时,组件不可激活。
  默认情况下,组件是可以被激活的。
public void setVisible(boolean b):设置组件在该容器中的可见性。
  当b取值true时,组件在容器中可见。
  当b取值false时,组件在容器中不可见。
  除了Window型组件外,其它类型组件默认是可见的。

第二部分:实验部分

实验1:测试程序1(6分)

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

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

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

Vetor

实验程序如下:

 1 import java.util.Vector;  //实现自动增长的对象数组
2
3 class Cat {
4 private int catNumber;
5 Cat(int i) {
6 catNumber = i;
7 }
8 void print() {
9 System.out.println("Cat #" + catNumber);
10 }
11 }
12 public class Cats{
13 public static void main(String[] args){
14 Vector<Cat> cats= new Vector<Cat>();
15 for(int i=0; i<7; i++)
16 cats.addElement(new Cat(i));
17 for(int i=0; i<cats.size(); i++)
18 (cats.elementAt(i)).print(); //进行强制类型转化
19 }
20 }
运行结果如下:

Stack:

实验程序如下:

 1import java.util.*;
2 public class Stacks //栈(先进后出)
3 {
4 static String[] months={"金","银","铜","铁"};
5 public static void main(String[] args){
6 Stack<String> stk = new Stack<String> ();
7 for(int i=0; i<months.length; i++)
8 stk.push(months[i]); //进栈
9 System.out.println(stk);
10 System.out.println("element 2=" + stk.elementAt(2));
11 while(!stk.empty())
12 System.out.println(stk.pop()); //输出出栈元素
13 }
14 }
实验结果如下:

Hashtable:

实验程序如下:

import java.util.*;
2 class Counter {
3 int i = 1; //不加权限修饰符:friendly型
4 public String toString() { //把其他类型的数据转为字符串类型的数据
5 return Integer.toString(i);
6 }
7 }
8
9 public class Statistics {
10 public static void main(String[] args) {
11 Hashtable ht = new Hashtable();
12 for (int i = 0; i < 10000; i++) {
13 Integer r = new Integer((int) (Math.random() * 20)); //生成0到20(不包括20)的整型随机数
14 if(ht.containsKey(r)) //判断r是否是哈希表中一个元素的键值
15 ((Counter)ht.get(r)).i++; //通过get方法获得其值
16 else
17 ht.put(r, new Counter()); //ht不存在
18 }
19 System.out.println(ht);
20 }
21 }
实验结果如下:

实验1:测试程序2(6分)

※使用JDK命令编辑运行ArrayListDemo和LinkedListDemo两个程序,结合程序运行结果理解程序;

ArrayListDemo:

实验程序如下:

 1 import java.util.*;
2
3 public class ArrayListDemo //ArrayList使用了数组的实现
4 {
5 public static void main(String[] argv) {
6 ArrayList al = new ArrayList();
7 // Add lots of elements to the ArrayList...
8 al.add(new Integer(11));
9 al.add(new Integer(12));
10 al.add(new Integer(13));
11 al.add(new String("hello")); //下标从0开始,添加4个元素
12 // First print them out using a for loop.
13 System.out.println("Retrieving by index:");
14 for (int i = 0; i < al.size(); i++) {
15 System.out.println("Element " + i + " = " + al.get(i));
16 }
17 }
18 }
实验结果如下:

LinkedListDemo:

实验程序如下:

 1 import java.util.*;
2
3 public class LinkedListDemo
4 {
5 public static void main(String[] argv)
6 {
7 //创建一个链表
8 LinkedList l = new LinkedList();
9 l.add(new Object());
10 l.add("Hello");
11 l.add("zhangsan");
12 ListIterator li = l.listIterator(0);
13 while (li.hasNext())
14 System.out.println(li.next());
15 if (l.indexOf("Hello") < 0)
16 System.err.println("Lookup does not work");
17 else
18 System.err.println("Lookup works");
19 }
20 }
实验结果如下:

实验1:测试程序3(6分)

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

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

实验程序如下:

1 import java.util.*;
2
3 /**
4 * This program demonstrates operations on linked lists.
5 * @version 1.11 2012-01-26
6 * @author Cay Horstmann
7 */
8 public class LinkedListTest
9 {
10 public static void main(String[] args)
11 {
12 //创建a和b两个链表
13 List<String> a = new LinkedList<>();//泛型
14 a.add("Amy");
15 a.add("Carl");
16 a.add("Erica");
17
18 List<String> b = new LinkedList<>();//泛型
19 b.add("Bob");
20 b.add("Doug");
21 b.add("Frances");
22 b.add("Gloria");
23
24 //合并a和b中的词
25
26 ListIterator<String> aIter = a.listIterator();
27 Iterator<String> bIter = b.iterator();
28
29 while (bIter.hasNext())
30 {
31 if (aIter.hasNext()) aIter.next();
32 aIter.add(bIter.next());
33 }
34
35 System.out.println(a);
36
37 //从第二个链表中每隔一个元素删除一个元素
38
39 bIter = b.iterator();
40 while (bIter.hasNext())
41 {
42 bIter.next(); // skip one element
43 if (bIter.hasNext())
44 {
45 bIter.next(); // skip next element
46 bIter.remove(); // remove that element
47 }
48 }
49
50 System.out.println(b);
51
52 // bulk operation: remove all words in b from a
53
54 a.removeAll(b);
55
56 System.out.println(a);//通过AbstractCollection类中的toString方法打印出链表a中的所有元素
57 }
58 }
实验结果如下:

实验2:测试程序1(6分)

※运行下列程序,观察程序运行结果

import javax.swing.*;

public class SimpleFrameTest

{

public static void main(String[] args)

{

JFrame  frame = new JFrame();

frame.setBounds(0, 0,300, 200);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setVisible(true);

}

}

实验程序如下:

 1 import javax.swing.*;
2 public class SimpleFrameTest
3 {
4 public static void main(String[] args)
5 {
6 JFrame frame = new JFrame(); //创建一个frame类对象
7 frame.setBounds(0, 0,300, 200);//定义坐标以及宽度和高度
8 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//窗口关闭操作
9 frame.setVisible(true);//窗口是否可见
10 }
11 }

※在elipse IDE中调试运行教材407页程序10-1,结合程序运行结果理解程序;与上面程序对比,思考异同;

※掌握空框架创建方法;

※了解主线程与事件分派线程概念;

※掌握GUI顶层窗口创建技术。

实验程序如下:

 1 package simpleFrame;
2
3 import java.awt.*;
4 import javax.swing.*;
5
6 /**
7 * @version 1.33 2015-05-12
8 * @author Cay Horstmann
9 */
10 public class SimpleFrameTest
11 {
12 public static void main(String[] args)
13 {
14 EventQueue.invokeLater(() ->//lambda表达式:通过线程开启一个队列
15 {
16 SimpleFrame frame = new SimpleFrame();//创建一个类对象
17 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置对象点击关闭操作
18 frame.setVisible(true);//页面是否可见
19 });
20 }
21 }
22
23 class SimpleFrame extends JFrame
24 {
25 private static final int DEFAULT_WIDTH = 300;
26 private static final int DEFAULT_HEIGHT = 200;
27
28 public SimpleFrame()//构造器
29 {
30 setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);//设置大小
31 }
32 }
实验结果如下:

实验2:测试程序2(6分)

※在elipse IDE中调试运行教材412页程序10-2,结合运行结果理解程序;

※掌握确定框架常用属性的设置方法。

实验程序如下:

1 package simpleFrame;
2
3 import java.awt.*;
4 import javax.swing.*;
5
6 /**
7 * @version 1.34 2015-06-16
8 * @author Cay Horstmann
9 */
10 public class SizedFrameTest
11 {
12 public static void main(String[] args)
13 {
14 EventQueue.invokeLater(() ->//lambda表达式:通过线程开启一个队列
15 {
16 JFrame frame = new SizedFrame();//创建一个frame类对象
17 frame.setTitle("SizedFrame");//设置标题
18 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭操作
19 frame.setVisible(true);//设置可见性
20 });
21 }
22 }
23
24 class SizedFrame extends JFrame//继承
25 {
26 public SizedFrame()//构造器
27 {
28 //得到屏幕维度
29
30 Toolkit kit = Toolkit.getDefaultToolkit();//生成Toolkit对象
31 Dimension screenSize = kit.getScreenSize();
32 int screenHeight = screenSize.height;
33 int screenWidth = screenSize.width;
34
35 // set frame width, height and let platform pick screen location
36
37 setSize(screenWidth / 2, screenHeight / 2);//尺寸大小
38 setLocationByPlatform(true);
39
40 // set frame icon
41
42 Image img = new ImageIcon("icon.gif").getImage();
43 setIconImage(img);
44 }
45 }
实验结果如下:

实验2:测试程序3(6分)

※在elipse IDE中调试运行教材418页程序10-3,结合运行结果理解程序;

※掌握在框架中添加组件;

※掌握自定义组件的用法。

实验程序如下:

1 package simpleFrame;
2
3 import javax.swing.*;
4 import java.awt.*;
5
6 /**
7 * @version 1.33 2015-05-12
8 * @author Cay Horstmann
9 */
10 public class NotHelloWorld
11 {
12 public static void main(String[] args)
13 {
14 EventQueue.invokeLater(() ->//lambda表达式:通过线程开启一个队列
15 {
16 JFrame frame = new NotHelloWorldFrame();
17 frame.setTitle("NotHelloWorld");//标题
18 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
19 frame.setVisible(true);
20 });
21 }
22 }
23
24 /**
25 * A frame that contains a message panel
26 */
27 class NotHelloWorldFrame extends JFrame//继承
28 {
29 public NotHelloWorldFrame()//构造器
30 {
31 add(new NotHelloWorldComponent());//添加窗口
32 pack();
33 }
34 }
35
36 /**
37 * A component that displays a message.
38 */
39 class NotHelloWorldComponent extends JComponent
40 {
41 public static final int MESSAGE_X = 75;
42 public static final int MESSAGE_Y = 100;
43
44 private static final int DEFAULT_WIDTH = 300;
45 private static final int DEFAULT_HEIGHT = 200;
46
47 public void paintComponent(Graphics g)//绘图
48 {
49 g.drawString("Not a Hello, World program", MESSAGE_X, MESSAGE_Y);
50 }
51
52 public Dimension getPreferredSize() { return new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT); }
53 }
实验结果如下:

三,实验总结:(19分)

通过本周的学习,我学习到了用JAVA语言更方便的实现数据结构的一些知识,理论课感觉自己能听懂,但实践课一动手发现自己还是有很多知识不知道,因此,在后面的学习中,除了多练习代码,我还会多翻书去记下一些细节和概念。努力学好这门课程。

201871010118-唐敬博《面向对象程序设计(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. 201521123061 《Java程序设计》第十二周学习总结

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

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

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

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

    201521123038 <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进阶-XVIV 类的内置方法:__str__ 、__repr__、析构函数(__del__)、双下的call,eq,new,hash 以及item相关的三个方法

    类的内置方法 它与内置函数有紧密的联系,有的内置函数就是调用的内置方法. 在顶级父类obj中有: 两个双下方法 obj.__str__ str(obj) obj.__repr__ repr(obj) ...

  2. PHP输出函数

    1.print()输出 header('Content-Type:text/html;charset=utf-8'); print ("最近想学习PHP,大家推荐哪个学校好点?/n" ...

  3. Luogu P5416 [CTSC2016]时空旅行

    第一次写线段树分治的题目,没想到是道这么毒的题233 首先发现题目里的\((x,y,z,c)\)就是在放屁,只有\((x,c)\)是有用的 因此我们可以把题意转化为,在某一个时间节点上,求出所有元素的 ...

  4. 第04组 Alpha冲刺(4/6)

    队名:new game 组长博客:戳 作业博客:戳 组员情况 鲍子涵(队长) 燃尽图 过去两天完成了哪些任务 才两天,也就是实现一些功能而已 复习 接下来的计划 实现更多的功能 为这周的比赛准备 还剩 ...

  5. 解决office365无法登录以及同步的问题

    解决office365无法登录以及同步的问题 You better need to test them one by one. You better need to test them one by ...

  6. laravel报错:SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '0' for key 'PRIMARY' (SQL: insert into `cart` (`uid`, `gid`, `gname`, `price`) values (3, 21, 夏季日系复古工装短袖衬衫男士印花潮流宽松五分

    原因:要操作的数据表id没有设置自增,导致出现id为0的情况 解决方法:给该数据表的id字段设置自增

  7. python yield from (二)

    #pep380 #1. RESULT = yield from EXPR可以简化成下面这样 #一些说明 """ _i:子生成器,同时也是一个迭代器 _y:子生成器生产的值 ...

  8. Gitlab 部署汉化及邮件配置

    Gitlab 简介 Gitlab 是一个基于git私有代码管理的服务集成. Nginx:静态web服务器. gitlab-shell:用于处理Git命令和修改authorized keys列表. gi ...

  9. 【UOJ#62】【UR #5】怎样跑得更快(莫比乌斯反演)

    [UOJ#62][UR #5]怎样跑得更快(莫比乌斯反演) 题面 UOJ 题解 众所周知,\(lcm(i,j)=\frac{ij}{gcd(i,j)}\),于是原式就变成了: \[\sum_{j=1} ...

  10. WPF ControlTemplate,DataTemplate

    The Control Template defines the visual appearance of a control. All of the UI elements have some ki ...