【问题标题】:Retrieving elements from a Dynamic array从动态数组中检索元素
【发布时间】:2015-03-23 16:33:07
【问题描述】:

前言

我正在尝试实现一个 Dictionary 数据结构,它将 Pairs(一个对象)存储在一个动态数组中。

数组以大小 [10] 开始。当数组已满时,用户每次尝试将另一个 Pair 添加到 Dictionary 时;动态数组将数组的长度增加 5。

有3种相关方法。

put: 将一对添加到动态数组中

dynamicArray:满时增加数组的大小

get:从数组中检索特定元素

问题

当调用 dynamicArray 以使用许多元素进行初始化时,这些元素似乎没有正确存储。当尝试get 元素时,它会捕获一个 NoSuchElementException,这表明这些值最初没有被存储。 这是相关代码,谢谢。

public Token get (String key) throws NoSuchElementException,
                                         NullPointerException{
        boolean found=false; //Represents if pair is found
        Token token = null;
        if (key ==null)
            throw new NullPointerException ();

        for (int i=array.length-1; i>=0; i--){
            if ( array[i]!=null && array[i].getKey() == key){
                found=true;
              return (array[i]).getToken(); 


            }   
        }
        if (found!=true)
            throw new NoSuchElementException ();
            return  token;

        }

private void dynamicArray(){
        if (array[array.length-1]!=null){
            Pair[]replace = new Pair[array.length+5];
            System.arraycopy(array, 0, replace, 0, array.length);
            array=replace;
        }
    }

public void put  (String key, Token value) throws NullPointerException{


        if (key == null || value == null)
            throw new NullPointerException ();

        dynamicArray();
        Pair p1 = new Pair (key,value);

        for (int i=0; i<array.length; i++){
            if (array[i]== null ){
                dynamicArray();
                array[i]=p1;

                break;

            }   
            }   
    }

测试用例

@Test()
    public void testPutDyncamicArray() {
        System.out.println("test: testPutDyncamicArray");
        Dictionary dict = new Dictionary();
        for (int i = 0; i < 1000; i++) {
            dict.put("X" + i, new Token(i));
        }
        for (int i = 0; i < 1000; i++) {

            Assert.assertEquals(new Token(i), dict.get("X" + i));
        }
    }

【问题讨论】:

  • 你应该在这里使用Maparray 是什么?
  • 我们仅限于使用动态数组。 array 表示 Pairs 的数组。一对由 (String,Token) 组成
  • 另请注意,将==String 一起使用是错误的,这可能是这里的问题。

标签: java arrays oop dynamic


【解决方案1】:

由于您的密钥是String,因此您需要使用equals 方法来检查密钥是否相等:

if (array[i] != null && array[i].getKey().equals(key)){
    return array[i].getToken(); 
}

【讨论】:

    【解决方案2】:

    您会发现 HashMap(或只是一个 Map)会以更少的努力完成您想做的事情。

    【讨论】:

    • 这个问题听起来像是homework 问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 2012-03-28
    • 2017-02-22
    相关资源
    最近更新 更多