当前位置:  技术问答>java相关

测试一下这里是否有OO高手, 这是我贴在买买提bbs的一个小挑战的第一步, 没人能够给出令人满意的回答.

    来源: 互联网  发布时间:2015-05-23

    本文导语:  public interface Array {     public Object get(int i);     public void set(int i, Object val);     public int getLength(); } public class ArrayUtil {     public void sort(Array arr, Comparator c){......} } Q1. do yo know how can you make th...

public interface Array
{
    public Object get(int i);
    public void set(int i, Object val);
    public int getLength();
}

public class ArrayUtil
{
    public void sort(Array arr, Comparator c){......}
}

Q1. do yo know how can you make the ArrayUtil.sort method work for any array like objects like String[], int[], java.util.Vector etc?
Q2. I'd like to implement array slicing, rotating, reversing, concatenating in CONSTANT TIME, how do you implement it? (after these operations, the Array instances should still point to the same underlying array container)
换句话说, arr.set(1, obj) 应该和 arr.slice(1, 2).set(0, obj) 有一样作用.

Array Slicing:
        slice array [1, 2, 3, 4] with slice(1, 2) will end up with [2, 3]

Array rotating:
       rotate array [1, 2, 3, 4] with rotate(2) will end up with [3,4,1,2]

Array reversing:
       reverse array [1, 2, 3, 4] will end up with [4, 3, 2, 1]

Array concatenating:
       cocat array [1, 2] with [3, 4] will end up with [1, 2, 3, 4]

别告诉我"用jdk ".

|
I guess nobody answered Q2 because your hint already said it all. You want to use a level of indirection on array indices, and it's easy to do so by introducing new objects implementing the Array interface and perform the required indirection on array indices in get/set/length methods. For example, ReversedArray will have a get method returning element at getLength()-i-1 instead of i, the same goes for set method. When reverse is called, just return a new ReverseArray object with the same underlying java array.

BTW, I wonder why you used reflection in your JArray2Array class, if you let adapt method take an Object[] instead of Object, you won't need to use reflection (which is slow) and you can avoid the problem of people passing in an object which is not an array.

|
public class ReversedArray
    extends AbstractFunctionalArray
{
    //~ Methods ...............................................................

    protected int getIndex( int i )

    {
        return this.getLength() - i;
    }
}

|
What do you need String[] to implement Comparator, it doesn't make sense, Comparators compare things, they are not containers. In order to pass String[] to your ArrayUtil instance method, you could build a new class StringArray which implements Array interface and takes String[] as constructor argument. Now since your "Array" doesn't have type information, you can probably get away with an ArrayArray which takes Object[] in constructor.
Anyway, what is the point of this exercise? Collection framework's List does what your Array do.

|
呵呵,都怪我,闹得大家都不高兴,罚自己做做“体力活”,还请多多指教
public class AbstractFunctionalArray
    implements Array
{
    //~ Instance/static variables .............................................

    protected Array _arr;

    //~ Constructors ..........................................................

    public AbstractFunctionalArray( Array arr )
    {
        this._arr = arr;
    }

    //~ Methods ...............................................................

    public int getLength()
    {
        return _arr.getLength();
    }

    public Object get( int i )
    {
        return _arr.get( getIndex( i ) );
    }

    public void set( int i, Object val )
    {
        _arr.set( getIndex( i ), val );
    }

    protected int getIndex( int i )
    {
        return i;
    }
}

|
呵呵,ajoo老哥在这儿呢。
针对四个操作函数写四个包装类,每个类的接口与array相同,但内部组织方式则与相应的操作相关,如何?

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 有认真测试过ldd3最后一章tiny_tty.c,并能回答下面问题的高手吗?
  • 软件重构与软件测试
  • 求一个压力测试工具,用来测试dns服务器的处理能力.
  • 测试Python内部类型及type和isinstance用法区别
  • 请教:在solaris下测试C++程序是否存在内存泄漏等问题用什么测试工具?
  • Windows下php 5.3.5和apache2安装配置及测试
  • 在线等。。。使用压力测试工具进行测试有时出现httpd子进程CPU占用率100%,且压力撤除后无法恢复
  • PHP编程语言介绍及安装测试方法
  • 在windows中的VMware装了个linux,主板有两个串口,能做windows和linux的串口通信测试么,怎么测试这两个串口在linux是有效
  • C++ 迷你单元测试和性能测试库 cc-mini-test
  • 在本地测试通过的EJB,如何把测试程序放在另外一台机器上,也可以测试通过。
  • JBuilder2005单元测试体验之测试配置
  • 测试过程管理平台 TestLink
  • C++单元测试框架 CppUnit
  • portlet单元测试框架 portletUnit
  • linux系统测试程序
  • 负载测试工具 Ripplet
  • 有哪些开源Linux C测试工具
  • Android自动化测试框架 Cafe
  • 自动化测试管理平台 TestMP
  • 网络测试利器 netperf
  • 自动测试工具 QTP


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3