Java第七章对象容器
Java面向对象程序设计案例教程(王贺) 第七章习题答案[5页]
![Java面向对象程序设计案例教程(王贺) 第七章习题答案[5页]](https://img.taocdn.com/s3/m/7f6f032cf68a6529647d27284b73f242336c31ea.png)
1.选择题(1)下列说法中错误的是()A.对Swing构件只能设置一个边框B.Swing构件能建立组合边框或自己设计边框C.在Swing构件中,按钮可以使用图标修饰D.Swing构件支持键盘代替鼠标的操作(2)向容器添加新构件的方法是(A)A. add( )B. insert( )C. fill( )D. set( )(3)关于布局管理器LayoutManager,下列说法中正确的是(D)A.布局管理器是用来部署Java应用程序的网上发布的youtManager本身不是接口C.布局管理器是用来管理构件放置在容器中的位置和大小的D.以上说法都不对(4)JTextField类提供的GUI功能是(A)A.文本区域 B.按钮 C.文本字段 D.菜单(5)将GUI窗口划分为东、西、南、北、中五个部分的布局管理器是(D)A.FlowLayout B.GridLayout C. BoxLayout D. BorderLayout(6)关于Panel,下列说法中错误的是(D)A. Panel可以作为最外层的容器单独存在B. Panel必须作为一个构件放置在其他容器中C. Panel可以是透明的,没有边框和标题D. Panel是一种构件,也是一种容器2.填空题(1)( BorderLayout )包括5个明显的区域:东、南、西、北、中。
(2)Java的图形界面技术经历了两个发展阶段,分别通过提供AWT开发包和(Swing)开发包来体现。
(3)可以使用setLoaction( )、setSize( )或(setBounds( ) )中的任何一种方法设置组件的大小或位置。
(4)( GridLayout )布局管理器使容器中各个构件呈网格布局,平均占据容器空间。
(5)框架的默认布局管理器( BorderLayout)。
3.编程题(1)制作如图7-20所示的登录界面。
图7-20package com.zhouzhou;import java.awt.*;import javax.swing.*;public class Demo11 extends JFrame {// 定义组件JPanel jp1, jp2, jp3;JLabel jlb1, jlb2;JButton jb1, jb2;JTextField jtf1;JPasswordField jpf1;public static void main(String[] args) {// TODO Auto-generated method stubDemo11 d1 = new Demo11();}// 构造函数public Demo11() {jp1 = new JPanel();jp2 = new JPanel();jp3 = new JPanel();jlb1 = new JLabel("用户名");jlb2 = new JLabel("密码");jb1 = new JButton("登录");jb2 = new JButton("取消");jtf1 = new JTextField(10);jpf1 = new JPasswordField(10);// 设置布局管理(上面忘记:extends JFrame,这里出错了) this.setLayout(new GridLayout(3, 1));// 加入各个组件jp1.add(jlb1);jp1.add(jtf1);jp2.add(jlb2);jp2.add(jpf1);jp3.add(jb1);jp3.add(jb2);// 加入到JFramethis.add(jp1);this.add(jp2);this.add(jp3);this.setSize(250, 150);this.setTitle("登录");this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);}}(2)制作如图7-21所示的选择界面。
JAVA目录

JAVA学习目录(海同网校)第一章开发简单Java应用程序∙学习第一节序言∙学习第二节Java简介∙学习∙练习∙作业第三节Java开发环境搭建∙学习∙练习∙作业第四节Java简单编程∙学习∙练习∙作业第二章变量和数据类型∙学习第一节序言∙学习第二节变量∙学习∙练习∙作业第三节数据类型∙学习∙练习第三章运算符∙学习第一节序言∙学习第二节运算符(上)∙学习∙练习∙作业第三节运算符(下)∙学习∙练习∙作业第四章条件结构∙学习第一节序言∙学习第二节条件结构(上)∙学习∙练习∙作业第三节条件结构(下)∙学习∙练习∙作业第五章循环控制∙学习第一节序言∙学习第二节while和do-while循环∙学习∙练习第三节for循环∙学习∙练习∙作业第四节break和continue语句∙学习∙练习∙作业第六章数组∙学习第一节序言∙学习第二节一维数组∙学习∙练习∙作业第三节二维数组∙学习∙练习∙作业第七章面向对象编程∙学习第一节序言∙学习第二节类和对象概述∙学习∙练习∙作业第三节对象的创建和使用∙学习∙练习第四节封装∙学习∙练习∙作业第五节继承∙学习∙练习∙作业第六节多态∙学习∙练习∙作业第七节抽象类和接口∙学习∙作业第八章高级特性∙学习第一节序言∙学习第二节内部类∙学习∙作业第三节自动拆装箱和枚举∙学习∙练习∙作业第四节String、StringBuffer和StringBuilder∙学习∙练习∙作业第五节常用类∙学习∙练习∙作业第九章异常∙学习第一节序言∙学习第二节Java异常处理∙学习∙练习∙作业第十章泛型∙学习第一节序言∙学习第二节泛型详解∙学习第十一章IDE∙学习第一节序言∙学习第二节IDE∙学习第十二章集合∙学习第一节序言∙学习第二节集合框架介绍∙学习∙作业第三节List容器∙学习第四节Map容器∙学习∙作业第五节Set容器∙学习∙作业第六节Collections类∙学习∙作业第十三章GUI∙学习第一节序言∙学习第二节AWT∙学习∙练习∙作业第三节事件模型∙学习∙作业第四节SWING∙学习∙练习∙作业第十四章反射∙学习第一节序言∙学习第二节Java反射机制∙学习∙练习第三节Java反射API∙学习∙练习∙作业第十五章多线程∙学习第一节序言∙学习第二节java线程模型∙学习∙练习∙作业第三节多线程编程∙学习∙练习∙作业第十六章IO流∙学习第一节序言∙学习第二节IO框架∙学习∙练习∙作业第三节字节流∙学习∙作业第四节字符流∙学习∙作业第五节其它流∙作业第十七章网络编程∙学习第一节序言∙学习第二节网络基本概念∙学习∙练习∙作业第三节Socket编程∙学习∙练习∙作业第四节URL编程∙学习∙练习∙作业第十八章Java新特性∙学习第一节序言∙学习第二节Annotation∙学习第十九章XML∙学习第一节序言∙学习第二节XML文档结构和语法规则∙学习∙练习∙作业第三节XML SAX解析∙学习∙练习∙作业第四节XML DOM解析∙学习∙练习∙作业第二十章数据库基础∙学习第一节序言∙学习第二节数据库概述、sqlite数据库∙学习∙练习∙作业第三节基本SQL语句∙学习∙练习∙作业第四节JDBC API,java程序访问数据库∙学习∙练习∙作业。
第七章 Collection 集合框架

• 掌握集合框架继承结构 • 常见集合类的使用
简介
Java平台提供了一个全新的集合框架。“集合框架”主要由一组用来操 作对象的接口组成。不同接口描述一组不同数据类型。它们都封装在 java.util包中。 图 7.1 Java集合框架图
简介
集合接口: 个接口 短虚线表示),表示不同集合类型,是集合框架的基础。 个接口( ),表示不同集合类型 集合接口:6个接口(短虚线表示),表示不同集合类型,是集合框架的基础。 抽象类:5个抽象类(长虚线表示),对集合接口的部分实现。可扩展为自 抽象类 定 义集合类。 实现类:8个实现类(实线表示),对接口的具体实现。 实现类 集合机构图 * Collection ├List │├LinkedList │├ArrayList │└Vector │ └Stack └Set HashSet , TreeSet , LinkedHashSet Map ├Hashtable ├HashMap └WeakHashMap
Collection转换 转换 为Object数组 数组
Object[] toArray() Object[] toArray(Object[] a)
7.3 List
Collection<--List<--Vector Collection<--List<--ArrayList Collection<--List<--LinkedList
图 7.2 核心接口 Collection 接口是一组允许重复的对象。 接口是一组允许重复的对象。 Set 接口继承 Collection,但不 , 允许重复, 无序的)。 允许重复,使用自己内部的一个排列机制 (无序的)。 List 接口继承 Collection,允许重复,以元素安插的次序来放置元素,不会重 ,允许重复,以元素安插的次序来放置元素, 新排列。 新排列。 Map接口是一组成对的键-值对象,即所持有的是 接口是一组成对的键- 接口是一组成对的键 值对象,即所持有的是key-value pairs。Map中 。 中 不能有重复的key。拥有自己的内部排列机制。 不能有重复的 。拥有自己的内部排列机制。 注意: 注意: Ø 容器中的元素类型都为 容器中的元素类型都为Object。从容器取得元素时,必须把它转换成原来的类 。从容器取得元素时, 型。
Java中常用的容器类有哪些?它们有什么特点?

