要用Java实现记事本的功能。首先列出记事本所需功能:

  1. 可以添加记录(字符串);
  2. 可以获得记录条数;
  3. 可以删除其中某一条记录;
  4. 可以获得指定第几条的记录;
  5. 可以列出所有的记录。

如果这个记事本是某个大程序的其中一部分,也就是说还有上层程序,那么上层程序就有可能会调用这个记事本以上列出的某个数据。

所以我们称上述所列功能为这个记事本的 接口

那么调用这些接口就是通过记事本这个类的public函数(method)。

但是,怎么实现记录呢?显然所记录的字符串不能记录在某个数组里,因为数组的长度是预先设定好的。这时就要用到 泛型容器 Arraylist<> ,这个arraylist也是系统的一个类,所以在使用它的时候要定义一个新的对象出来:private Arraylist<String> notes = new Arraylist<String>();  还要声明 import java.util.ArrayList;

arraylist可以任意往里面存放数据,不限数目,这就实现了记事本的要求。

arraylist的基本操作: Arraylist<String> notes

  • notes.add()
  • notes.size()
  • notes.remove(index)
  • notes.get(index)
  • notes.toArray(String[] a=new String[notes.size()])

通过以上操作实现记事本的接口函数。

 1 package notebook;
2
3 import java.util.ArrayList;
4
5 public class Notebook {
6
7 private ArrayList<String> notes = new ArrayList<String>();
8
9 public void add(String s) {
10 notes.add(s);
11 }
12
13 public int getSize() {
14 return notes.size();
15 }
16
17 public void removeNote(int index) {
18 notes.remove(index);
19 }
20
21 public String getNote(int index) {
22 return notes.get(index);
23 }
24
25 public String[] list() {
26 String[] a = new String[notes.size()];
27 notes.toArray(a);
28 return a;
29 }
30
31 public static void main(String[] args) { //test
32 Notebook nb = new Notebook();
33 nb.add("frist");
34 nb.add("second");
35 System.out.println(nb.getSize());
36 String[] a = nb.list();
37 for(String s:a) {
38 System.out.println(s);
39 }
40 }
41
42 }

Notebook.java

运行:

-----------------------------------------------------------------------------------------

另外,容器类型还有集合容器(Set),如HashSet,同样是一个类,所具有的特性是内部元素是不排序的,不能有重复的元素,与数学里的集合概念相同。

由程序运行结果可以看到ArrayList 和HashSet 这两种容器的不同。

注意:由程序还可以看到,两个容器的输出不再是把容器的每个元素赋值给另一个数组,再通过for each循环把数组里的每个元素输出。在这里我们是直接println出来了一个容器的对象,是可以的。这是因为:{

             如第一个红框所示,如果一个类里有“public String toString() {}”函数,则可以直接println这个类的对象名,输出的时候会自动调用toString函数的,如第二个红框所示。所以,我们猜测,ArrayList和HashSet这两个公共类源文件里一定也有“public String toString() {}” 类似的函数

             }

-----------------------------------------------------------------------------------------

HashMap容器: HashMap<Key,Value>

一个键对应一个值,当给一个键多次put之后,这个键对应最后put的值,如图:(一个输入面额,输出多对应美元名称的程序,如:1美分叫做1penny。)

HashMap的遍历:

