项目

内容

这个作业属于哪个课程

<任课教师博客主页链接>

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;

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

第九章:

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

2.集合框架:JAVA集合类库的统一架构。

框架就是一个类库,框架中包含一些通用接口和超类,实现这些接口或创建这些超类的子类就可方便的设计程序所需的类。

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

集合类的使用: Java的集合类包含在java.util包中。

集合类的特点:

1. 只容纳对象。 注意:数组可以容纳基本数据类型数据和对象。 如果集合类中想使用基本数据类型,又想利用 集合类的灵活性,可以把基本数据类型数据封 装成该数据类型的包装器对象,然后放入集合 中处理。

2. 集合类容纳的对象都是Object类的实例,一旦 把一个对象置入集合类中,它的类信息将丢失 ,这样设计的目的是为了集合类的通用性。 因为Object类是所有类的祖先,所以可以在这 些集合中存放任何类的对象而不受限制,但切 记在使用集合成员之前必须对它重新造型。

Vector类:

  Vector类类似长度可变的数组。

  Vector中只能存放对象。

  Vector的元素通过下标进行访问。

  Vector类关键属性: capacity表示集合多能容纳的元素个数。 capacityIncrement表示每次增加多少容量。 size表示集合当前元素个数。

Stack类:Stack类是Vector的子类。FILO

Hashtable类:
  Hashtable通过键来查找元素。
  Hashtable用散列码(hashcode)来确定键。所 有对象都有一个散列码,可以通过Object类的 hashCode()方法获得。

  Math.random()方法的随机性。   

集合框架中的基本接口:
  Collection:集合层次中的根接口,JDK未提供这个 接口的直接实现类。

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

  List:是一个有序的集合,可以包含重复的元素。提 供了按索引访问的方式。 Map:包含了key-value对。Map不能包含重复的key 。

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

List:
  List的明显特征是它的元素 都有一个确定的顺序。

  LinkedList中的元素在内存 中是以链表方式存储的。 List的明显特征是它的元素 都有一个确定的顺序。

  实现它的类有ArrayList和 LinkedList。

    ArrayList中的元素在内存中 是顺序存储的。

    LinkedList中的元素在内存 中是以链表方式存储的。

ArrayList和linkedList :
 ArrayList:可以将其看作是能够自动增长容量的数组。利用ArrayList的toArray()返回一个数组。
 Arrays.asList()返回一个列表。
 LinkedList是采用双向循环链表实现的。
 利用LinkedList实现栈(stack)、队列(queue)、双向队列(double-ended queue )。
 ArrayList底层采用数组完成,而LinkedList则是以一般的 双向链表(double-linked list)完成,其内每个对象除了数据 本身外,还有两个引用,分别指向前一个元素和后一个元 素。
 如果经常在 List 中进行插入和删除操作,应该使用LinkedList,否则,使用ArrayList将更加快速。

Set:
 Set中的元素必须唯一。
 添加到Set中的对象元素必须定义equals方法,以提供算法来判断欲添加进来的对象是否与已经存在的某对象相等,从而建立对象的唯一性。
 实 现 Set 接口的类有HashSet,TreeSet

HashSet与TreeSet:

 TreeSet是一个有序集合,TreeSet中元素将按照升序排列,缺省是按照自然顺序进行排列,意味着TreeSet中元素要实现Comparable接口。
 可以在构造 TreeSet 对象时,传递实现了Comparator接口的比较器对象。
 HashSet是基于Hash算法实现的,其性能通常都优于TreeSet。通常使用HashSet,需要排序的功能时,使用TreeSet。

Map:
 映射(map)是一个存储关键字和值的关联或关键字/值对的对象。给定一个关键字,可以得到它的值。关键字和值都是对象。关键字必须是唯一的。但值是 可以被复制的。
 Map接口映射唯一关键字到值。关键字(key)是以 后用于检索值的对象。给定一个关键字和一个值,可 以存储这个值到一个Map对象中。当这个值被存储以 后,就可以使用它的关键字来检索它
 Map循环使用两个基本操作:get( )和put( )。使用put( )方法可以将一个指定了关键字和值的值加入映 射。为了得到值,可以通过将关键字作为参数来调用get( )方法。调用返回该值。

第十章:

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

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

