从动态数组中检索元素
Retrieving elements from a Dynamic array
前言
我正在尝试实现一个 Dictionary 数据结构,它在动态数组中存储 Pairs(一个对象)。
数组从大小 [10] 开始。每当用户尝试在数组已满时向 Dictionary 添加另一个 Pair;动态数组将数组的长度增加 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));
}
}
您会发现 HashMap(或只是一个 Map)可以轻松完成您想要的事情。
由于您的密钥是 String
,您需要使用 equals
方法来检查密钥是否相等:
if (array[i] != null && array[i].getKey().equals(key)){
return array[i].getToken();
}
前言
我正在尝试实现一个 Dictionary 数据结构,它在动态数组中存储 Pairs(一个对象)。
数组从大小 [10] 开始。每当用户尝试在数组已满时向 Dictionary 添加另一个 Pair;动态数组将数组的长度增加 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));
}
}
您会发现 HashMap(或只是一个 Map)可以轻松完成您想要的事情。
由于您的密钥是 String
,您需要使用 equals
方法来检查密钥是否相等:
if (array[i] != null && array[i].getKey().equals(key)){
return array[i].getToken();
}