gpt4 book ai didi

java - 使用Java实现字典

转载 作者:搜寻专家 更新时间:2023-10-31 19:58:30 25 4
gpt4 key购买 nike

任务字典 ADT

  • 字典 ADT 为可搜索的关键元素条目集合建模
  • 允许多个项目具有相同的键
  • 应用:词定义对

字典式 ADT 方法:

  • find(k):如果字典中有一个键为 k 的条目,则返回它,否则,返回 null
  • findAll(k): 返回所有具有键 k 的条目的迭代器
  • insert(k, o):插入并返回条目(k, o)
  • remove(e):从字典中删除条目e
  • size(), isEmpty()

操作输出字典

insert(5,A) (5,A) (5,A)
insert(7,B) (7,B) (5,A),(7,B)
insert(2,C) (2,C) (5,A),(7,B),(2,C)
insert(8,D) (8,D) (5,A),(7,B),(2,C),(8,D)
insert(2,E) (2,E) (5,A),(7,B),(2,C),(8,D),(2,E)
find(7) (7,B) (5,A),(7,B),(2,C),(8,D),(2,E)
find(4) null (5,A),(7,B),(2,C),(8,D),(2,E)
find(2) (2,C) (5,A),(7,B),(2,C),(8,D),(2,E)
findAll(2) (2,C),(2,E) (5,A),(7,B),(2,C),(8,D),(2,E)
size() 5 (5,A),(7,B),(2,C),(8,D),(2,E)
remove(find(5)) (5,A) (7,B),(2,C),(8,D),(2,E)
find(5) null (7,B),(2,C),(8,D),(2,E)

详细解释:无

最佳答案

Java 已经有了一个集合,它几乎拥有你所需要的一切。您只需要添加一种方法。对于初学者,探索 java.util.Collection... 类。然后扩展一个以添加所需的方法。如果处理得当,这只是几十行的问题。

对我来说,最简单的方法是使用 Map<Object, Set<Object>> .棘手的事情是返回一个迭代器。

编辑:

另一方面,我会选择这个 Entry.java :

public class Entry<K, V> {

K key;
V value;

public Entry(K key, V value) {
this.key = key;
this.value = value;
}

public K key() {
return key;
}

public V value() {
return value;
}

@Override
public String toString() {
return "(" + key + ", " + value + ")";
}

// Methods needed to correctly behave in containers like sets, hashmaps:
// (I generated those automatically in NetBeans)
@Override
public boolean equals(Object obj) {
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
final Entry<K, V> other = (Entry<K, V>) obj;
if (this.key != other.key && (this.key == null || !this.key.equals(other.key)))
return false;
if (this.value != other.value && (this.value == null || !this.value.equals(other.value)))
return false;
return true;
}

@Override
public int hashCode() {
int hash = 7;
hash = 23 * hash + (this.key != null ? this.key.hashCode() : 0);
hash = 23 * hash + (this.value != null ? this.value.hashCode() : 0);
return hash;
}
}

...还有这个:Dictionary.java

import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

public class Dictionary<K, V> {

private List<Entry<K, V>> set;

public Dictionary() {
this.set = new LinkedList<Entry<K, V>>();
}

/**
* find(k): if the dictionary has an entry with key k, returns it, else, returns null
*/
public Entry<K, V> find(K key) {
// for all entries in set...
// check if key mathches
// - if it does than return it

// else
return null;
}

/**
* findAll(k): returns an iterator of all entries with key k
* @return
*/
public Iterator<Entry<K, V>> findAll(K key) {
// make a temporary list
// for all entries in set...
// check if key matches
// - if it does than add it to temporary list

// return the temporary list iterator (list.iterator())
return null;
}

/**
* insert(k, o): inserts and returns the entry (k, o)
*/
public Entry<K, V> insert(K key, V value) {
// obvious
return null;
}

/**
* remove(e): remove the entry e from the dictionary
*/
public Entry<K, V> remove(Entry<K, V> entry) {
return entry;
}

public int size() {
return set.size();
}

public boolean isEmpty() {
return size() == 0;
}

@Override
public String toString() {
return set.toString();
}
}

...,还有这个 DictionaryTest.java :

public class DictionaryTest {

static Dictionary<Integer, Character> dict = new Dictionary<Integer, Character>();

public static void main(String[] args) {

/*

Test cases:

1. insert(5,A) (5,A) (5,A)
2. insert(7,B) (7,B) (5,A),(7,B)
3. insert(2,C) (2,C) (5,A),(7,B),(2,C)
4. insert(8,D) (8,D) (5,A),(7,B),(2,C),(8,D)
5. insert(2,E) (2,E) (5,A),(7,B),(2,C),(8,D),(2,E)
6. find(7) (7,B) (5,A),(7,B),(2,C),(8,D),(2,E)
7. find(4) null (5,A),(7,B),(2,C),(8,D),(2,E)
8. find(2) (2,C) (5,A),(7,B),(2,C),(8,D),(2,E)
9. findAll(2) (2,C),(2,E) (5,A),(7,B),(2,C),(8,D),(2,E)
10. size() 5 (5,A),(7,B),(2,C),(8,D),(2,E)
11. remove(find(5)) (5,A) (7,B),(2,C),(8,D),(2,E)
12. find(5) null (7,B),(2,C),(8,D),(2,E)
*/

// Test case #1:
test("insert(5,A)", dict.insert(5, 'A'));

// Test case #2:
test("insert(7,B)", dict.insert(7, 'B'));

// Test case #3:
test("insert(2,C)", dict.insert(2, 'C'));

// ...

// Test case #6:
test("find(7))", dict.find(7));

// implement all and check them during implementation


}

private static void test(String string, Object result) {
System.out.print(string + " ");
System.out.print(result);
System.out.println(" " + dict);
}
}

关于java - 使用Java实现字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4579683/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com