Swing:

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

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

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

  大部分AWT组件都有其Swing的等价组件。

  Swing组件的名字一般是在AWT组件名前面添加一个字母“J”,如:JButton,JFrame,JPanel等。

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

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

容器:容器是Java中能容纳和排列组件的组件。

常用的容器是框架(Frame,JFrame)

添加组件:

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

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

框架的创建:

创建空框架
   在Java中,常采用框架(Frame)创建初始界面,即GUI的顶层窗口. AWT库中有一个基于对等体的Frame类。
.  该类的Swing版本为JFrame,JFrame是Frame子类。
定位:
  常用Component类的setLocation和setBounds方法常用属性
  Title:框架标题
  IconImage:框架图标

java.awt.Component 1.0
  boolean isVisible() 检查组件是否可见  

  void setVisible(boolean b) 设置组件可见  

  void setSize(int width,int height) 把组件缩放到指定宽度和高度   

  void setBounds(int x,int y,intwidth,int height) 移动并缩放组件

   Dimension getSize() 得到组件的大小
  void setSize(Dimension d) 把组件缩放到指定的大小

2D图形:

  Java SE了包含一个Java 2D库,该库提供了一个非常强大的图形操作集。
   Graphics 2D 类是Graphics 类的子类, Graphics2D类对象通常可用Graphics对象转换而来。

颜色

Graphics2D类的setPaint方法(Graphics类为setColor方法)用来设置颜色。
例:g2.setPaint(Color.RED);g2.drawString(“Set Color”,100,100);
(1)Color类中定义的13种标准颜色
BLACK、BLUE、CYAN、DARK_GRAY、GRAY、GREEN、
LIGHT_GRAY、MAGENTA、ORANGE、PINK、RED、
WHITE、YELLOW
6,字体的使用:

(1)AWT中定义的五种逻辑字体名
 SanaSerif
 Serif
 Monospaced
 Dialog
 DialogInput
这些逻辑字体在不同语言和操作系统上映射为不同
的物理字体。

(2)字体风格
 Font.PLAIN
 Font.BOLD
 Fond.ITALIC
 Fond.BOLD + Font.ITALIC
(3)设置字体
 Font serif=new Font(“Serif”,Font.BOLD,14);
 g2.setFont(serif);

第二部分:实验部分

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

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

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

//示例程序1
import java.util.Vector;
class Cat {
private int catNumber;
Cat(int i) {
catNumber = i;
}
void print() {
System.out.println("Cat #" + catNumber);
}
}
public class Cats{
public static void main(String[] args){
Vector<Cat> cats= new Vector<Cat>();
for(int i=0; i<7; i++)
cats.addElement(new Cat(i));
for(int i=0; i<cats.size(); i++)
(cats.elementAt(i)).print();
}
}

 

 

//示例程序2
import java.util.*;
public class Stacks
{
static String[] months={"金","银","铜","铁"};
public static void main(String[] args){
Stack<String> stk = new Stack<String> ();
for(int i=0; i<months.length; i++)
stk.push(months[i]);
System.out.println(stk);
System.out.println("element 2=" + stk.elementAt(2));
while(!stk.empty())
System.out.println(stk.pop());
}
}

 

//示例程序3
import java.util.*;
class Counter {
int i = 1;
public String toString() {
return Integer.toString(i);
}
} public class Statistics {
public static void main(String[] args) {
Hashtable ht = new Hashtable();
for (int i = 0; i < 10000; i++) {//生成10000个随机数
Integer r = new Integer((int) (Math.random() * 20));
if(ht.containsKey(r))//确定 Hashtable 是否包含特定键。
((Counter)ht.get(r)).i++;//计算key的hash值,匹配直到找到相对应key的value,若没有找到返回null
else ht.put(r, new Counter());
}
System.out.println(ht);
}
}

小结:

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

 关键属性: capacity表示集合多能容纳的元素个数。 capacityIncrement表示每次增加多少容量。 size表示集合当前元素个数。

Stack类:Vector的子类。特点:FILO

Hashtable类:通过键来查找元素。用散列码(hashcode)来确定键。所 有对象都有一个散列码,可以通过Object类的 hashCode()方法获得。

  Math.random()方法的随机性。get、put 方法的使用。

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

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

import java.util.*;

