N
- Node parameter typeV
- Value parameter type@Beta public abstract class AbstractValueGraph<N,V> extends java.lang.Object implements ValueGraph<N,V>
ValueGraph
. It is recommended to extend
this class rather than implement ValueGraph
directly.
The methods implemented in this class should not be overridden unless the subclass admits a more efficient implementation.
Constructor and Description |
---|
AbstractValueGraph() |
Modifier and Type | Method and Description |
---|---|
Graph<N> |
asGraph()
Returns a live view of this graph as a
Graph . |
int |
degree(N node)
Returns the count of
node 's incident edges, counting self-loops twice (equivalently,
the number of times an edge touches node ). |
protected long |
edgeCount()
Returns the number of edges in this graph; used to calculate the size of
edges() . |
java.util.Set<EndpointPair<N>> |
edges()
|
java.util.Optional<V> |
edgeValue(EndpointPair<N> endpoints)
Returns the value of the edge that connects
endpoints (in the order, if any, specified
by endpoints ), if one is present; otherwise, returns Optional.empty() . |
java.util.Optional<V> |
edgeValue(N nodeU,
N nodeV)
Returns the value of the edge that connects
nodeU to nodeV (in the order, if
any, specified by endpoints ), if one is present; otherwise, returns Optional.empty() . |
boolean |
equals(@Nullable java.lang.Object obj)
Returns
true iff object is a ValueGraph that has the same elements and
the same structural relationships as those in this graph. |
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 . |
int |
hashCode()
Returns the hash code for this graph.
|
ElementOrder<N> |
incidentEdgeOrder()
Returns an
ElementOrder that specifies the order of iteration for the elements of
edges() , adjacentNodes(Object) , predecessors(Object) , successors(Object) and incidentEdges(Object) . |
java.util.Set<EndpointPair<N>> |
incidentEdges(N node)
Returns the edges in this graph whose endpoints include
node . |
int |
inDegree(N node)
Returns the count of
node 's incoming edges (equal to predecessors(node).size() )
in a directed graph. |
protected boolean |
isOrderingCompatible(EndpointPair<?> endpoints) |
int |
outDegree(N node)
Returns the count of
node 's outgoing edges (equal to successors(node).size() )
in a directed graph. |
java.lang.String |
toString()
Returns a string representation of this graph.
|
protected void |
validateEndpoints(EndpointPair<?> endpoints)
Throws
IllegalArgumentException if the ordering of endpoints is not compatible
with the directionality of this graph. |
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
adjacentNodes, allowsSelfLoops, degree, edges, edgeValueOrDefault, edgeValueOrDefault, hasEdgeConnecting, hasEdgeConnecting, incidentEdgeOrder, incidentEdges, inDegree, isDirected, nodeOrder, nodes, outDegree, predecessors, successors
public AbstractValueGraph()
public Graph<N> asGraph()
ValueGraph
Graph
. The resulting Graph
will have an
edge connecting node A to node B if this ValueGraph
has an edge connecting A to B.asGraph
in interface ValueGraph<N,V>
public java.util.Optional<V> edgeValue(N nodeU, N nodeV)
ValueGraph
nodeU
to nodeV
(in the order, if
any, specified by endpoints
), if one is present; otherwise, returns Optional.empty()
.edgeValue
in interface ValueGraph<N,V>
public java.util.Optional<V> edgeValue(EndpointPair<N> endpoints)
ValueGraph
endpoints
(in the order, if any, specified
by endpoints
), if one is present; otherwise, returns Optional.empty()
.
If this graph is directed, the endpoints must be ordered.
edgeValue
in interface ValueGraph<N,V>
public final boolean equals(@Nullable java.lang.Object obj)
ValueGraph
true
iff object
is a ValueGraph
that has the same elements and
the same structural relationships as those in this graph.
Thus, two value graphs A and B are equal if all of the following are true:
directedness
.
node sets
.
edge sets
.
value
of a given edge is the same in both A and B.
Graph properties besides directedness
do not affect equality.
For example, two graphs may be considered equal even if one allows self-loops and the other
doesn't. Additionally, the order in which nodes or edges are added to the graph, and the order
in which they are iterated over, are irrelevant.
A reference implementation of this is provided by equals(Object)
.
equals
in interface ValueGraph<N,V>
equals
in class java.lang.Object
public final int hashCode()
ValueGraph
edges
to the associated edge value
.
A reference implementation of this is provided by hashCode()
.
hashCode
in interface ValueGraph<N,V>
hashCode
in class java.lang.Object
public java.lang.String toString()
toString
in class java.lang.Object
protected long edgeCount()
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.public java.util.Set<EndpointPair<N>> edges()
public ElementOrder<N> incidentEdgeOrder()
ElementOrder
that specifies the order of iteration for the elements of
edges()
, adjacentNodes(Object)
, predecessors(Object)
, successors(Object)
and incidentEdges(Object)
.public java.util.Set<EndpointPair<N>> incidentEdges(N node)
node
.
This is equal to the union of incoming and outgoing edges.
public int degree(N node)
node
's incident edges, counting self-loops twice (equivalently,
the number of times an edge touches node
).
For directed graphs, this is equal to inDegree(node) + outDegree(node)
.
For undirected graphs, this is equal to incidentEdges(node).size()
+ (number of
self-loops incident to node
).
If the count is greater than Integer.MAX_VALUE
, returns Integer.MAX_VALUE
.
public int inDegree(N node)
node
's incoming edges (equal to predecessors(node).size()
)
in a directed graph. In an undirected graph, returns the degree(Object)
.
If the count is greater than Integer.MAX_VALUE
, returns Integer.MAX_VALUE
.
public int outDegree(N node)
node
's outgoing edges (equal to successors(node).size()
)
in a directed graph. In an undirected graph, returns the degree(Object)
.
If the count is greater than Integer.MAX_VALUE
, returns Integer.MAX_VALUE
.
public boolean hasEdgeConnecting(N nodeU, N nodeV)
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)
.
public boolean hasEdgeConnecting(EndpointPair<N> endpoints)
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)
.
protected final void validateEndpoints(EndpointPair<?> endpoints)
IllegalArgumentException
if the ordering of endpoints
is not compatible
with the directionality of this graph.protected final boolean isOrderingCompatible(EndpointPair<?> endpoints)
Copyright © 2010–2021 JBoss by Red Hat. All rights reserved.