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

面试题目——《CC150》Java的更多相关文章

  1. java 面试题目(java高级架构)

    题目信息 java基础: 1. Java 基础 JDK 和 JRE 有什么区别?   Java中JDK和JRE的区别是什么?它们的作用分别是什么? == 和 equals 的区别是什么? 两个对象的 ...

  2. (转)喜马拉雅2018 Java面试题目

    背景:将网上的题目整理下. java基础 1:hashTable hashMap ConcurrentHashMap 的区别.数据结构.线程安全 2:equals和==区别, 重写equals一定要重 ...

  3. Java高概率面试题目—finally

    在Java面试中关于finally的面试题目出现的概率非常高,而且一旦面试官问起绝不会是蜻蜓点水,而是会向你发起层层递进地“连环问”,并且回答这系列问题常常需要代码的辅助,可谓考验基础的面试利题.究竟 ...

  4. java常见面试题目(一)

    在大四实习阶段,秋招的时候,面试了很多家公司,总结常见的java面试题目:(答案可以自己百度) 1.你所用oracle的版本号是多少? 2.tomcat修改8080端口号的配置文件是哪个? 3.myb ...

  5. 2020阿里Java面试题目大汇总,看看你离阿里还有多远,附答案!

    前言 首先说一下情况,我大概我是从去年12月份开始看书学习,到今年的6月份,一直学到看大家的面经基本上百分之90以上都会,我就在5月份开始投简历,边面试边补充基础知识等.也是有些辛苦.终于是在前不久拿 ...

  6. 2018年4月份,阿里最新的java程序员面试题目,仅供参考。

    目录 技术一面(23问) 技术二面(3大块) 性能优化(21点) 项目实战(34块) JAVA方向技术考察点(15点) JAVA开发技术面试中可能问到的问题(17问) 阿里技术面试1 1.Java I ...

  7. PHP面试题目搜集

    搜集这些题目是想在学习PHP方面知识有更感性的认识,单纯看书的话会很容易看后就忘记. 曾经看过数据结构.设计模式.HTTP等方面的书籍,但是基本看完后就是看完了,没有然后了,随着时间的推移,也就渐渐忘 ...

  8. JAVA面试精选【Java基础第一部分】

    这个系列面试题主要目的是帮助你拿轻松到offer,同时还能开个好价钱.只要能够搞明白这个系列的绝大多数题目,在面试过程中,你就能轻轻松松的把面试官给忽悠了.对于那些正打算找工作JAVA软件开发工作的童 ...

  9. Android面试题目及其答案

    转自:http://blog.csdn.net/wwj_748/article/details/8868640 Android面试题目及其答案 1.Android dvm的进程和Linux的进程, 应 ...

随机推荐

  1. Ubuntu上通过nginx部署Django笔记

    Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式.今天在Ubuntu上使用Nginx部署Django服务,虽然不是第一次搞这个了,但是发现还是跳进了好多坑,g ...

  2. Python简单练习

    #coding=UTF-8 a=10; b=2; c=a+b; print (c); score=90; if score>=80: print ("很好"); elif s ...

  3. docker-8 docker小技巧

    docker使用小技巧 杀死所有正在运行的容器 docker kill $(docker ps -a -q) 删除所有的已经停止的容器 docker rm $(docker ps -a -q) 删除所 ...

  4. Sublime Text 3

    Sublime Text 3 插件安装 安装 Package Control 按 Ctrl+` 或者,菜单 View > Show Console 打开命令窗口 import urllib.re ...

  5. Web报表工具FineReport中JavaScript的使用

    报表软件FineReport采用的是jQuery v1.9.2框架,jQuery是一个快速的,简洁的JavaScript库,能让用户更方便地处理HTML documents.events,实现动画效果 ...

  6. Android APP 两种用程序拨号的方式

    想在APP中添加一个拨号功能该怎样做呢?Android提供了两种方式,一种是ACTION_CALL方式直接拨打,另一种是ACTION_DIAL方式打开系统的拨号界面. 下面我们来做个小例子 首先需要在 ...

  7. 计算机网络-IP类型判断

    第一个类别为A类,最后一个类别为E类,前边三个类别(A类.B类和C类)被用来标识工作站.路由器.交换机以及其他设备,而最后两个类别(D类和E类)被保留做特殊用途. 一个IP地址由32个比特位构成,这就 ...

  8. MBR与GPT

    mrb用于win平台gpt主要用于mac(苹果),MBR分区表与GPT分区表的关系 与支持最大卷为2 TB(Terabytes)并且每个磁盘最多有4个主分区(或3个主分区,1个扩展分区和无限制的逻辑驱 ...

  9. jquery插件treetable使用

    下载后treetable插件后只需要保留jquery.treetable.css样式文件,jquery.treetable.theme.default.css皮肤文件和jquery.treetable ...

  10. web 前端常用组件【06】Upload 控件

    因为有万恶的IE存在,所以当Web项目初始化并进入开发阶段时. 如果是项目经理,需要知道客户将会用什么浏览器来访问系统. 明确知道限定浏览器的情况下,你才能从容的让手下的封装必要的前端组件. 本篇文章 ...