public class ArrayListDemo {
public static void main(String[] argv) {
ArrayList al = new ArrayList();
// Add lots of elements to the ArrayList...
al.add(new Integer(11));//添加元素
al.add(new Integer(12));
al.add(new Integer(13));
al.add(new String("hello"));
// First print them out using a for loop.
System.out.println("Retrieving by index:");
for (int i = 0; i < al.size(); i++) {
System.out.println("Element " + i + " = " + al.get(i));
}
}
}

  

import java.util.*;
public class LinkedListDemo {
public static void main(String[] argv) {
LinkedList l = new LinkedList();
l.add(new Object());
l.add("Hello");
l.add("zhangsan");
ListIterator li = l.listIterator(0);
while (li.hasNext())//存在可访问的元素
System.out.println(li.next());//返回将要访问的下一个元素
if (l.indexOf("Hello") < 0) //返回第一次出现的指定子字符串在此字符串中的索引
System.err.println("Lookup does not work");
else
System.err.println("Lookup works");
}
}

  

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

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

package linkedList;

import java.util.*;

/**
* This program demonstrates operations on linked lists.
* @version 1.12 2018-04-10
* @author Cay Horstmann
*/
public class LinkedListTest
{
public static void main(String[] args)
{
var a = new LinkedList<String>();//创建链表
a.add("Amy");
a.add("Carl");
a.add("Erica"); var b = new LinkedList<String>();
b.add("Bob");
b.add("Doug");
b.add("Frances");
b.add("Gloria"); // 把b中的元素合并到a中 ListIterator<String> aIter = a.listIterator();
Iterator<String> bIter = b.iterator(); while (bIter.hasNext())
{
if (aIter.hasNext()) aIter.next();
aIter.add(bIter.next());
} System.out.println(a); // remove every second word from b bIter = b.iterator();
while (bIter.hasNext())
{
bIter.next(); // skip one element
if (bIter.hasNext())
{
bIter.next(); //返回下一个要访问的元素
bIter.remove(); // 移出元素
}
} System.out.println(b); a.removeAll(b);//删除a中删除b中存在的所有元素 System.out.println(a);
}
}

  

 

实验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); //获取或设置Visible属性 ,组件可见
}
}

 

 

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

掌握空框架创建方法;

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

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

package simpleFrame;

import java.awt.*;
import javax.swing.*; /**
* @version 1.34 2018-04-10
* @author Cay Horstmann
*/
public class SimpleFrameTest
{
public static void main(String[] args)
{
EventQueue.invokeLater(() ->
{
var frame = new SimpleFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
});
}
} class SimpleFrame extends JFrame
{
private static final int DEFAULT_WIDTH = 300;
private static final int DEFAULT_HEIGHT = 200; public SimpleFrame()
{
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);//使用给定的宽度和高度,重新设置组件大小
}
}

  

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

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

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

package sizedFrame;

import java.awt.*;
import javax.swing.*; /**
* @version 1.35 2018-04-10
* @author Cay Horstmann
*/
public class SizedFrameTest
{
public static void main(String[] args)
{
EventQueue.invokeLater(() ->
{
var frame = new SizedFrame();
frame.setTitle("SizedFrame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
});
}
} class SizedFrame extends JFrame
{
public SizedFrame()
{
// get screen dimensions Toolkit kit = Toolkit.getDefaultToolkit();//调用Toolkit类的静态方法getDefaultToolkit得到一个Toolkit对象
Dimension screenSize = kit.getScreenSize();//调用getScreenSize方法,以Dimension对象形式返回屏幕大小
int screenHeight = screenSize.height;//屏幕高度
int screenWidth = screenSize.width;//屏幕宽度 // set frame width, height and let platform pick screen location setSize(screenWidth / 2, screenHeight / 2);//框架大小定义为取值的50%
setLocationByPlatform(true);//告知窗口系统定位框架 // set frame icon Image img = new ImageIcon("icon.gif").getImage();
setIconImage(img); //图像设置为框架图标
}
}

  

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

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

掌握在框架中添加组件;

掌握自定义组件的用法。

package notHelloWorld;

import javax.swing.*;
import java.awt.*; /**
* @version 1.34 2018-04-10
* @author Cay Horstmann
*/
public class NotHelloWorld
{
public static void main(String[] args)
{
EventQueue.invokeLater(() ->
{
var frame = new NotHelloWorldFrame();
frame.setTitle("NotHelloWorld");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
});
}
} /**
* A frame that contains a message panel.
*/
class NotHelloWorldFrame extends JFrame
{
public NotHelloWorldFrame()
{
add(new NotHelloWorldComponent());//将给定组件添加到该框架的内容窗格中
pack();//调整窗口大小,考虑其组件的首选大小
}
} /**
* A component that displays a message.
*/
class NotHelloWorldComponent extends JComponent
{
public static final int MESSAGE_X = 75;
public static final int MESSAGE_Y = 100; private static final int DEFAULT_WIDTH = 300;
private static final int DEFAULT_HEIGHT = 200; public void paintComponent(Graphics g)//覆盖这个方法描述一个如何绘制自己的组件
{
g.drawString("Not a Hello, World program", MESSAGE_X, MESSAGE_Y);
} public Dimension getPreferredSize() //覆盖这个方法,返回这个组件的首选大小
{
return new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT);
}
}

  

