gpt4 book ai didi

java - Java 中关联数组结构的最佳实践(与 PHP 相比)

转载 作者:行者123 更新时间:2023-11-29 03:30:16 25 4
gpt4 key购买 nike

我有 PHP 背景,在 PHP 中,借助关联数组(伪代码)可以实现以下结构:

test["1"]["2"] = true;
test["2"]["4"] = true;

现在,我想在 Java 中做同样的事情,因为在 PHP 中我可以轻松地执行以下操作:

if(test[var1][var2] == true) {
...
}

我喜欢这种结构,因为您可以轻松定义一些约束(即配置内容)。重要的是我需要层次结构,这就是我在 PHP 中使用二维数组的原因。

但是当我在 Java 中搜索相同的东西时,我没有找到任何可以像在 PHP 中一样容易实现的东西。有人说我应该在类的帮助下创建层次结构,有人说我应该处理枚举。这两种方式我都不喜欢,因为对于一些简单的定义来说,编程开销很大。

Java 中是否有一个简单的解决方案,只需几行代码即可实现,并且与上面的示例相同?最佳做法是什么?

最佳答案

嗯,你可以使用 map 中的 map 。

Map<String, Map<String, Boolean>> map = new HashMap<String, Map<String, Boolean>>();

但我会把这个映射隐藏在一个类后面,因为初始化并不简单。您还必须创建内部 map 。

你终于可以像这样使用它了

String var1 = "1", var2 = "2"
if (map.get(var1).get(var2))
{
/* Without proper initialization map.get(var1) could be null,
* so it's important that you create the innermap up on first use of 'var1':
* map.put(var1, new HashMap<String, Boolean>());
*
* and to associate var1 and var2 with a boolean value:
* map.get(var1).put(var2, true);
*/
}

甚至更好

MapHider instance = new MapHider();
if (instance.check(var1, var2))
{
}

这里是一个通用的方法和使用示例

/**
* AssociativeArray2D - Two dimensional associative array
*
* NOTE: Not thread-safe.
*
* @param <K1> type of first key
* @param <K2> type of second key
* @param <V> type of value
*/
public class AssociativeArray2D<K1, K2, V> {

/* standard value if no value is in the map */
private final V standard;
private Map<K1, Map<K2, V>> map = new HashMap<K1, Map<K2, V>>();

public AssociativeArray2D(V standard) {
this.standard = standard;
}

public static AssociativeArray2D<String, String, Boolean> getSSB() {
return new AssociativeArray2D<String, String, Boolean>(false);
}

public void add(K1 first, K2 second, V value) {
Map<K2, V> m = map.get(first);
if (m == null) {
m = new HashMap<K2, V>();
map.put(first, m);
}
m.put(second, value);
}

public V check(K1 first, K2 second) {
Map<K2, V> m = map.get(first);
if (m == null) {
m = new HashMap<K2, V>();
map.put(first, m);
m.put(second, standard);
}
return m.get(second);
}

public static void main(String[] args) {
AssociativeArray2D<String, String, Boolean> a = AssociativeArray2D.getSSB();

if (a.check("1", "2")) {
System.out.println("This, won't print!");
}

a.add("1", "2", true);

if (a.check("1", "2")) {
System.out.println("This, will print!");
}
}
}

输出

This, will print!

关于java - Java 中关联数组结构的最佳实践(与 PHP 相比),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18672500/

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