Java学习笔记——应用矢量和迭代器来实现类似链表的功能

Java中没有指针,但有些对象是实现指针的功能的。如迭代器和矢量来实现链表的指针的功能,并且可以实现从两个方向来实现相关的操作。这里实现的是将Person定义在同一个Java文件中,也可以public定义Person放在独立的java 文件中。具体实现代码如下:

import java.io.*;
import java.nio.*;
import java.util.*;

public class TryIterable {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO 自动生成方法存根
		Person aPerson = null;
		
		Vector<Person> filmCast = new Vector<Person>();
		/*Vector 可实现自动增长的对象数组。 
java.util.vector提供了向量类(vector)以实现类似动态数组的功能。在Java语言中没有指针的概念,但如果正确灵活地使用指针又确实可以大大提高程序的质量。比如在c,c++中所谓的“动态数组”一般都由指针来实现。为了弥补这个缺点,Java提供了丰富的类库来方便编程者使用,vector类便是其中之一。事实上,灵活使用数组也可以完成向量类的功能,但向量类中提供大量的方法大大方便了用户的使用。 
    创建了一个向量类的对象后,可以往其中随意插入不同类的对象,即不需顾及类型也不需预先选定向量的容量,并可以方便地进行查找。对于预先不知或者不愿预先定义数组大小,并且需要频繁地进行查找,插入,删除工作的情况。可以考虑使用向量类。 
*/
		while (true) {
			aPerson = readPerson();
			if (aPerson == null) {
				break;
			}
			filmCast.add(aPerson);
		}
		int count=filmCast.size();
		System.out.println("You added "+count+(count==1?" person":" people")+" to the cast:");
		ListIterator<Person> thisLot=filmCast.listIterator();
		/*列表迭代器,可以让编程者从任何方向进行访问,类似于队列,有一系列的函数来实现相应的操作*/
		while(thisLot.hasNext()){
			System.out.println(thisLot.next());
		}
		System.out.println("\nThe vector currently has room for "+(filmCast.capacity()-count)+" more people.");
		
	}
	static Person readPerson(){
		String firstName=null;
		String surname=null;
		System.out.println("\nEnter first name or ! to end:");
		try{
			firstName=keyboard.readLine().trim();//读取输入数据,无空格,读取名字
			if(firstName.charAt(0)=='!'){
				return null;//确定终止符
				
			}
			System.out.println("Enter surname:");
			surname=keyboard.readLine().trim();//读取姓氏
		}catch(IOException e){
			System.err.println("Error reading a name.");
			e.printStackTrace();
			System.exit(1);
		}
		return new Person(firstName,surname);//返回读取对象
		
	}
	static BufferedReader keyboard=new BufferedReader(new InputStreamReader(System.in));//建立输入读取
	

}
 class Person {//定义人的对象
	public Person(String firstName, String surname) {
		this.firstName = firstName;
		this.surname = surname;
	}

	@Override
	public String toString() {
		return firstName + " " + surname;
	}

	private String firstName;

	private String surname;
}
具体实现结果如下:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值