实验总结:(19分)本周学习了第九、十章的内容。第九章主要学习了Vector类、Stack类、Hashtable类等遗留类的知识与API。ArrayList和linkedList的添加元素等方法的应用。第十章图像程序设计主要学习了添加组件与框架的创建。通过运行程序,并分析程序结果,理解代码相关知识以及API的使用。虽然有些代码刚开始有些不能理解,但通过不断的尝试与问同学,慢慢的理解相应代码。

201871010108-高文利《面向对象程序设计(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. 201521123061 《Java程序设计》第十二周学习总结

    201521123061 <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. 201521123034《Java程序设计》第十二周学习总结

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

随机推荐

  1. 各版本mysql修改root密码

    今天在安装mysql5.7.8的时候遇到一些问题,首当其冲便的是初始root密码的变更,特分享解决方法如下: 1.mysql5.7会生成一个初始化密码,而在之前的版本首次登陆不需要登录. shell& ...

  2. SpringBoot定时器任务

    Spring Boot使用@Scheduled定时器任务   摘要: Spring Boot之使用@Scheduled定时器任务 假设我们已经搭建好了一个基于Spring Boot项目,首先我们要在A ...

  3. Vue中的父组件给子组件传值

    父子组件传值: 父组件在调用子组件的地方,添加一个自定义的属性,属性的值就是你要传递给子组件的数据,如果值是一个变量,那么需要使用到绑定属性: 在子组件定义的地方,添加一个props选项,值为一个数组 ...

  4. 小明工具箱<Excel 插件><VSTO 插件>

    当前版本:1.0.42.7118(更新日期:2019年6月28日) 下载地址:点击下载 功能和简介: 本程序为 Excel 2010 版本以上的插件,含以下功能: 拆分工作簿:将一个或多个工作簿中的每 ...

  5. 如何编写一个 SendFile 服务器

    如何编写一个 SendFile 服务器 前言 之前讨论零拷贝的时候,我们知道,两台机器之间传输文件,最快的方式就是 send file,众所周知,在 Java 中,该技术对应的则是 FileChann ...

  6. prisma反向代理

    概要 为什么要做 prisma 的反向代理 反向代理示例(by golang) prisma 服务 gateway 服务 整体流程 认证 反向代理 权限 总结 概要 接触 prisma 有段时间了, ...

  7. 扩展centos7.4虚拟机磁盘大小

    虚拟机分配磁盘40GB,实际系统分区只用了20GB,需要手工扩展到40GB,操作方法如下: 查看磁盘信息(确认主分区只有17GB):[root@test-web1 ~]# df -hFilesyste ...

  8. poj-3230 Travel

    One traveler travels among cities. He has to pay for this while he can get some incomes. Now there a ...

  9. 用 qemu-user 在arm linux机器上运行amd64/x86程序

    1. qemu-user 是什么 本来, 对于 QEmu, 我只知道它是一个模拟器, 可以像 VirtualBox/VMWare 那样跑一个操作系统, 只不过 QEmu 可以在 AMD64 上面跑针对 ...

  10. Hyper V NAT 网络设置 固定IP / DHCP

    Hyper V 默认的Default Switch同时支持了NAT网络以及DHCP,虚拟机能够访问外网. 但使用过程中发现这个IP网段经常变化,而且Hyper V没有提供管理其NAT网络与DHCP的图 ...