Java中常用的容器类有哪些?它们有什么特点?2023年的今天,Java作为一门跨平台的面向对象编程语言,在软件开发领域继续得到广泛的应用。
而在Java中,容器类是不可或缺的一部分,它们为程序员提供了方便易用的数据结构和算法,进而帮助他们快速实现各种功能。
本文将详细介绍Java中常用的容器类,并探讨它们的特点和使用方式。
1. ListList是Java中最基本的容器类之一,它也是最常用的容器之一。
List容器可以按顺序存储一组对象,并允许有重复元素。
List容器提供了一系列的操作方法,包括增加、删除、获取、修改等操作。
在Java中,常见的List容器包括ArrayList、LinkedList和Vector 等。
- ArrayListArrayList是用数组实现的List容器。
它的优点是支持随机访问,插入和删除元素时效率高,而缺点则是在删除元素时需要移动数组的其他元素。
因此,ArrayList适合用于索引域比较小的场合。
- LinkedList相比ArrayList,LinkedList则是通过双向链表的方式实现的容器。
LinkedList支持插入和删除元素时具有较高的效率,而随机访问效率较低。
因此,当需要频繁地进行插入和删除操作时,LinkedList 可以提供更好的性能。
- VectorVector是一个同步的List容器,在多线程环境中更加稳定。
Vector与ArrayList类似,也是用数组实现的容器,并且支持随机访问。
2. SetSet是另一种常用的容器类,它用于存储一组无序的元素。
Set容器具有不允许有重复元素的特点,并提供一系列的操作方法,包括增加、删除、包含等操作。
在Java中,常见的Set容器包括HashSet、LinkedHashSet和TreeSet等。
- HashSetHashSet是使用哈希表实现的Set容器,它具有快速查找元素的特点。
HashSet容器不允许重复元素,因此它适合用于元素去重的场合。
04747 java知识点总结

