持有对象(容器)——适配器(反向迭代器使用)

应用:

当你有一个接口并需要另一个接口时,编写适配器可以解决。

我希望在默认的前向迭代器的基础上,添加产生反向迭代器的能力,因此不能使用覆盖,而是添加了一个能够产生Iterable对象的方法,该对象可以用于foreach语句。)

代码编写:

a:类继承class ReversibleArrayList<T> extends ArrayList<T>,再写返回类型为iterator<Object>()方法,之后有提示

class ReversibleArrayList<T> extends ArrayList<T>{  // 反向迭代器
	private static final long serialVersionUID = 1L;
	public ReversibleArrayList(Collection<T> c){ super(c); }
	public Iterable<T> reversed(){
		return new Iterable<T>() {
			public Iterator<T> iterator() {
				return new Iterator<T>() {			
					int current = size() - 1;
					public boolean hasNext() {return current > -1;}
					public T next() {return get(current--);}
					public void remove() {
						throw new UnsupportedOperationException();
					}
				};
			}
		};
	}
}
测试:

public class AdapterMethodIdiom {	
	public static void main(String[] args) {
		ReversibleArrayList<String> ral = new ReversibleArrayList<String>(
				Arrays.asList("To be or not to be".split(" ")));			
				for (String string : ral)   //放在foreach语句中,将得到(默认的)向前迭代器
					System.out.print(string+" ");
				
				System.out.println();
				for (String string : ral.reversed()) {
					System.out.print(string+" ");
				}		
	 }
}
打印:



b:编写类继承class IterableClass implements Iterable<Object>会直接添加返回类型为Iterator<Object>的方法,return Iterator<Object>(){hasNext(),next(),remove()}

public class IterableClass implements Iterable<Object>{
	protected String[] words = ("And that is how " + "we know the Earth to be banana-shaped.").split(" ");
	public Iterator<Object> iterator() {		
		return new Iterator<Object>() {
			private int index = 0;
			public boolean hasNext() {return index < words.length;}
			public String next() {return words[index++];}
			public void remove() {throw new UnsupportedOperationException();}
			
		};
	}
}
应用:

public class MultiIterableClass extends IterableClass{	
	public Iterable<Object> reversed(){
		return new Iterable<Object>() {			
			public Iterator<Object> iterator() {				
				return new Iterator<Object>() {
					int current = words.length-1;
					public void remove() {throw new UnsupportedOperationException();}
					
					public String next() {return words[current--];}
					
					public boolean hasNext() { return current > -1;}
				};
			}
		};
	}
	public Iterable<String> randomized(){
		return new Iterable<String>() {		
			public Iterator<String> iterator() {
				List<String> shuffled = new ArrayList<String>(Arrays.asList(words));
				Collections.shuffle(shuffled);//打乱数组
				return shuffled.iterator();
			}
		};
	}
	public static void main(String[] args) {
		MultiIterableClass mic = new MultiIterableClass();
		for (Object string : mic.reversed()) 
			System.out.print(string.toString()+" ");
		System.out.println();
		for (String string : mic.randomized())
			System.out.print(string+" ");
			
		System.out.println();
		for (Object object : mic) {
			System.out.print(object.toString()+" ");
		}
	}
}
控制台打印




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值