面试题目——《CC150》Java

时间:2021-02-13 19:47:15

面试题目——《CC150》Java

面试题目——《CC150》Java

面试题目——《CC150》Java

面试题目——《CC150》Java

面试题目——《CC150》Java

面试题目——《CC150》Java

面试题目——《CC150》Java

面试题目——《CC150》Java

面试题目——《CC150》Java

package cc150.java;

import java.util.Iterator;

public class CircularArray {

	public static void main(String[] args) {		//实现一个类似数组的数据结构,可以进行高效的旋转
// TODO 自动生成的方法存根
CircularArray ca_out = new CircularArray();
circularArray<Integer> ca = ca_out.new circularArray<Integer>(5);
ca.set(0, 0);
ca.set(1, 1);
ca.set(2, 2);
ca.set(3, 3);
ca.set(4, 4);
ca.rotate(5); //数组向右移位,也就是数组的head改变,到末尾之后会返回前
System.out.println(ca.get(4)); } public class circularArray<T> implements Iterable<T>{ //环形数组
private T[] items; //无法创建泛型的数组,所以必须将数组转型为List<T>或者将items定义为List<T>
private int head=0; //指向数组开头的元素 public circularArray(int size){ //构造函数
items = (T[]) new Object[size];
} private int convert(int index){ //转换正确的数组下标,index加上当前head
if(index < 0) //负数都会是0
index += items.length;
return (head+index) % items.length;
} public void rotate(int shiftRight){ //轮换,改变数组的head下标
head = convert(shiftRight);
} public T get(int i){ //取得数组中某个下标的元素
if(i<0 || i>=items.length)
throw new java.lang.IndexOutOfBoundsException("...");
return items[convert(i)];
} public void set(int i,T item){ //赋值
items[convert(i)] = item;
} //实现迭代器接口
@Override
public Iterator<T> iterator() {
// TODO 自动生成的方法存根
return new circularArrayIterator<T>(this);
} private class circularArrayIterator<TI> implements Iterator<TI>{
private int _current = -1;
private TI[] _items; public circularArrayIterator(circularArray<TI> array){ //传递的是circularArray<TI>本身
_items = array.items; //_items和item相等
} @Override
public boolean hasNext() {
// TODO 自动生成的方法存根
return _current < items.length-1;
} @Override
public TI next() {
// TODO 自动生成的方法存根
_current++;
TI item = (TI) _items[convert(_current)];
return item;
} @Override
public void remove(){
throw new UnsupportedOperationException("...");
}
} } }