第七章:输入和输出流第一节:数据流的基本概念1.在java中,把不同类型的输入、输出源抽象为流,其中输入或输出的数据成为数据流,用统一的接口表示。
2.数据流是指一组有顺序的、有起点和终点的字节集合。
程序从键盘接收数据或向文件中写数据,都可以使用数据流来完成。
3.流分为输入数据流和输出数据流。
输入数据流只能读不能写;而输出数据流只能写不能读。
从数据流中读取数据是,必须有一个数据源与该数据流相连(FileInput Stream in = new FileInputStream(“javatest.txt”);)(实例化)4.Java.io包中提供了表示数据流的4个基本抽象类(不可以实例化),分别是InputStream、OutputStream、Reader和Writer。
因此涉及数据流操作的程序中,几乎都要使用引入语句:import java.io.*5.为了使对象的状态能够方便地永久保存下来,java.io包中又提供了以字节流为基础的用于对象的永久化保存状态的机制,通过实现ObjectInput和Object Output接口来完成。
6.输入数据流提供的主要操作方法有:(得到-1,标志数据流结束)int read():从输入流读取一个字节的二进制数据int read( byte [ ] b):将多个字节读到数组中,填满整个数组int read( byte [ ] b ,int off , int len): 从输入流中读取长度为len的数据,从数组b中下标为off的位置开始放置读入的数据,读毕返回读取的字节数。
7.void close(): 关闭数据流int available(): 返回目前可以从数据流中读取的字节数long skip(long l): 跳过数据流中指定数量的字节不读取,返回值表示实际跳过的字节数8.如需要反向读取数据流,则使用回推操作(Push Back)Boolean markSupported(): 用于测试数据流是否支持回推操作void mark(int): 用于标记数据流的当前位置,并划出一个缓冲区,其大小至少为指定参数的大小。
Java的对象、类、方法和接口

1.1什么叫对象?什么叫方法?什么叫面向对象的程序设计?面向过程的程序设计语言最重要的特点是按照解决问题的一个一个步骤来设计程序。
这种语言是与解决相对比较简单的问题,当程序规模较大时,将显得纷繁复杂。
“对象”原来是描述自然界时使用的一个词语。
比如,现在我正在写讲义,桌上的稿纸、手中的笔、案头的参考书、身后的电脑以及窗外的鸟都可以成为对象面向对象,就是将世界看成由许多彼此之间能联络的对象组成。
不少程序设计语言借用了对象这个词语作为一个专用名词,此时,对象也是具有状态和行为两个特征。
在程序设计中,对象的状态时相对处于静态的,用变量来描述和表达;而对象的行为时动态的,他们通过“方法”来实现和完成,所以方法一定是实现对象行为的语句块。
从功能上讲,方法和子程序、函数很相似。
变量和方法是彼此有关、相互依赖的。
当然,计算机都是用数据来表示对象的状态的,也是通过对数据的操作和修改来体现某个方法的功能的。
1.2 Java作为面向对象的程序设计语言有什么特点?Java是面向对象的程序设计语言,从面向对象这个角度看,体现了如下三个特点:a:封装性—面向对象的程序设计语言都是把数据和处理数据的操作结合在一起而构成一个整体,这就是对象。
对象的使用者只能看到对象的外部特性,比如,其主要功能、如何调用等,而看不到内部如何实现这些功能。
作为面向对象的程序设计语言,程序中的数据就是变量,程序对数据作处理则成为方法。
变量和方法都被封装在对象中。
所以,一个对象就是变量和方法的集合,其中变量表明这个对象的状态,方法实现这个对象所具有的行为,而且在程序中将这些变量和方法进行封装,使它们成为一个模块,再用一个名字来代表这个模块。
这样,以后得更高层的程序设计中,就不必关心某个对象的行为到底是怎样实现的。
可见,将对象封装就是为了使模块尽可能少地展现其内部细节,而只是以一种界面来面向外部。
对象的封装性减少了程序各部分之间的依赖,使程序的复杂性降低,而可靠性提高,并便于修改。
第七章习题

