java实体类中实现两表查询遍历_如何在java中一个接一个地遍历两个不同类型的通用列表?...

本文介绍如何在Java中创建一个通用的`ZipIterator`类,以遍历不同类型的列表。通过调整接口和实现,使得迭代器能够处理不同类型的数据,如整数和字符串。示例代码展示了如何将两个不同类型的列表(整数和字符串)合并并按顺序遍历。
摘要由CSDN通过智能技术生成

我想创建一个迭代器类,它允许我通过泛型类型的列表(例如lst1 integer,lst2 string)迭代一个项目。

为此我必须考虑以下给出的情况。

该接口是一个通用的迭代器。这部分代码不能修改。

interface Iterator {

E next ();

boolean hasNext();

}列表类也被定义如下。最重要的是,一个列表对象可以用方法getIterator()返回一个迭代器对象。这部分代码不能修改。

class List {

class ListNode {

T val;

ListNode next;

ListNode (T v) {

val = v; next = null;

}

}

ListNode head;

List (ListNode hd) { head = hd; }

List () { this(null); }

void prepend (T val) {

ListNode p = new ListNode(val);

p.next = head;

head = p;

}

//some other methods

class ListIterator implements Iterator {

ListNode pos;

ListIterator () {

pos = head;

}

public T next () {

T res = pos.val;

pos = pos.next;

return res;

}

public boolean hasNext () {

return pos != null;

}

}

Iterator getIterator () {

return this.new ListIterator();

}

}让我们假设这两个列表都具有相同的类型,现在它们也具有相同的长度。我试着用两个迭代器对象创建一个类,并使用迭代器对象的方法来实现接口迭代器。这部分代码是由我创建的,可以修改。

class ZipIterator implements Iterator

{

int counter;

Iterator first;

Iterator second;

ZipIterator (Iterator f, Iterator s)

{

first = f;

second = s;

counter = 0;

}

public T next ()

{

if (counter % 2 == 0)

{

counter++;

return first.next();

}

else

{

counter++;

return second.next();

}

}

public boolean hasNext ()

{

if (counter % 2 == 0)

return first.hasNext();

else

return second.hasNext();

}

}这适用于两个相同类型的列表。这里是我用于测试的代码和输出:

class IteratorUtils

{

public static void main (String[] args)

{

List lst1 = new List<>();

List lst2 = new List<>();

lst1.prepend(3);

lst1.prepend(2);

lst1.prepend(1);

lst2.prepend(8);

lst2.prepend(9);

lst2.prepend(10);

Iterator it1 = lst1.getIterator();

Iterator it2 = lst2.getIterator();

ZipIterator zit = new ZipIterator<>(it1, it2);

while (zit.hasNext())

{

System.out.println(zit.next());

}

}

}输出:

1

10

2

9

3

8现在我想以通用的方式实现ZipIterator,所以我可以使用两个不同类型的项目(例如整数和字符串)的列表。我知道我必须更改类ZipIterator,以便方法next()返回一个泛型类型,但我不知道如何。

这是我必须做的一项大学任务,教授留下了一条提示:“使用通配符:?扩展T,?超级T,?扩展对象”。但对于通配符,我只能指定继承方向的类型,对吗?这可能改变ZipIterator类的方式,因此它接受两个不同类型的迭代器对象?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值