这是我的问题。我有一个vertex
对象的hashmap
(将城市名称映射到相应的对象)。
我需要做一个图形来模拟这些城市之间的路线。
for (Edge e : edges) {
ArrayList<Vertex> list = adjList.get(e.v1);
if (list == null)
list = new ArrayList<>();
list.add(e.v2);
adjList.put(e.v1, list);
}
edges: ArrayList of edges having (v1,v2,weight) in each object
list : The adjacency list for the vertex v1.
adjList: HashMap which has all the lists index by the vertex.
因为我的vertex
对象每个顶点只创建一次,所以我不能在其中存储,因为在其中存储1个边长度将覆盖进入其中的所有其他边。
假设在顶点v1
和v2
之间只有一条边,您可以创建一个HashMap
来映射通过边连接的顶点。
HashMap<Pair<Vertex, Vertex>, Edge> vertexMap = new HashMap<>();
for (Edge e : edges) {
Pair<Vertex, Vertex> key = new Pair<>(e.v1, e.v2);
vertexMap.put(key, e);
}
这样,您就可以通过vertexmap.get(new pair
查找给定给顶点的边
pair
可以实现如下
class Pair<K, V> {
private final K first;
private final V second;
public Pair(K first, V second) {
this.first = first;
this.second = second;
}
public K getFirst() {
return first;
}
public V getSecond() {
return second;
}
@Override
public int hashCode() {
int hash = 7;
hash = 89 * hash + Objects.hashCode(this.first);
hash = 89 * hash + Objects.hashCode(this.second);
return hash;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final Pair<?, ?> other = (Pair<?, ?>) obj;
if (!Objects.equals(this.first, other.first)) {
return false;
}
if (!Objects.equals(this.second, other.second)) {
return false;
}
return true;
}
}
如果您的图是无向的,您也可以在循环中添加关系的逆:
for (Edge e : edges) {
Pair<Vertex, Vertex> keyInverted = new Pair<>(e.v2, e.v1);
vertexMap.put(keyInverted, e);
}
数据结构和算法是过去 50 年来最重要的发明之一,它们是软件工程师需要了解的基础工具。但是在我看来,这些话题的大部分书籍都过于理论,过于庞大,也是“自底向上”的
问题内容: 我的情况如下:我有一个数据表(少数字段,少于一百行),该数据表在程序中广泛使用。我还需要这些数据具有持久性,因此我将其另存为CSV并在启动时加载。我之所以选择不使用数据库,是因为每个选项(甚至是SQLite)对于我的卑微要求都是过高的(另外- 我希望能够以一种简单的方式离线编辑值,没有什么比记事本更简单的了)。 假设我的数据如下所示(在文件中用逗号分隔,没有标题,这只是一个示例): 笔
本节介绍MATLAB中的一些其他数据结构,包括: 多维数组 单元数组 字符与文本 结构体
问题内容: 我有一个,并向其中添加了一个数组。 假设我想知道是否包含一个不使用的数组,因为我将从另一个类调用它。因此,我在其中创建了一个新数组… …但是即使将其添加到列表中,它也会返回false ,并且包含与完全相同的数组。 有没有一种方法可以使用contains,这样我就可以检查是否其中的元素之一具有数组值? 问题答案: 数组只能与Arrays.equals()比较。 您可能需要ArrayLis
如何维护唯一数组的? 例如,如果我有以下数组:
我正在研究一个编码面试,发现了一个问题,从时间复杂性方面来说,它将从像这样的数据结构中受益匪浅,但它允许通过索引获取元素。类似地,允许插入的在保持自然秩序的同时也会起作用。Java中有这样的数据结构吗?