[转]JAVA对象容器的更多相关文章

  1. Java 对象容器

    一.ArrayList 容器 1.记事本 package booknote; import java.util.ArrayList; public class NoteBook { private A ...

  2. Java对象容器总结

    泛型容器类 容器类型: ArrayList 元素类型: 有排序 String:里面存放的是对象的管理者,而不是具体的对象,所以string类型有null值 集合容器 容器类型 Set 元素类型 唯一性 ...

  3. JSP隐式对象是JSP容器为每个页面提供的Java对象

    JSP 隐式对象 JSP隐式对象是JSP容器为每个页面提供的Java对象,开发者可以直接使用它们而不用显式声明.JSP隐式对象也被称为预定义变量. JSP所支持的九大隐式对象: 对象 描述 reque ...

  4. Java进阶学习(3)之对象容器(上)

    对象容器 顺序容器 记事本的例子 UI设计和业务逻辑要分离 接口设计 add(String note); getSize(); getNote(int index); removeNote(index ...

  5. 理解Java对象序列化

    http://www.blogjava.net/jiangshachina/archive/2012/02/13/369898.html 1. 什么是Java对象序列化 Java平台允许我们在内存中创 ...

  6. Java基础学习总结——Java对象的序列化和反序列化

    一.序列化和反序列化的概念 把对象转换为字节序列的过程称为对象的序列化. 把字节序列恢复为对象的过程称为对象的反序列化. 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上,通常存 ...

  7. 《精通Hibernate:Java对象持久化技术详解》目录

    图书信息:孙卫琴 电子工业出版社 第1章 Java应用分层架构及软件模型: 1.1 应用程序的分层体系结构 1.1.1 区分物理层和逻辑层 1.1.2 软件层的特征 1.1.3 软件分层的优点 1.1 ...

  8. Java集合容器简介

    Java集合容器主要有以下几类: 1,内置容器:数组 2,list容器:Vetor,Stack,ArrayList,LinkedList, CopyOnWriteArrayList(1.5),Attr ...

  9. Java基础学习总结--Java对象的序列化和反序列化

    一.序列化和反序列化的概念 把对象转换成字节序列的过程称之为对象的序列化 把字节序列恢复为对象的过程称之为对象的反序列化 对象序列化的主要用途: 1)把对象的字节序列永久的保存到硬盘上,通常放在一个文 ...

随机推荐

  1. 用户交互和if条件判断、嵌套

    #a=input("提示语“)#接受的数据类型是字符串str#提示用户输入姓名 # a=input("请输入姓名") print(a) '''输出结果:请输入姓名小明 姓 ...

  2. 关于sigleton模式

    单例模式的要点有三个:一是某个类只能有一个实例:二是它必须自行创建这个实例:三是它必须自行向整个系统提供这个实例. 从具体实现角度来说,就是以下三点:一是单例模式的类只提供私有的构造函数,二是类定义中 ...

  3. css--使用的四种方法

    前戏 之前学习了HTML相关的知识,也能简单的写一个hello world的页面.但是,只学HTML满足不了我们的需求,而HTML.CSS.JavaScript三者搭配使用才能更好的完成我们需要的效果 ...

  4. 获得Dictionary所有key和value值

    Dictionary<string, string> dc = new Dictionary<string, string>(); dc.Add("code" ...

  5. 条款24:若所有参数皆需要类型转换,请为此采用non-member函数(Declare non-member functions when type conversions should apply to all parameters)

    NOTE: 1.如果你需要为某个函数的所有参数(包括this指针所指的那个隐喻参数)进行类型转换,那么这个函数必须是个non-member.

  6. LeetCode(69) Sqrt(x)

    题目 Total Accepted: 67411 Total Submissions: 286086 Difficulty: Medium Implement int sqrt(int x). Com ...

  7. 【7.1.1】ELK日志系统单体搭建

    ELK是什么? 一般来说,为了提高服务可用性,服务器需要部署多个实例,每个实例都是负载均衡转发的后的,如果还用老办法登录服务器去tail -f xxx.log,有很大可能错误日志未出现在当前服务器中, ...

  8. 大数据学习——flume拦截器

    flume 拦截器(interceptor)1.flume拦截器介绍拦截器是简单的插件式组件,设置在source和channel之间.source接收到的事件event,在写入channel之前,拦截 ...

  9. PTA 02-线性结构3 Reversing Linked List (25分)

    题目地址 https://pta.patest.cn/pta/test/16/exam/4/question/664 5-2 Reversing Linked List   (25分) Given a ...

  10. DBCA建库出错ORA-00600: internal error code, arguments

    正常步骤安装完成Oralce,通过dbca建库,报错如下图所示: Oracle安装日志中报错如下: [Thread-40] [ 1999-12-15 12:23:54.055 CST ] [Basic ...