栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

日撸 Java 三百行: DAY11 顺序表1

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

日撸 Java 三百行: DAY11 顺序表1

0.主题

今天的主题有以下内容

  • 初识面向对象
  • 顺序表

通过构建一个SequentialList类来熟悉以上知识点。

1.面向对象程序设计(OOP)

面向对象程序设计(Object-oriented programming)是一种主流的程序设计范型,它 将数据放在第 1 1 1位, 然后再考虑操作数据的方法,非常适用
于解决规模较大的问题。


  • 类(class)是构造对象的模板,通常类中有实例域,构造器和方法三个部分。其中构造器是一种特殊的方法,用于构造并初始化对象。
    举个例子,笔就是一个类。笔有各种属性,每个具体的笔的这些属性可能不同,比如笔的颜色、笔的种类等,这就是它的实例域。然后所有笔有一些共同的用途,比如写字,这就是它的方法。
    我们在使用"笔"这个类的时候,可以经过以下步骤:
  1. 构造对象:即构造一支具体的笔出来,凭借构造器,我们可以实现这一步,同时还可以设定某些具体的属性。比如构造一支红色的钢笔,将它保存在一个名为redPen的对象变量中。
  2. 使用方法:例如笔有一个write()方法,我们就可以调用redPen.write()来用这只笔写字了。
    面向对象程序设计就是将数据和数据的操作封装在了一起,先有了数据,再对数据进行操作。
  • 对象
    对象有三个主要的特性:
  1. 行为:即可以对对象施加哪些操作
  2. 状态:即施加方法时,对象如何响应
  3. 标识:即如何辨别具有相同行为与状态的不同对象
    仍然以笔为例,要运用这个对象,我们就要知道笔能够有哪些操作?当我们对笔调用写这一方法时,它应该给出什么样的反馈?我们构造了两支笔,他们都有同样的写操作,那么应该怎样区分它们?
    这些问题在程序设计的过程中都应该要考虑清楚。
2.顺序表
  • 概念
    顾名思义,顺序表就是采用顺序存储的表结构
  • 实现
    顺序表中,元素在内存中的存放位置是连续的,因此,只要知道了第一个元素的存储位置、每个元素所占内存的大小、元素的个数( 即顺序表表长 )就可以存储一个顺序表。
  1. 实例域
    由上文的叙述可以得知一个顺序表应该有的属性。一个给定类型的数组可以包含单个元素所占内存大小,第一个元素的存储位置这两个信息。一个整型变量可以存储元素个数信息。因此,顺序表就有一个整型变量和一个数组实例域。
  2. 构造器
    构造器用于生成并初始化对象,一个类中可以有多个构造器。对于此处的顺序表我们给出了两种构造器,第一种构造器生成一个空表,第二个构造器接收一个数组参数,根据这个参数生成对应的顺序表。
  3. 方法
    表结构可以有很多操作,比如查找、插入、删除等等。今天主要设计toString方法和reset方法,前者用于将顺序表转换为对应的字符串形式,后者将顺序表重置为空表。
3.程序

程序代码如下:

package datastructure.list;

public class SequentialList {
	
	
	public static final int MAX_LENGTH = 10;
	
	
	int length;
	
	
	int[ ] data;
	
	
	public SequentialList( ) {
		length = 0;
		data = new int[ MAX_LENGTH ];
	} // Of the first constructor
	
	
	public SequentialList( int[ ] paraArray ) {
		length = paraArray.length;
		data = new int[ MAX_LENGTH ];
		
		// Copy data.
		for( int i = 0; i < length; i++ ) {
			data[ i ] = paraArray[ i ];
		} // Of for i
	} // Of the second constructor
	
	
	public String toString( ) {
		
		if( length == 0 ) {
			return "empty";
		} // Of if
		
		String resultString = "";
		
		for( int i = 0; i < length - 1; i++ ) {
			resultString += data[ i ] + ", ";
		} // Of for i
		
		resultString += data[ length - 1 ];
		
		return resultString;
	} // Of toString
	
	
	public void reset( ) {
		length = 0;
	} // Of reset
	
	
	public static void main( String args[ ] ) {
		int[ ] tempArray = { 1, 4, 6, 9 };
		SequentialList tempFirstList = new SequentialList( tempArray );
		System.out.println("Initialized, the list is: " + tempFirstList.toString( ) );
		System.out.println("Again, the list is: " + tempFirstList);
		
		tempFirstList.reset( );
		System.out.println("After reset, the list is: " + tempFirstList);
	} // Of main
} // Of class SequentialList

执行结果如下:

4.其他
  1. 程序中设置了一个MAX_LENGTH,用于标记能构造的最大顺序表表长,但为了简化程序,构造器中没有检查它
  2. 将实例域定义为final,则要确保构造器执行后,这个域被设置一个值。通常final 修饰符用于基本类型域,或不可变类的域。
  3. 在 println 里面使用 tempFirstList 里, 由于是用另一个字符串与其相加, 系统会自动调用 tempFirstList.toString()。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/821145.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号