N
- Node parameter typeV
- Value parameter typeclass StandardValueGraph<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 |
(package private) long |
edgeCount |
private boolean |
isDirected |
(package private) MapIteratorCache<N,GraphConnections<N,V>> |
nodeConnections |
private ElementOrder<N> |
nodeOrder |
Constructor and Description |
---|
StandardValueGraph(AbstractGraphBuilder<? super N> builder)
Constructs a graph with the properties specified in
builder . |
StandardValueGraph(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).
|
private GraphConnections<N,V> |
checkedConnections(N node) |
(package private) 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(EndpointPair<N> endpoints,
V defaultValue)
Returns the value of the edge that connects
endpoints (in the order, if any, specified
by endpoints ), if one is present; otherwise, returns defaultValue . |
V |
edgeValueOrDefault(N nodeU,
N nodeV,
V defaultValue)
Returns the value of the edge that connects
nodeU to nodeV , if one is present;
otherwise, returns defaultValue . |
private V |
edgeValueOrDefaultInternal(N nodeU,
N nodeV,
V defaultValue) |
boolean |
hasEdgeConnecting(EndpointPair<N> endpoints)
Returns true if there is an edge that directly connects
endpoints (in the order, if
any, specified by endpoints ). |
boolean |
hasEdgeConnecting(N nodeU,
N nodeV)
Returns true if there is an edge that directly connects
nodeU to nodeV . |
private boolean |
hasEdgeConnectingInternal(N nodeU,
N nodeV) |
java.util.Set<EndpointPair<N>> |
incidentEdges(N node)
Returns the edges in this graph whose endpoints include
node . |
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, edgeValue, equals, hashCode, toString
degree, edges, incidentEdgeOrder, inDegree, isOrderingCompatible, outDegree, validateEndpoints
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
degree, edges, incidentEdgeOrder, inDegree, outDegree
private final boolean isDirected
private final boolean allowsSelfLoops
private final ElementOrder<N> nodeOrder
final MapIteratorCache<N,GraphConnections<N,V>> nodeConnections
long edgeCount
StandardValueGraph(AbstractGraphBuilder<? super N> builder)
builder
.StandardValueGraph(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.
This is equal to the union of ValueGraph.predecessors(Object)
and ValueGraph.successors(Object)
.
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 java.util.Set<EndpointPair<N>> incidentEdges(N node)
BaseGraph
node
.
This is equal to the union of incoming and outgoing edges.
incidentEdges
in interface BaseGraph<N>
incidentEdges
in interface ValueGraph<N,V>
incidentEdges
in class AbstractBaseGraph<N>
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 boolean hasEdgeConnecting(EndpointPair<N> endpoints)
BaseGraph
endpoints
(in the order, if
any, specified by endpoints
). This is equivalent to edges().contains(endpoints)
.
Unlike the other EndpointPair
-accepting methods, this method does not throw if the
endpoints are unordered; it simply returns false. This is for consistency with the behavior of
Collection#contains(Object)
(which does not generally throw if the object cannot be
present in the collection), and the desire to have this method's behavior be compatible with
edges().contains(endpoints)
.
hasEdgeConnecting
in interface BaseGraph<N>
hasEdgeConnecting
in interface ValueGraph<N,V>
hasEdgeConnecting
in class AbstractBaseGraph<N>
@CheckForNull public V edgeValueOrDefault(N nodeU, N nodeV, @CheckForNull 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)
.
@CheckForNull public V edgeValueOrDefault(EndpointPair<N> endpoints, @CheckForNull V defaultValue)
ValueGraph
endpoints
(in the order, if any, specified
by endpoints
), if one is present; otherwise, returns defaultValue
.
If this graph is directed, the endpoints must be ordered.
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>
private final GraphConnections<N,V> checkedConnections(N node)
final boolean containsNode(@CheckForNull N node)