Class AbstractNetwork<N,E>
- java.lang.Object
-
- com.google.common.graph.AbstractNetwork<N,E>
-
- Type Parameters:
N
- Node parameter typeE
- Edge parameter type
- All Implemented Interfaces:
Network<N,E>
,PredecessorsFunction<N>
,SuccessorsFunction<N>
- Direct Known Subclasses:
ImmutableNetwork
@Beta public abstract class AbstractNetwork<N,E> extends Object implements Network<N,E>
This class provides a skeletal implementation ofNetwork
. It is recommended to extend this class rather than implementNetwork
directly.The methods implemented in this class should not be overridden unless the subclass admits a more efficient implementation.
- Since:
- 20.0
- Author:
- James Sexton
-
-
Constructor Summary
Constructors Constructor Description AbstractNetwork()
Constructor for use by subclasses.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description Set<E>
adjacentEdges(E edge)
Returns a live view of the edges which have anincident node
in common withedge
.Graph<N>
asGraph()
Returns a live view of this network as aGraph
.int
degree(N node)
Returns the count ofnode
'sincident edges
, counting self-loops twice (equivalently, the number of times an edge touchesnode
).E
edgeConnectingOrNull(EndpointPair<N> endpoints)
Returns the single edge that directly connectsendpoints
(in the order, if any, specified byendpoints
), if one is present, ornull
if no such edge exists.E
edgeConnectingOrNull(N nodeU, N nodeV)
Returns the single edge that directly connectsnodeU
tonodeV
, if one is present, ornull
if no such edge exists.protected <T> Set<T>
edgeInvalidatableSet(Set<T> set, E edge)
Returns aSet
whose methods throwIllegalStateException
when the given edge is not present in this network.Set<E>
edgesConnecting(EndpointPair<N> endpoints)
Returns a live view of the set of edges that each directly connectendpoints
(in the order, if any, specified byendpoints
).Set<E>
edgesConnecting(N nodeU, N nodeV)
Returns a live view of the set of edges that each directly connectnodeU
tonodeV
.boolean
equals(Object obj)
Returnstrue
iffobject
is aNetwork
that has the same elements and the same structural relationships as those in this network.boolean
hasEdgeConnecting(EndpointPair<N> endpoints)
Returns true if there is an edge that directly connectsendpoints
(in the order, if any, specified byendpoints
).boolean
hasEdgeConnecting(N nodeU, N nodeV)
Returns true if there is an edge that directly connectsnodeU
tonodeV
.int
hashCode()
Returns the hash code for this network.int
inDegree(N node)
Returns the count ofnode
'sincoming edges
in a directed network.protected boolean
isOrderingCompatible(EndpointPair<?> endpoints)
protected <T> Set<T>
nodeInvalidatableSet(Set<T> set, N node)
Returns aSet
whose methods throwIllegalStateException
when the given node is not present in this network.protected <T> Set<T>
nodePairInvalidatableSet(Set<T> set, N nodeU, N nodeV)
Returns aSet
whose methods throwIllegalStateException
when either of the given nodes is not present in this network.int
outDegree(N node)
Returns the count ofnode
'soutgoing edges
in a directed network.String
toString()
Returns a string representation of this network.protected void
validateEndpoints(EndpointPair<?> endpoints)
Throws an IllegalArgumentException if the ordering ofendpoints
is not compatible with the directionality of this graph.-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface com.google.common.graph.Network
adjacentNodes, allowsParallelEdges, allowsSelfLoops, edgeOrder, edges, incidentEdges, incidentNodes, inEdges, isDirected, nodeOrder, nodes, outEdges, predecessors, successors
-
-
-
-
Constructor Detail
-
AbstractNetwork
public AbstractNetwork()
Constructor for use by subclasses.
-
-
Method Detail
-
asGraph
public Graph<N> asGraph()
Description copied from interface:Network
Returns a live view of this network as aGraph
. The resultingGraph
will have an edge connecting node A to node B if thisNetwork
has an edge connecting A to B.If this network
allows parallel edges
, parallel edges will be treated as if collapsed into a single edge. For example, theNetwork.degree(Object)
of a node in theGraph
view may be less than the degree of the same node in thisNetwork
.
-
degree
public int degree(N node)
Description copied from interface:Network
Returns the count ofnode
'sincident edges
, counting self-loops twice (equivalently, the number of times an edge touchesnode
).For directed networks, this is equal to
inDegree(node) + outDegree(node)
.For undirected networks, this is equal to
incidentEdges(node).size()
+ (number of self-loops incident tonode
).If the count is greater than
Integer.MAX_VALUE
, returnsInteger.MAX_VALUE
.
-
inDegree
public int inDegree(N node)
Description copied from interface:Network
Returns the count ofnode
'sincoming edges
in a directed network. In an undirected network, returns theNetwork.degree(Object)
.If the count is greater than
Integer.MAX_VALUE
, returnsInteger.MAX_VALUE
.
-
outDegree
public int outDegree(N node)
Description copied from interface:Network
Returns the count ofnode
'soutgoing edges
in a directed network. In an undirected network, returns theNetwork.degree(Object)
.If the count is greater than
Integer.MAX_VALUE
, returnsInteger.MAX_VALUE
.
-
adjacentEdges
public Set<E> adjacentEdges(E edge)
Description copied from interface:Network
Returns a live view of the edges which have anincident node
in common withedge
. An edge is not considered adjacent to itself.If
edge
is removed from the network after this method is called, theSet
view
returned by this method will be invalidated, and will throwIllegalStateException
if it is accessed in any way, with the following exceptions:view.equals(view)
evaluates totrue
(but any otherequals()
expression involvingview
will throw)hashCode()
does not throw- if
edge
is re-added to the network after having been removed,view
's behavior is undefined
- Specified by:
adjacentEdges
in interfaceNetwork<N,E>
-
edgesConnecting
public Set<E> edgesConnecting(N nodeU, N nodeV)
Description copied from interface:Network
Returns a live view of the set of edges that each directly connectnodeU
tonodeV
.In an undirected network, this is equal to
edgesConnecting(nodeV, nodeU)
.The resulting set of edges will be parallel (i.e. have equal
Network.incidentNodes(Object)
). If this network does notallow parallel edges
, the resulting set will contain at most one edge (equivalent toedgeConnecting(nodeU, nodeV).asSet()
).If either
nodeU
ornodeV
are removed from the network after this method is called, theSet
view
returned by this method will be invalidated, and will throwIllegalStateException
if it is accessed in any way, with the following exceptions:view.equals(view)
evaluates totrue
(but any otherequals()
expression involvingview
will throw)hashCode()
does not throw- if
nodeU
ornodeV
are re-added to the network after having been removed,view
's behavior is undefined
- Specified by:
edgesConnecting
in interfaceNetwork<N,E>
-
edgesConnecting
public Set<E> edgesConnecting(EndpointPair<N> endpoints)
Description copied from interface:Network
Returns a live view of the set of edges that each directly connectendpoints
(in the order, if any, specified byendpoints
).The resulting set of edges will be parallel (i.e. have equal
Network.incidentNodes(Object)
). If this network does notallow parallel edges
, the resulting set will contain at most one edge (equivalent toedgeConnecting(endpoints).asSet()
).If this network is directed,
endpoints
must be ordered.If either element of
endpoints
is removed from the network after this method is called, theSet
view
returned by this method will be invalidated, and will throwIllegalStateException
if it is accessed in any way, with the following exceptions:view.equals(view)
evaluates totrue
(but any otherequals()
expression involvingview
will throw)hashCode()
does not throw- if either endpoint is re-added to the network after having been removed,
view
's behavior is undefined
- Specified by:
edgesConnecting
in interfaceNetwork<N,E>
-
edgeConnectingOrNull
@CheckForNull public E edgeConnectingOrNull(N nodeU, N nodeV)
Description copied from interface:Network
Returns the single edge that directly connectsnodeU
tonodeV
, if one is present, ornull
if no such edge exists.In an undirected network, this is equal to
edgeConnectingOrNull(nodeV, nodeU)
.- Specified by:
edgeConnectingOrNull
in interfaceNetwork<N,E>
-
edgeConnectingOrNull
@CheckForNull public E edgeConnectingOrNull(EndpointPair<N> endpoints)
Description copied from interface:Network
Returns the single edge that directly connectsendpoints
(in the order, if any, specified byendpoints
), if one is present, ornull
if no such edge exists.If this network is directed, the endpoints must be ordered.
- Specified by:
edgeConnectingOrNull
in interfaceNetwork<N,E>
-
hasEdgeConnecting
public boolean hasEdgeConnecting(N nodeU, N nodeV)
Description copied from interface:Network
Returns true if there is an edge that directly connectsnodeU
tonodeV
. This is equivalent tonodes().contains(nodeU) && successors(nodeU).contains(nodeV)
, and toedgeConnectingOrNull(nodeU, nodeV) != null
.In an undirected network, this is equal to
hasEdgeConnecting(nodeV, nodeU)
.- Specified by:
hasEdgeConnecting
in interfaceNetwork<N,E>
-
hasEdgeConnecting
public boolean hasEdgeConnecting(EndpointPair<N> endpoints)
Description copied from interface:Network
Returns true if there is an edge that directly connectsendpoints
(in the order, if any, specified byendpoints
).Unlike the other
EndpointPair
-accepting methods, this method does not throw if the endpoints are unordered and the network is directed; it simply returnsfalse
. This is for consistency withGraph.hasEdgeConnecting(EndpointPair)
andValueGraph.hasEdgeConnecting(EndpointPair)
.- Specified by:
hasEdgeConnecting
in interfaceNetwork<N,E>
-
validateEndpoints
protected final void validateEndpoints(EndpointPair<?> endpoints)
Throws an IllegalArgumentException if the ordering ofendpoints
is not compatible with the directionality of this graph.
-
isOrderingCompatible
protected final boolean isOrderingCompatible(EndpointPair<?> endpoints)
-
equals
public final boolean equals(@CheckForNull Object obj)
Description copied from interface:Network
Returnstrue
iffobject
is aNetwork
that has the same elements and the same structural relationships as those in this network.Thus, two networks A and B are equal if all of the following are true:
- A and B have equal
directedness
. - A and B have equal
node sets
. - A and B have equal
edge sets
. - Every edge in A and B connects the same nodes in the same direction (if any).
Network properties besides
directedness
do not affect equality. For example, two networks may be considered equal even if one allows parallel edges and the other doesn't. Additionally, the order in which nodes or edges are added to the network, and the order in which they are iterated over, are irrelevant.A reference implementation of this is provided by
equals(Object)
. - A and B have equal
-
hashCode
public final int hashCode()
Description copied from interface:Network
Returns the hash code for this network. The hash code of a network is defined as the hash code of a map from each of itsedges
to theirincident nodes
.A reference implementation of this is provided by
hashCode()
.
-
edgeInvalidatableSet
protected final <T> Set<T> edgeInvalidatableSet(Set<T> set, E edge)
Returns aSet
whose methods throwIllegalStateException
when the given edge is not present in this network.- Since:
- 33.1.0
-
nodeInvalidatableSet
protected final <T> Set<T> nodeInvalidatableSet(Set<T> set, N node)
Returns aSet
whose methods throwIllegalStateException
when the given node is not present in this network.- Since:
- 33.1.0
-
nodePairInvalidatableSet
protected final <T> Set<T> nodePairInvalidatableSet(Set<T> set, N nodeU, N nodeV)
Returns aSet
whose methods throwIllegalStateException
when either of the given nodes is not present in this network.- Since:
- 33.1.0
-
-