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. MySQL行锁深入研究

    原文:http://blog.csdn.net/minipeach/article/details/5325161/ 做项目时由于业务逻辑的需要,必须对数据表的一行或多行加入行锁,举个最简单的例子,图 ...

  2. [python]爬虫学习(一)

    要学习Python爬虫,我们要学习的共有以下几点(python2): Python基础知识 Python中urllib和urllib2库的用法 Python正则表达式 Python爬虫框架Scrapy ...

  3. Centos7中systemctl命令详解

    Linux Systemctl是一个系统管理守护进程.工具和库的集合,用于取代System V.service和chkconfig命令,初始进程主要负责控制systemd系统和服务管理器.通过Syst ...

  4. 升级Windows 10 正式版过程记录与经验

    升级Windows 10 正式版过程记录与经验 [多图预警]共50张,约4.6MB 系统概要: 预装Windows 8.1中文版 64位 C盘Users 文件夹已经挪动到D盘,并在原处建立了符号链接. ...

  5. shell中export理解误区

    一直以来,以为shell脚本中经过export后的变量会影响到执行这个shell的终端中的环境变量.环境变量这个概念不是shell所独有的,而是linux里面进程所拥有的,shell解释器运行起来就是 ...

  6. EF高级应用

    UpdateSourceTrigger     NumberTextbox         参考 Finally! Entity Framework working in fully disconne ...

  7. PhotoShop算法原理解析系列 - 风格化---》查找边缘。

    之所以不写系列文章一.系列文章二这样的标题,是因为我不知道我能坚持多久.我知道我对事情的表达能力和语言的丰富性方面的天赋不高.而一段代码需要我去用心的把他从基本原理-->初步实现-->优化 ...

  8. 科学计算器(JAVA实现)

    前记: 大二学 Java 的时候写的,现在贴上来,只为留念. 再翻代码,自己看着都头疼.一重重的 if 嵌套,当时写得费劲,现在看着更费劲. 代码思想: 代码的大致思想是这样: 首先定义一个算式字符串 ...

  9. Linux用户管理.md

    用户与组的概念 linux多用户,多任务的特性 Linux是一个真实的.完整的多用户多任务操作系统,多用户多任务就是可以在系统上建立多个用户,而多个用户可以在同一时间内登录同一个系统执行各自不同的任务 ...

  10. java certificate 工具 portecle.sourceforge.net

    https://sourceforge.net/projects/portecle/?source=directory 当需要处理java证书的时候这个是个好工具.省得敲命令了.