Interface GraphBuilder<V,E>
- Type Parameters:
V- the vertices typeE- the edges type
- All Known Subinterfaces:
IndexGraphBuilder,IntGraphBuilder
The builder is used to construct non-empty graphs. Differing from GraphFactory which create new empty
graphs, the builder is used to add vertices and edges before actually creating the graph. This capability is required
to create immutable graphs, but can also be used to build mutable graph and may gain a performance boost compared to
creating an empty graph and adding the same vertices and edges.
To create a new builder, use one of the static methods undirected(), directed() or
newInstance(boolean). For more options, create a new GraphFactory and use
GraphFactory.newBuilder(), or use GraphFactory.newBuilderCopyOf(Graph) to create a builder
initialized with an existing graph vertices and edges.
- Author:
- Barak Ugav
- See Also:
-
Method Summary
Modifier and TypeMethodDescriptiondefault EAdd a new edge to the built graph, using the edge builder.voidAdd a new edge to the built graph.voidAdd multiple edges to the built graph.addEdgesWeights(String key, Class<? super T> type) Add a new weights container associated with the edges of the built graph.addEdgesWeights(String key, Class<? super T> type, T defVal) Add a new weights container associated with the edges of the built graph with default value.default VAdd a new vertex to the built graph, using the vertex builder.voidAdd a new vertex to the built graph.voidaddVertices(Collection<? extends V> vertices) Add multiple vertices to the built graph.addVerticesWeights(String key, Class<? super T> type) Add a new weights container associated with the vertices of the built graph.addVerticesWeights(String key, Class<? super T> type, T defVal) Add a new weights container associated with the vertices of built graph with default value.build()Build a new immutable graph with the builder vertices and edges.Build a new mutable graph with the builder vertices and edges.voidclear()Clear the builder by removing all vertices and edges added to it.static <V,E> GraphBuilder <V, E> directed()Create a new builder that builds directed graphs.Get the edge builder of this builder.edges()Get the set of edges that were added to the graph.edgesWeights(String key) Get the edges weights of some key.Get the keys of all the associated edges weights.voidensureEdgeCapacity(int edgeCapacity) Hint the implementation to allocate space for at leastedgeCapacityedges.voidensureVertexCapacity(int vertexCapacity) Hint the implementation to allocate space for at leastvertexCapacityvertices.booleanCheck if the graph built by this builder is directed or undirected.static <V,E> GraphBuilder <V, E> Create a new builder initialized with an existing graph vertices and edges, without copying the weights.static <V,E> GraphBuilder <V, E> Create a new builder initialized with an existing graph vertices and edges, with/without copying the weights.static <V,E> GraphBuilder <V, E> newInstance(boolean directed) Create a new builder that builds un/directed graphs.static <V,E> GraphBuilder <V, E> Create a new builder that builds undirected graphs.Get the vertex builder of this builder.vertices()Get the set of vertices that were added to the graph.verticesWeights(String key) Get the vertices weights of some key.Get the keys of all the associated vertices weights.
-
Method Details
-
vertices
-
edges
-
addVertex
Add a new vertex to the built graph.A vertex can be any non null hashable object, namely it must implement the
Object.hashCode()andObject.equals(Object)methods. Duplicate vertices are not allowed.If there is a vertex builder, namely if
vertexBuilder()does not returnnull, the methodaddVertex()can be used, which uses the vertex builder to create the new vertex object instead of requiring the user to provide it.- Parameters:
vertex- new vertex- Throws:
IllegalArgumentException- ifvertexis already in the built graphNullPointerException- ifvertexisnull
-
addVertex
Add a new vertex to the built graph, using the vertex builder.Unlike
addVertex(Object)in which the vertex is provided by the user, this method uses the vertex builder obtained byvertexBuilder()to create the new vertex object and adds it to the graph.This method is equivalent to:
V vertex = vertexBuilder().build(vertices()); addVertex(vertex); return vertex;- Returns:
- the new vertex
- Throws:
UnsupportedOperationException- if the builder does not have a vertex builder, namely ifvertexBuilder()returnsnull
-
addVertices
Add multiple vertices to the built graph.A vertex can be any non null hashable object, namely it must implement the
Object.hashCode()andObject.equals(Object)methods. Duplicate vertices are not allowed.- Parameters:
vertices- new vertices- Throws:
IllegalArgumentException- ifverticescontains duplications or if any of the vertices is already in the built graphNullPointerException- ifverticesisnullor if any of the vertices isnull
-
addEdge
Add a new edge to the built graph.If the built graph does not support self or parallel edges and the added edge is such edge, an exception will not be thrown. The edges are validated only when the graph is built, and an exception will be thrown only then.
An edge can be any non null hashable object, namely it must implement the
Object.hashCode()andObject.equals(Object)methods. Duplicate edges are not allowed.If there is an edge builder, namely if
edgeBuilder()does not returnnull, the methodaddEdge(Object, Object)can be used, which uses the edge builder to create the new edge object instead of requiring the user to provide it.- Parameters:
source- a source vertextarget- a target vertexedge- a new edge identifier- Throws:
IllegalArgumentException- ifedgeis already in the built graphNullPointerException- ifedgeisnull, asnullidentifiers are not allowedNoSuchVertexException- ifsourceortargetare not vertices in the graph
-
addEdge
Add a new edge to the built graph, using the edge builder.Unlike
addEdge(Object, Object, Object)in which the edge (identifier) is provided by the user, this method uses the edge builder obtained byedgeBuilder()to create the new edge object and adds it to the graph.If the built graph does not support self or parallel edges and the added edge is such edge, an exception will not be thrown. The edges are validated only when the graph is built, and an exception will be thrown only then.
This method is equivalent to:
E edge = edgeBuilder().build(edges()); addEdge(source, target, edge); return edge;- Parameters:
source- a source vertextarget- a target vertex- Returns:
- the new edge
- Throws:
UnsupportedOperationException- if the builder does not have an edge builder, namely ifedgeBuilder()returnsnullNoSuchVertexException- ifsourceortargetare not valid vertices identifiers
-
addEdges
Add multiple edges to the built graph.The
EdgeSetpassed to this method contains both the edges themselves (the identifiers) and their endpoints (sources and targets), seeEdgeSet.iterator(),EdgeIter.source(),EdgeIter.target(). AnEdgeSetcan be obtained from one of the methods of aGraph, or usingEdgeSet.of(Set, Graph).An edge can be any non null hashable object, namely it must implement the
Object.hashCode()andObject.equals(Object)methods. Duplicate edges are not allowed.In the following snippet, a maximum cardinality matching is computed on a graph, and a new graph containing only the matching edges is created:
Graph<V, E> g = ...; Set<E> matching = MatchingAlgo.newInstance().computeMaximumMatching(g, null).edges(); GraphBuilder<V,E> matchingGraphBuilder = GraphBuilder.undirected(); matchingGraphBuilder.addVertices(g.vertices()); matchingGraphBuilder.addEdges(EdgeSet.of(matching, g)); Graph<V,E> matchingGraph = matchingGraphBuilder.build()- Parameters:
edges- the set of new edges, from which the edges identifiers as well as the endpoints (source and target) of each edge are accessible (seeEdgeSet.iterator(),EdgeIter.source(),EdgeIter.target()).- Throws:
IllegalArgumentException- ifedgescontains duplications, or if any of the edges is already in the graphNullPointerException- ifedgesisnullor if any of the edges isnullNoSuchVertexException- if any of the edges endpoint is not a vertex in the graph
-
ensureVertexCapacity
void ensureVertexCapacity(int vertexCapacity) Hint the implementation to allocate space for at leastvertexCapacityvertices.The implementation may ignore any calls to this function.
- Parameters:
vertexCapacity- the minimum number of vertices to allocate space for
-
ensureEdgeCapacity
void ensureEdgeCapacity(int edgeCapacity) Hint the implementation to allocate space for at leastedgeCapacityedges.The implementation may ignore any calls to this function.
- Parameters:
edgeCapacity- the minimum number of edges to allocate space for
-
verticesWeights
Get the vertices weights of some key.See
Weightsfor a complete documentation of the weights containers.- Type Parameters:
T- The weight data typeWeightsT- the weights container, used to avoid casts of containers of primitive types such asWeightsInt,WeightsDoubleect.- Parameters:
key- key of the weights- Returns:
- vertices weights of the key, or
nullif no container found with the specified key
-
addVerticesWeights
default <T,WeightsT extends Weights<V, WeightsT addVerticesWeightsT>> (String key, Class<? super T> type) Add a new weights container associated with the vertices of the built graph.See
Weightsfor a complete documentation of the weights containers.- Type Parameters:
T- The weight data typeWeightsT- the weights container, used to avoid casts of containers of primitive types such asWeightsInt,WeightsDoubleect.- Parameters:
key- key of the weights,nullis not allowedtype- the type of the weights, used for primitive types weights- Returns:
- a new weights container
- Throws:
NullPointerException- ifkeyisnullIllegalArgumentException- if a vertices weights container with the same key already exists in the graph
-
addVerticesWeights
<T,WeightsT extends Weights<V, WeightsT addVerticesWeightsT>> (String key, Class<? super T> type, T defVal) Add a new weights container associated with the vertices of built graph with default value.See
Weightsfor a complete documentation of the weights containers.- Type Parameters:
T- The weight data typeWeightsT- the weights container, used to avoid casts of containers of primitive types such asWeightsInt,WeightsDoubleect.- Parameters:
key- key of the weights,nullis not allowedtype- the type of the weights, used for primitive types weightsdefVal- default value use for the weights container- Returns:
- a new weights container
- Throws:
NullPointerException- ifkeyisnullIllegalArgumentException- if a vertices weights container with the same key already exists in the graph
-
verticesWeightsKeys
-
edgesWeights
Get the edges weights of some key.See
Weightsfor a complete documentation of the weights containers.- Type Parameters:
T- The weight data typeWeightsT- the weights container, used to avoid casts of containers of primitive types such asWeightsInt,WeightsDoubleect.- Parameters:
key- key of the weights- Returns:
- edges weights of the key, or
nullif no container found with the specified key
-
addEdgesWeights
default <T,WeightsT extends Weights<E, WeightsT addEdgesWeightsT>> (String key, Class<? super T> type) Add a new weights container associated with the edges of the built graph.See
Weightsfor a complete documentation of the weights containers.- Type Parameters:
T- The weight data typeWeightsT- the weights container, used to avoid casts of containers of primitive types such asWeightsInt,WeightsDoubleect.- Parameters:
key- key of the weights,nullis not allowedtype- the type of the weights, used for primitive types weights- Returns:
- a new weights container
- Throws:
NullPointerException- ifkeyisnullIllegalArgumentException- if a edges weights container with the same key already exists in the graph
-
addEdgesWeights
<T,WeightsT extends Weights<E, WeightsT addEdgesWeightsT>> (String key, Class<? super T> type, T defVal) Add a new weights container associated with the edges of the built graph with default value.See
Weightsfor a complete documentation of the weights containers.- Type Parameters:
T- The weight data typeWeightsT- the weights container, used to avoid casts of containers of primitive types such asWeightsInt,WeightsDoubleect.- Parameters:
key- key of the weights,nullis not allowedtype- the type of the weights, used for primitive types weightsdefVal- default value use for the weights container- Returns:
- a new weights container
- Throws:
NullPointerException- ifkeyisnullIllegalArgumentException- if a edges weights container with the same key already exists in the graph
-
edgesWeightsKeys
-
clear
void clear()Clear the builder by removing all vertices and edges added to it. -
vertexBuilder
Get the vertex builder of this builder.The vertex builder is used to create new vertices during the execution of
addVertex(), in which the vertex identifier is not provided by the user. No vertex builder necessarily exists, and this method may return anullvalue. In that case,addVertex()cannot be used, onlyaddVertex(Object).- Returns:
- the vertex builder, or
nullif the there is no vertex builder
-
edgeBuilder
Get the edge builder of this builder.The edge builder is used to create new edges during the execution of
addEdge(Object, Object), in which the edge identifier is not provided by the user. No edge builder necessarily exists, and this method may return anullvalue. In that case,addEdge(Object, Object)cannot be used, onlyaddEdge(Object, Object, Object).- Returns:
- the edge builder, or
nullif the there is no edge builder
-
isDirected
boolean isDirected()Check if the graph built by this builder is directed or undirected.- Returns:
trueif the graph built by this builder is directed,falseif it is undirected
-
build
Build a new immutable graph with the builder vertices and edges.Before the graph is built, the edges are validated. If the graph does not support self or parallel edges and such edges were added to the builder, an exception will be thrown.
- Returns:
- a new immutable graph with the vertices and edges that were added to the builder.
- Throws:
IllegalArgumentException- if the built graph does not support self or parallel edges and such edges were added to the builder
-
buildMutable
Build a new mutable graph with the builder vertices and edges.Before the graph is built, the edges are validated. If the graph does not support self or parallel edges and such edges were added to the builder, an exception will be thrown.
- Returns:
- a new mutable graph with the vertices and edges that were added to the builder.
- Throws:
IllegalArgumentException- if the built graph does not support self or parallel edges and such edges were added to the builder
-
undirected
Create a new builder that builds undirected graphs.The graphs built by this builder will have the same default capabilities as
GraphFactory, namely they will not support self edges and will support parallel edges. See the factory documentation for more information.For more options to instantiate a builder, create a new
GraphFactoryand use one of itsnewBuildermethods.- Type Parameters:
V- the vertices typeE- the edges type- Returns:
- a new empty builder for undirected graphs
-
directed
Create a new builder that builds directed graphs.The graphs built by this builder will have the same default capabilities as
GraphFactory, namely they will not support self edges and will support parallel edges. See the factory documentation for more information.For more options to instantiate a builder, create a new
GraphFactoryand use one of itsnewBuildermethods.- Type Parameters:
V- the vertices typeE- the edges type- Returns:
- a new empty builder for directed graphs
-
newInstance
Create a new builder that builds un/directed graphs.The graphs built by this builder will have the same default capabilities as
GraphFactory, namely they will not support self edges and will support parallel edges. See the factory documentation for more information.For more options to instantiate a builder, create a new
GraphFactoryand use one of itsnewBuildermethods.- Type Parameters:
V- the vertices typeE- the edges type- Parameters:
directed- iftrue, the new builder will build directed graphs, otherwise it will build undirected graphs- Returns:
- a new empty builder for un/directed graphs
-
newCopyOf
Create a new builder initialized with an existing graph vertices and edges, without copying the weights.If the given graph is directed, the new builder will build directed graphs, and similarly for undirected graphs.
For more options to instantiate a builder, create a new
GraphFactoryand use one of itsnewBuildermethods.- Type Parameters:
V- the vertices typeE- the edges type- Parameters:
g- a graph- Returns:
- a builder initialized with the given graph vertices and edges, without the original graph vertices/edges weights.
-
newCopyOf
static <V,E> GraphBuilder<V,E> newCopyOf(Graph<V, E> g, boolean copyVerticesWeights, boolean copyEdgesWeights) Create a new builder initialized with an existing graph vertices and edges, with/without copying the weights.If the given graph is directed, the new builder will build directed graphs, and similarly for undirected graphs.
For more options to instantiate a builder, create a new
GraphFactoryand use one of itsnewBuildermethods.- Type Parameters:
V- the vertices typeE- the edges type- Parameters:
g- a graphcopyVerticesWeights- iftrue, the weights of the vertices will be copied from the graph to the buildercopyEdgesWeights- iftrue, the weights of the edges will be copied from the graph to the builder- Returns:
- a builder initialized with the given graph vertices and edges, with/without the original graph vertices/edges weights.
-