N
- Node parameter typeV
- Value parameter typeclass ConfigurableValueGraph<N,V> extends AbstractValueGraph<N,V>
ValueGraph
that supports the options supplied by AbstractGraphBuilder
.
This class maintains a map of nodes to GraphConnections
.
Collection-returning accessors return unmodifiable views: the view returned will reflect changes to the graph (if the graph is mutable) but may not be modified by the user.
The time complexity of all collection-returning accessors is O(1), since views are returned.
Modifier and Type | Field and Description |
---|---|
private boolean |
allowsSelfLoops |
protected long |
edgeCount |
private boolean |
isDirected |
protected MapIteratorCache<N,GraphConnections<N,V>> |
nodeConnections |
private ElementOrder<N> |
nodeOrder |
Constructor and Description |
---|
ConfigurableValueGraph(AbstractGraphBuilder<? super N> builder)
Constructs a graph with the properties specified in
builder . |
ConfigurableValueGraph(AbstractGraphBuilder<? super N> builder,
java.util.Map<N,GraphConnections<N,V>> nodeConnections,
long edgeCount)
Constructs a graph with the properties specified in
builder , initialized with the given
node map. |
Modifier and Type | Method and Description |
---|---|
java.util.Set<N> |
adjacentNodes(N node)
Returns the nodes which have an incident edge in common with
node in this graph. |
boolean |
allowsSelfLoops()
Returns true if this graph allows self-loops (edges that connect a node to itself).
|
protected GraphConnections<N,V> |
checkedConnections(N node) |
protected boolean |
containsNode(N node) |
protected long |
edgeCount()
Returns the number of edges in this graph; used to calculate the size of
AbstractBaseGraph.edges() . |
V |
edgeValueOrDefault(N nodeU,
N nodeV,
V defaultValue)
Returns the value of the edge connecting
nodeU to nodeV , if one is present;
otherwise, returns defaultValue . |
boolean |
hasEdgeConnecting(N nodeU,
N nodeV)
Returns true if there is an edge directly connecting
nodeU to nodeV . |
boolean |
isDirected()
Returns true if the edges in this graph are directed.
|
ElementOrder<N> |
nodeOrder()
Returns the order of iteration for the elements of
ValueGraph.nodes() . |
java.util.Set<N> |
nodes()
Returns all nodes in this graph, in the order specified by
ValueGraph.nodeOrder() . |
java.util.Set<N> |
predecessors(N node)
Returns all nodes in this graph adjacent to
node which can be reached by traversing
node 's incoming edges against the direction (if any) of the edge. |
java.util.Set<N> |
successors(N node)
Returns all nodes in this graph adjacent to
node which can be reached by traversing
node 's outgoing edges in the direction (if any) of the edge. |
asGraph, edgeValue, equals, hashCode, toString
degree, edges, incidentEdges, inDegree, outDegree
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
degree, edges, incidentEdges, inDegree, outDegree
private final boolean isDirected
private final boolean allowsSelfLoops
private final ElementOrder<N> nodeOrder
protected final MapIteratorCache<N,GraphConnections<N,V>> nodeConnections
protected long edgeCount
ConfigurableValueGraph(AbstractGraphBuilder<? super N> builder)
builder
.ConfigurableValueGraph(AbstractGraphBuilder<? super N> builder, java.util.Map<N,GraphConnections<N,V>> nodeConnections, long edgeCount)
builder
, initialized with the given
node map.public java.util.Set<N> nodes()
ValueGraph
ValueGraph.nodeOrder()
.public boolean isDirected()
ValueGraph
source node
to a target node
, while
undirected edges connect a pair of nodes to each other.public boolean allowsSelfLoops()
ValueGraph
IllegalArgumentException
.public ElementOrder<N> nodeOrder()
ValueGraph
ValueGraph.nodes()
.public java.util.Set<N> adjacentNodes(N node)
ValueGraph
node
in this graph.public java.util.Set<N> predecessors(N node)
ValueGraph
node
which can be reached by traversing
node
's incoming edges against the direction (if any) of the edge.
In an undirected graph, this is equivalent to ValueGraph.adjacentNodes(Object)
.
public java.util.Set<N> successors(N node)
ValueGraph
node
which can be reached by traversing
node
's outgoing edges in the direction (if any) of the edge.
In an undirected graph, this is equivalent to ValueGraph.adjacentNodes(Object)
.
This is not the same as "all nodes reachable from node
by following outgoing
edges". For that functionality, see Graphs.reachableNodes(Graph, Object)
.
public boolean hasEdgeConnecting(N nodeU, N nodeV)
BaseGraph
nodeU
to nodeV
. This is
equivalent to nodes().contains(nodeU) && successors(nodeU).contains(nodeV)
.
In an undirected graph, this is equal to hasEdgeConnecting(nodeV, nodeU)
.
hasEdgeConnecting
in interface BaseGraph<N>
hasEdgeConnecting
in interface ValueGraph<N,V>
hasEdgeConnecting
in class AbstractBaseGraph<N>
public V edgeValueOrDefault(N nodeU, N nodeV, V defaultValue)
ValueGraph
nodeU
to nodeV
, if one is present;
otherwise, returns defaultValue
.
In an undirected graph, this is equal to edgeValueOrDefault(nodeV, nodeU,
defaultValue)
.
protected long edgeCount()
AbstractBaseGraph
AbstractBaseGraph.edges()
. This
implementation requires O(|N|) time. Classes extending this one may manually keep track of the
number of edges as the graph is updated, and override this method for better performance.edgeCount
in class AbstractBaseGraph<N>
protected final GraphConnections<N,V> checkedConnections(N node)
protected final boolean containsNode(N node)