第7章一、选择题1.下列说法中错误的一项是()。
A.组件是一个可视化的能与用户在屏幕上交互的对象B.组件能够独立显示出来C.组件必须放在某个容器中才能正确显示D.一个按钮可以是一个组件2.进行Java基本GUI设计需要用到的包是()。
A.java.io B.java.sql C.java.awt D.java.rmi 3.Container是下列哪一个类的子类()?A.Graphics B.Window C.Applet D.Component 4.java.awt.Frame的父类是()。
A.java.util.Window B.java.awt WindowC.java.awt Panel D.java.awt.ScrollPane5.下列哪个方法可以将MenuBar加入Frame中()?A.setMenu() B.addMenuBar() C.add() D.setMenuBar() 6.下列叙述中,错误的一项是()。
A.采用GridLayout布局,容器中的每个组件平均分配容器空间B.采用GridLayout布局,容器中的每个组件形成一个网络状的布局C.采用GridLayout布局,容器中的组件按照从左到右、从上到下的顺序排列D.采用GridLayout布局,容器大小改变时,每个组件不再平均分配容器空间7.当单击鼠标或拖动鼠标时,触发的事件是()。
A.KeyEvent B.ActionEvent C.ItemEvent D.MouseEvent 8.下列哪一项不属于Swing的顶层组件()?A.JApplet B.JDialog C.JTree D.Jframe9.下列说法中错误的一项是()。
A.在实际编程中,一般使用的是Component类的子类B.在实际编程中,一般使用的是Container类的子类C.Container类是Component类的子类D.容器中可以放置组件,但是不能够放置容器10.下列哪一项不属于AWT布局管理器()?A.GridLayout B.CardLayout C.BorderLayout D.BoxLayout 11.下列说法中错误的一项是()。
java对象池使用方法

