VertexA
VertexB
VertexC
VertexD
// adds a directed edge from vertex1 -> vertex2
addEdgeBetweenVertices(String vertex1, String vertex2);
您可以使用ArrayList的ArrayList,您的想法非常完美,您可以将
String
与唯一的Integer
ID映射,然后直接将相应的顶点添加到列表中。
邻接矩阵
的问题是需要知道顶点的最大极限。邻接矩阵
不内存效率
并且对于动态操作也不可行。因此,这里出现了邻接列表
。我编写了一个小代码来演示邻接列表的创建,以及如何添加新的顶点
或和边
。
import java.util.ArrayList;
import java.util.HashMap;
public class AdjacencyListDemo {
static int availableId=0; //Represents the available id for mapping
static HashMap<String,Integer> mapping; //To store the String-Integer mapping for Vertexes
static ArrayList<ArrayList<Integer>> adjacencyList;
public static void main(String args[])
{
adjacencyList = new ArrayList<ArrayList<Integer>>();
mapping = new HashMap<String,Integer>();
String sampleVertexes[] = {"Vertex1","Vertex2","Vertex3","Vertex4"};
for(String vertex : sampleVertexes)
addNewVertex(vertex);
addEdgeBetween("Vertex1","Vertex2");
addEdgeBetween("Vertex3","Vertex4");
System.out.println("Old List: ");
printList();
//Add New Vertex if required
addNewVertex("Vertex5");
addEdgeBetween("Vertex5","Vertex1");
addEdgeBetween("Vertex2","Vertex1");
addEdgeBetween("Vertex3","Vertex2");
addEdgeBetween("Vertex5","Vertex2");
System.out.println("\n\nNew List: ");
printList();
}
private static void printList()
{
for(String vertex : mapping.keySet()) {
int index = mapping.get(vertex);
System.out.println(vertex+" ID: "+index+" List: "+adjacencyList.get(index));
}
}
private static void addEdgeBetween(String vertex1, String vertex2) {
//get both indexes
int index1 = mapping.get(vertex1);
int index2 = mapping.get(vertex2);
//add index2 into the arraylist of index1
adjacencyList.get(index1).add(index2);
}
private static void addNewVertex(String vertex) {
if(!mapping.containsKey(vertex))
{
//assign available ID
mapping.put(vertex,availableId);
availableId++; //make increment in available id
adjacencyList.add(new ArrayList<Integer>()); //Add an Empty ArrayList
}
}
}
输出:
Old List:
Vertex2 ID: 1 List: []
Vertex3 ID: 2 List: [3]
Vertex1 ID: 0 List: [1]
Vertex4 ID: 3 List: []
New List:
Vertex2 ID: 1 List: [0]
Vertex3 ID: 2 List: [3, 1]
Vertex1 ID: 0 List: [1]
Vertex4 ID: 3 List: []
Vertex5 ID: 4 List: [0, 1]
我有一个Firebase数据结构,如下所示: 现在,我想删除节点xy\u unknownid。但我只知道“givenname”:userx。 我尝试使用以下内容删除节点: 但这不起作用,因为“无效的Firebase数据库路径:$成员。Firebase数据库路径不能包含“.”、“\;”、“$”、“[”或“]”” 所以我的问题是,如何删除节点:“xy\u unknownid”只知道:“userx”。
我正在尝试使用(不平衡的)BST实现树集。我还希望为树中的所有节点维护一个有序的双链接列表。 链表是在2个前哨节点的帮助下维护的,一个头节点和一个尾节点。因此,要遍历链表,您需要从头节点开始,检查它的属性。 我有一个递归的方法,就像这样; 其中和设置在链表中将插入新节点的位置的边界。 我在维护节点的和属性时遇到了问题。
我们的第二种表示树的方法使用节点和引用。在这种情况下,我们将定义一个具有根值属性的类,以及左和右子树。 由于这个表示更接近于面向对象的编程范例,我们将继续使用这个表示法用于本章的剩余部分。 使用节点和引用,我们认为树结构类似于 Figure 2 所示。 Figure 2 我们将从节点和引用方法的一个简单的类定义开始,如 Listing 4 所示。要记住这个表示重要的事情是 left 和 right
我无法在不了解根元素的情况下取消 XML 的编组。例如。 或 等等... 我想在类上映射解组结果,例如: 我总是需要修复< code>@XmlRootElement。< br >我搜索了如何在运行时设置@XmlRootElement,但没有成功。知道吗? 我在Spring Batch上下文中,我可以使用我选择的解组器。 注意:我不能使用这里显示的< code>@XmlElementDecl或< c
问题内容: 我想使用XStream将对象序列化为这种形式的XML。 节点( 文本 )的值是序列化对象以及 att 属性上的字段。无需为此对象编写转换器就可以吗? 谢谢! 问题答案: 写一个转换器,应该类似于代码片段 在使用XStream时,注册转换器
我是 D3 的新手。因此,我正在尝试呈现一个图形,其中两个或多个孩子可以具有相同的父级。我想知道如何使链接再次定向到同一节点?我有断开的链接.. 任何帮助都是巨大的。 这是我的代码...