cc150 java_面试题目——《CC150》Java

f1f0bce8bab55fd38bba2f8eea6a7f81.png

c676d87eb0740ce78d52af1a0b2f076a.png

2892cc0db712ef622e2e39bc0d6ca271.png

9bc1e56ac8b4e5c8cf31097bcc59c7c1.png

3aa10bb783ad6e9df1226007e5c920cd.png

34c2d09608a3a0f7979c56f385cb1b4f.png

edb750e3f876c3a3717d87d7ab43800e.png

725a77e4583a8a54440371002130d403.png

1049448b43b8615900c04b196c923282.png

package cc150.java;

import java.util.Iterator;

public class CircularArray {

public static void main(String[] args) {//实现一个类似数组的数据结构,可以进行高效的旋转

// TODO 自动生成的方法存根

CircularArray ca_out = new CircularArray();

circularArray ca = ca_out.new circularArray(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 implements Iterable{//环形数组

private T[] items;//无法创建泛型的数组,所以必须将数组转型为List或者将items定义为List

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 iterator() {

// TODO 自动生成的方法存根

return new circularArrayIterator(this);

}

private class circularArrayIterator implements Iterator{

private int _current = -1;

private TI[] _items;

public circularArrayIterator(circularArray array){//传递的是circularArray本身

_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("...");

}

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值