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 ...
随机推荐
- C#扩展方法学习笔记
C#扩展方法,简单的理解是不修改原来类的源代码的情况下,为某个类添加某个方法.扩展方法被定义为静态方法,但它们是通过实例方法语法进行调用的.它们的第一个参数指定该方法作用于哪个类型,并且该参数以 th ...
- C#中try catch中throw ex和throw方式抛出异常有何不同_异常捕获堆栈丢失问题
前言,最近遇到一个使用try-catch异常捕获后记录一下日志,然后再抛出该异常后,异常堆栈里无法显示准确的堆栈地址的问题? 其实以前也遇到过类似问题,没有重视,这次好好研究了下,并上度娘上找了找 ...
- solo升级以及自动化更新的方法
使用solo过程总涉及到更新问题,所以就在这里把solo更新的方法总结一下.希望能给小伙伴们一些帮助.如何选择更新方法主要是跟你的部署方式有关,如果你是通过 docker方式进行部署,那么你可以还可以 ...
- CODING 2.0:为什么我们需要 DevOps
CODING 在前两天的 Kubecon 2019 大会上发布了 CODING 2.0.这背后是 CODING 对研发管理和研发团队组建的思考.从 CODING 成立以来,我们一直在探索"让 ...
- LeetCode刷题191130 --基础知识篇 二叉搜索树
休息了两天,状态恢复了一下,补充点基础知识. 二叉搜索树 搜索树数据结构支持许多动态集合操作,包括Search,minimum,maximum,predecessor(前驱),successor(后继 ...
- RAC环境下修改字符集
跟单实例多少有点区别ORACLE 11g RAC 两节点第一步 查看字符集PRIMARY-SYS@mydb2>select userenv('language') from dual; USER ...
- Java基础 - volatile
volatile的作用:对与volatile修饰的变量, 1,保证该变量对所有线程的可见性. 2,禁止指令重排序. Java内存模型(JMM) 原子性 i = 2; 把i加载到工作内存副本i,副本i= ...
- python模拟进程状态
python模拟进程状态 我在参考资料中看到了两种实现方式,都做了尝试 代码1 from transitions import Machine class Matter: pass model = M ...
- Linux查看CPU和内存情况
本文简单介绍在Linux上查看CPU和内存情况和一款系统资源查看工具htop. 查看CPU情况 以下是个人工作会经常使用到的服务器的信息. 查看所有CPU信息 可以通过如下命令查看所有CPU信息: # ...
- jQuery-点击返回顶部
在页面上,有时需要点击某个图标钮实现返回顶部的效果. 实现方式如下,给图标按钮增加名叫goTop-hook的类. // 点击返回顶部 $(window).scroll(function() { if ...