java对象池使用方法对象池是一种常用的优化技术,用于减少对象创建和销毁的开销。
在Java 中,对象池可以通过使用第三方库来实现,也可以自己实现。
下面是一个简单的对象池实现示例:```javaimport ;import ;public class ObjectPool<T> {private final int initialPoolSize;private final int maxPoolSize;private final BlockingQueue<T> pool;public ObjectPool(int initialPoolSize, int maxPoolSize) {= initialPoolSize;= maxPoolSize;= new LinkedBlockingQueue<>(maxPoolSize);for (int i = 0; i < initialPoolSize; i++) {(createObject());}}private T createObject() {// 创建对象的代码return new T();}public T borrowObject() throws InterruptedException {return ();}public void returnObject(T obj) {(obj);}}```在上面的代码中,`ObjectPool` 类具有一个阻塞队列 `pool`,用于存储对象。
在构造函数中,我们初始化了队列,并创建了初始池大小的对象。
`borrowObject` 方法从队列中获取一个对象,如果队列为空,则会阻塞等待直到有对象可用。
`returnObject` 方法将对象放回队列中。
使用对象池的方法如下:1. 创建对象池:使用 `ObjectPool` 类的构造函数创建一个对象池。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
public Object get(int index){} 作用:返回index位置的元素对象 Public int indexOf(object o){} 作用:找出列表中第一次出现对象o的位置 Public int lastIndexOf(object o){} 作用:找出列表中对象o出现的最后位置 void removeRange(int begin,int end){} 作用:从列表中将序号从begin-end的元素删除 public object[] toArray(){} 作用:得到一个数组,数组元素是列表中元素
Iterator
t1=ArrayL1.iterator();
try { while (t1.hasNext( )){ String x=String.valueOf(t1.next()); System.out.println(x);} }catch(Exception e){ System.out.println(e.toString( )); } } }
HashSet类的常用方法
public HashSet(){ } 作用:创建一个空集合对象 Public void add( Object o){} 作用:如果o对象内容不存在,向集合 中 添加元素o Public void clear(){} 作用:从集合中删除所有元素
Public boolean isEmpity(){ } 作用:如果集合为空返回true Public void remove( Object o){} 作用:从集合中删除指定元素o Public int size() 作用:返回集合中元素的个数 Public boolean contains(Object o) 作用:如果集合中含有o返回true
所在包: java.util.*
public class ArrayList implements List,…{ 属性声明 方法声明 }
ArrayList类的常用方法
构造函数:public ArrayList(){ } 作用:创建一个空列表对象 public ArrayList(int initCapacity){ } 作用:创建一个可容纳…个得空列表对象 方法:Public void add( Object o){} 作用:在列表的末尾添加元素 o Public void add( int index,Object o){} 作用:在列表的index位置添加元素 o
Stack类是Vector类的扩展,行为等同于堆 栈,实现了LIFO(Last-In-First-Out,后进 先出)的算法。
Student x=null; ArrayList collection=new ArrayList(); Student s1=new Student(12345, "John", "Smith"); Student s2=new Student(67890, "Mike","Smith"); Student s3=new Student(13579, "Adam","Smith"); collection.add(s1); collection.add(s1); collection.add(s2); collection.add(s3); Iterator t1=collection.iterator(); try { while (t1.hasNext( )){ 输出结果: x=(Student)(t1.next()); System.out.println(x.getFullName());John Smith John Smith } }catch(Exception e){ Mike Smith System.out.println(e.toString( )); Adam Smith }
Iterator接口方法
方法 next() 说明 返回指向集合中下一对象的引用
hasNext() 指示迭代器是否已经返回集合中所有对象的引用
remove()
找到集合中用next()方法最近访问的对象并删除该 对象
Stack类 ( Set接口)
所在包: java.util.* public class Stack extends Vector{ 属性声明 方法声明 }
remove(Object o) clear() size() iterator()
在集合中添加指定对象
从集合中移除指定对象 移除集合中的所有元素 返回表示集合中当前元素数量的整数 返回一个iterator对象用于遍历集合 中的元素
Set接口的特点
Set接口实现不能包含重复元素。 元素顺序不确定。 集合中没有按索引位置访问元素的相应机制。
HashSet类(Set接口)
一个集合类
集合类的特点: 无序、不重复
, , ,
,
,
,
集合中可以存放不同类型的对象
所在包: java.util.* public interface Set {
}
public class HashSet implements Set{ 属性声明 方法声明 }
HashSet举例 (无序、不重复) import java.util.*; import java.io.*; public class testHashSet{ public static void main(String args[]){ HashSet set_one=new HashSet(); String x1=new String("china"); Character x2=new Character(':'); Integer x3=new Integer(14); String x4=new String("billion") String x5=new String("china"); set_one.add(x1); set_one.add(x2); set_one.add(x3); set_one.add(x4); set_one.add(x5); [ billion , china, 14, :] System.out.println(set_one);
第七章对象容器(集合)
南京农业大学 谢忠红
为什么要使用集合 (对象容器)呢?
数组虽然功能强大,但欠缺灵活性 (长度不可改变)
所在的程序包:java.util.*
<<Interface>> Collection
<<Interface>> Set(集合)
AbstractSet AbstractCollection
ArrayList举例:
public class testArrayList{ public static void main(String args[]){ ArrayList ArrayL1=new ArrayList(5); String x0=new String("china"); Character x1=new Character(':'); Integer x2=new Integer(14); String x3=new String("billion"); String x4=new String("china"); ArrayL1.add(x0); ArrayL1.add(x1); ArrayL1.add(1,x2); ArrayL1.add(x3); ArrayL1.add(0,x4); System.out.println( ArrayL1);
结果: china , china , 14 , : , billion
System.out.println("x4 is the "+ ArrayL1.indexOf(x4)+" element"); System.out.println("the first element is "+ ArrayL1.get(1).toString());
解释: Interator 是一个Java定义的接口
接口中含有下列方法: (1)hasNext() 判断列表或集合中是否还有元素。 (2)Next() 从列表或集合中一次一次取对象。 HashSet和ArrayList类均一个方法获得 Interator接口 方法: .iterator()
Set与ArrayList的比较
import java.util.*; class Student{ long ID; String firstN; String secondN; Student(long ID, String firstN, String secondN){ this.ID=ID; this.firstN =firstN; this.secondN=secondN; } String getFullName(){ return firstN+secondN; } }
创建HashSet实例代替ArrayList实例: