201871010102-常龙龙《面向对象程序设计(java)》第十二周学习总结
项目 |
内容 |
这个作业属于哪个课程 |
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分)
一、集合
集合框架中的基本接口
●Collection: 集合层次中的根接口。
●Set: 不能包含重复的元素。对象可能不是按存放的次序存放,也就是说不能像数组一-样按索引的方式进行访问,SortedSet是- 一个按照升序排列元素的Set.
●List: 是一个有序的集合,可以包含重复的元素。提供了按索引访问的方式。
●Map:包含了key-value对, 不能包含重复的key。
●SortedMap是一个按照升序排列key的Map。
1.Vector类
●Vector类类似长度可变的数组。
●Vector中只能存放对象。
●Vector的元素通过下标进行访问。
●Vector类关键属性:
- capacity表示集合最多能容纳的元素个数。
- capacityIncrement表示每次增加多少容量。
- size表示集合当前元素个数。
Vector v = new Vector(100)
●Vector类的关键方法:
- void addElement(Object obj)
- void add(int index, Object element)
- Object elementAt(int index)
- void insertElementAt(Object obj, int index)
2.Stack类
●Stack类是Vector的子类。
●Stack类描述堆栈数据结构,即FILO。
●Stack类的关键方法:
- public void push(Object item) // 把项压入栈顶
- public Object pop() //移除栈顶对象并作为此函数的值返回该对象
- public Object peek() //查看栈顶对象而不移除它
- public boolean empty() // 测试堆栈是否为空
3.Hashtable类
●Hashtable通过键来查找元素。
●Hashtable用散列码( hashcode)来确定键。所有对象都有一个散列码,可以通过0bject类的hashCode()方法获得。
4.List类
●List的明显特征是它的元素都有一个确定的顺序。
●实现它的类有ArrayList和LinkedList。
- ArrayList中的元素在内存中是顺序存储的。
- LinkedList中的元素在内存中是以链表方式存储的。
●ArrayList: 可以将其看作是能够自动增长容量的数组。
●利用ArrayList的toArray()返 回一个数组。
●Arrays.asList()返 回一个列表。
●LinkedList是采用双向循环链表实现的。
●利用LinkedList实现栈(stack)、队列(queue)、双向队列(double-ended queue )。
●LinkedList的底层数据采用双向链表(double-linked list)_类内除了数据本身外,还有两个引用,分别指向前一个元素和后一个元素。
●如果经常在List中进行插入和删除操作,应该使用LinkedList,否则,使用ArrayList将更加快速。
5.map
●Map接口用来处理“键-值”对,以便通过键来查找相应的值。
●HashMap基于散列表实现(替代Hashtable)。
●TreeMap在一个二 叉树的基础上实现。
●Map接口映射唯一关键字到值。 关键字(key) 是以后用于检索值的对象。给定-一个关键字和一个值,可以存储这个值到-一个Map对象中。当这个值被存储以后,就可以使用它的关键字来检索它
●Map循环使用两个基本操作: get( )和put( )。使用put( )方法可以将-一个指定了"关键字和值”的值加入映射。为了得到值,可以通过将关键字作为参数来调用get( )方法。调用返回该值。
●Map接口的方法
●boolean containsKey(Object k)检查调用映射中是否包含关键字K
●boolean containsValue(Object v)检查调用映射中是否包含值V
●Object get(Object k)返回与关键字k相关联的值
●boolean isEmpty( )如果调用映射是空的,则返回true; 否则返回false
●Object put(Object k, Object v)将一个 键值对加入调用映射
●Object remove(Object k)删除关键字等于k的键值对
●int size( )返回映射中关键字/值对的个数
●Set entrySet( )返回包含了映射中的项的集合(Set)函类塑Map.Enry的对象.这个方法为调用映射提供了一个集合“视图”。
●Set keySet( )返回一一个包含调用映射中关键字的集合(Set) 。这个方法为调用映射的关键字提供了-一个集合“视图”
●Collection values( )返回-一个包含了映射中的值的类集。这个方法为映射中的值提供了一个类集“视图”
二、GUI
1.框架创建
●通常把由Component类的子类或间接子类创建的对象称为-一个组件。
●例: Button button = new Button() ;
例: TextField textField = new TextField() ;
例: Label label = new Label() ;
●组件类的常用API
- boolean isVisible() 检查组件是否可见.
- void setVisible (boolean b) 设置组件可见
- void setSize (int width, int height)把组件缩放到指定宽度和高度
- void setBounds (int x, int y, int width, int height) 移动并缩放组件
- Dimension getSize() 得到组件的大小
- void setSize (Dimension d) 把组件缩放到指定的大小
- void setLocation(int x, int y) .
●添加组件
●Container类提供了-一个方法add(),用来在容器类组件对象中添加其他组件。
例: fra. add (button) ;
fra. add (textField) ;
●创建空框架
import javax .swing.*;
public class SimpleFrameTest
{
public static void main(StringD args)
{
JFrame frame = new JFrame();
frame.setBounds(, 0,300, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ ON_ CLOSE);
frame.setVisible(true);
}
}
●创建框架时的常用类及API
●java. awt. Component 1. 0
- boolean isVisible() 检查组件是否可见
- void setVisible (boolean b) 设置组件可见
- void setSize (int width, int height) 把组件缩放到指定宽度和高度
- void setBounds(int x, int y, int width, int height) 移动并缩放组件
- Dimension getSize()得到组件的大小
- void setSize (Dimension d) 把组件缩放到指定的大小
●java. awt. Window 1. 0
- void toFront( 放在其它窗口前面- void toBack( 放在其它窗口后面
- void setLocationByPlatform (boolean b) 由平台选择一个合适的位置
●java. awt. Frame 1. 0
- void setResi zable (boolean b)缩放框架
-void setTitle(String s) 设置框架标题
- void setIconImage (Image image) 将Image用作框架图标
●java. awt. Toolkit 1. 0
- static Toolkit getDefaultToolkit() 返回默认工具箱
- Dimension getScreenSize()得到用户屏幕大小
2.2D图形
1) 2D库
●2D库提供了一个非常强大的图形操作库集。
●2D库的类是Graphics类的子类,2D类对象通常可用Graphics对象转换而来。
例: public void paintComponent(Graphics g){
graphics2D g2=(graphics 2D)g;
}
(2)坐标系
●2D图形类使用浮点数坐标系。
●存在的问题:
Retangle2D r....
float f=r.getWidth(); //Error
getWidth ()返回double值,应进行转换;
float f=(float)r .getWidth();
(3)图形类
●2D库为每个图形类提供两个版本的静态内部类:
- Retangle2D. Float
- Retangle2D. Double
(4) 常用2D图形类的API
●java.awt.geom.Retangle2D.Double 1.2
- Retangle2D.Double(double x,double y,double w,double h).
● java.awt.geom.Retangle2D.Float 1.2
- Retangle2D.Float(float x,float y,float w, float h).
●java.awt.geom. Ellipse2D.Double 1.2
- Ellipse2D.Double(double x,double y,double w,double h).
● java.awt. geom.Point2D.Double 1.2
- PointZD.Doubleldouble x,double y).
●java.awt. geom.Line2D.Double 1.2
- Line2D,doublelPoint2D start,Point2D end)
- Line2D.doubleldouble startX,double startY,double endX,double endY)
- fillGraphics2D rec) 填充颜色
- drawlGraphics2D rec) 绘制图形rec
●java.awt.Graphic2D 1.2
- void drawStringlString str, int x, int y);
- void drawShape s);
第二部分:实验部分
实验1: 导入第9章示例程序,测试程序并进行代码注释。
测试程序1:
使用JDK命令运行编辑、运行以下三个示例程序,结合运行结果理解程序;
掌握Vetor、Stack、Hashtable三个类的用途及常用API。
1.示例程序1
代码如下:
package demo; 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){
//创建了一个Cat类型的Vector对象集合
Vector<Cat> cats= new Vector<Cat>(); //使用addElement方法向及集合中添加7个元素
for(int i=0; i<7; i++)
cats.addElement(new Cat(i)); //size()方法会返回集合中元素的个数
//elementAt()方法获取指定位置上的元素
for(int i=0; i<cats.size(); i++)
(cats.elementAt(i)).print();
}
}
运行结果如下:
2.示例程序2
代码如下:
package demo; import java.util.*;
public class Stacks
{
static String[] months={"金","银","铜","铁"};
public static void main(String[] args){
//创建一个String类型的Stack对象集合
Stack<String> stk = new Stack<String>(); //将字符串数组中的元素压入栈中
for(int i=0; i<months.length; i++)
stk.push(months[i]); //输出栈对象
System.out.println(stk); //取出栈中位置为2的元素,此时栈中元素仍是按照字符串数组中的顺序排放
System.out.println("element 2=" + stk.elementAt(2)); //弹出栈中的所有元素
while(!stk.empty())
System.out.println(stk.pop());
}
}
运行结果如下:
3.示例程序3
代码如下:
package demo; 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++) {
Integer r = new Integer((int) (Math.random() * 20));
//测试指定的对象是否是此哈希表的键
if(ht.containsKey(r))
//get():返回指定键映射到的值,将返回的值强制转变为Counter类对象,并将值+1;
((Counter)ht.get(r)).i++;
else
//映射指定的键处指定的值到哈希表里
ht.put(r, new Counter());
}
//System.out.println(ht); //使用forEach()输出哈希表中的键值对
ht.forEach((k,v)->
System.out.println("key="+k+", value="+v));
}
}
运行结果如下:
测试程序2:
● 使用JDK命令编辑运行ArrayListDemo和LinkedListDemo两个程序,结合程序运行结果理解程序;
1>.ArrayListDemo类
package demo; import java.util.*; public class ArrayListDemo {
public static void main(String[] argv) {
//创建一个ArrayList类对象
ArrayList al = new ArrayList(); // 增添一些元素到ArrayList类中
al.add(new Integer(11));
al.add(new Integer(12));
al.add(new Integer(13));
al.add(new String("hello")); // 使用for循环输出它们的值
System.out.println("Retrieving by index:");
for (int i = 0; i < al.size(); i++) {
System.out.println("Element " + i + " = " + al.get(i));
}
}
}
运行结果如下:
2>.LinkedListDemo类
package demo; import java.util.*;
public class LinkedListDemo {
public static void main(String[] argv) {
//创建一个LinkedList对象
LinkedList l = new LinkedList();
l.add(new Object());
l.add("Hello");
l.add("zhangsan"); //LinkedList类的listIterator方法返回了一个实现ListIterator接口的迭代器对象
ListIterator li = l.listIterator(0); //遍历链表中的每一个元素
while (li.hasNext())
System.out.println(li.next()); //indexof()方法返回与指定元素相等的元素在列表中第一次出现的位置,如果没有这样的元素将返回-1
if (l.indexOf("Hello") < 0)
//Hello在列表中出现的位置是1>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"); // merge the words from b into a ListIterator<String> aIter = a.listIterator();
//LinkedList类的listIterator方法返回了一个实现ListIterator接口的迭代器对象 Iterator<String> bIter = b.iterator();
//LinkedList类的iterator方法返回了一个实现Iterator接口的迭代器对象 //将b中的每个元素插入到a中相应元素的后面
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(); // skip next element
bIter.remove(); // remove that element
}
} System.out.println(b); // 删除a中所有的b元素 a.removeAll(b); System.out.println(a);
}
}
运行结果如下:
实验2:导入第10章示例程序,测试程序并进行代码注释。
测试程序1:
运行下列程序,观察程序运行结果。
● 在elipse IDE中调试运行教材407页程序10-1,结合程序运行结果理解程序;与上面程序对比,思考异同;
● 掌握空框架创建方法;
● 了解主线程与事件分派线程概念;
● 掌握GUI顶层窗口创建技术。
1>示例程序:
代码如下:
package demo; 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);
}
}
运行结果如下:
2>教材程序
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:
● 在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()
{
// 获取屏幕尺寸 Toolkit kit = Toolkit.getDefaultToolkit();
Dimension screenSize = kit.getScreenSize();
int screenHeight = screenSize.height;
int screenWidth = screenSize.width; // 设置框架宽度、高度并让平台拾取屏幕位置 setSize(screenWidth / 2, screenHeight / 2);
setLocationByPlatform(true); // 设置帧图标 Image img = new ImageIcon("icon.gif").getImage();
setIconImage(img);
}
}
运行结果如下:
测试程序3:
● 在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方法而不是setSize方法*/
pack();
}
} /**
* 一个显示消息的组件.
*/
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; //paintComponent方法中有一个Graphics类型的参数,这个参数保存着用于绘制图像和文本的设置
public void paintComponent(Graphics g)
{
//显示文本是一种特殊的绘图。在Graphics类中有一个drawString方法。
g.drawString("Not a Hello, World program", MESSAGE_X, MESSAGE_Y);
} //组件应该告诉用户它有多大。覆盖getPreferredSize方法,返回一个有首选宽度和高度的Dimension
public Dimension getPreferredSize()
{
return new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT);
}
}
运行结果如下:
实验总结:(19分)
通过本周的学习我掌握Vetor、Stack、Hashtable三个类的用途及常用API, 掌握ArrayList、LinkList两个类的用途及常用API,了解java集合框架体系组成,掌握Java GUI中框架创建及属性设置中常用类的API, 了解Java GUI中2D图形绘制常用类的API。在命令行的运行过程中,我掌握了带有包的程序运行的方式。此外我觉得现在在老师及助教的随时提醒下,我测试代码不再是只将代码复制在eclipse上运行出来截图这样做了,现在我会把代码在书上找到每句代码都理解之后再写上代码注释后再截图,这样我对代码的理解越来越深,我相信以后我会坚持下去,并且争取最终取到好成绩。
201871010102-常龙龙《面向对象程序设计(java)》第十二周学习总结的更多相关文章
- 201571030332 扎西平措 《面向对象程序设计Java》第八周学习总结
<面向对象程序设计Java>第八周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https: ...
- 20155322 2016-2017-2 《Java面向对象程序设计》第十二周课堂练习之Arrays和String单元测试
20155322 2016-2017-2 <Java面向对象程序设计>第十二周课堂练习之Arrays和String单元测试 练习目地 在IDEA中以TDD的方式对String类和Array ...
- 201521123061 《Java程序设计》第十二周学习总结
201521123061 <Java程序设计>第十二周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student对 ...
- 201521123072《java程序设计》第十二周学习总结
201521123072<java程序设计>第十二周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student对象 ...
- 201521123038 《Java程序设计》 第十二周学习总结
201521123038 <Java程序设计> 第十二周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student ...
- 201521123122 《java程序设计》第十二周学习总结
## 201521123122 <java程序设计>第十二周实验总结 ## 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将St ...
- 201771010118马昕璐《面向对象程序设计java》第八周学习总结
第一部分:理论知识学习部分 1.接口 在Java程序设计语言中,接口不是类,而是对类的一组需求描述,由常量和一组抽象方法组成.Java为了克服单继承的缺点,Java使用了接口,一个类可以实现一个或多个 ...
- 201771010134杨其菊《面向对象程序设计java》第八周学习总结
第八周学习总结 第一部分:理论知识 一.接口.lambda和内部类: Comparator与comparable接口: 1.comparable接口的方法是compareTo,只有一个参数:comp ...
- 201771010134杨其菊《面向对象程序设计java》第七周学习总结
第七周学习总结 第一部分:理论知识 1.继承是面向对象程序设计(Object Oriented Programming-OOP)中软件重用的关键技术.继承机制使用已经定义的类作为基础建立新的类定义,新 ...
- 201521123053《Java程序设计》第十二周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 一些有关流与文件的知识点: 1. 字节缓冲流: BufferedInputStream(FileInputSt ...
随机推荐
- YII2数据库操作出现类似Database Exception – yii\db\Exception SQLSTATE[HY000] [2002] No such file or director
参考文章:https://blog.csdn.net/zqtsx/article/details/41845511 我的系统时Ubuntu18使用上面的方法时发现,没有MySQL.socket,然后谷 ...
- web.xml的常见配置
web.xml的常见配置 <!-- 配置全局的编码过滤器 --> <filter> <description>编码过滤器</description> & ...
- Angular-----代码风格指南!!!(很重要)
一:文件结构 1).单一规则:坚持每个文件只定义一样东西(例如服务或组件),考虑把文件大小限制在 400 行代码以内. 单组件文件非常容易阅读.维护,并能防止在版本控制系统里与团队冲突: 单组件文件可 ...
- Angular--AOT和JIT两种编译方式带来的改变
Angular 应用主要由组件及其 HTML 模板组成.由于浏览器无法直接理解 Angular 所提供的组件和模板,因此 Angular 应用程序需要先进行编译才能在浏览器中运行.Angular 提供 ...
- Android微信九宫格图片展示控件
版权声明:本文为xing_star原创文章,转载请注明出处! 本文同步自http://javaexception.com/archives/214 Android微信九宫格图片展示控件 半年前,公司产 ...
- dedecmsV5.7 百度编辑器ueditor 多图上传 在线管理 排序问题
问题:dedecms后台百度编辑器ueditor的多图上传-在线管理的图片排序有问题,想把这个顺序调成按照文件修改时间倒序来展示 解决方法: 1.打开/include/ueditor/php/acit ...
- 深挖的Java源代码之Integer.parseInt()vs Integer.valueOf()
Integer.parseInt()和Integer.valueOf()都是用来将String转换为Int的,但是为什么Java会提供两个这样的方法呢,他们如果是同样的操作,岂不是多此一举? 我们来深 ...
- 12c分区增强功能,新功能(文档ID 1568010.1)
12c Partitioning Enhancements, New Features (Doc ID 1568010.1) APPLIES TO: Oracle Database - Enterpr ...
- tensorflow 神经网络模型概览;熟悉Eager 模式;
典型神经网络模型:(图片来源:https://github.com/madalinabuzau/tensorflow-eager-tutorials) 保持更新,更多内容请关注 cnblogs.com ...
- CentOS自动化安装LAMP脚本
#!/bin/bash #-- #blog:lizhenliang.blog.51cto.com ########## function ########## depend_pkg () { yum ...