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()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description Set<E>
adjacentEdges(E edge)
Returns 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
).Optional<E>
edgeConnecting(EndpointPair<N> endpoints)
Returns the single edge that directly connectsendpoints
(in the order, if any, specified byendpoints
), if one is present, orOptional.empty()
if no such edge exists.Optional<E>
edgeConnecting(N nodeU, N nodeV)
Returns the single edge that directly connectsnodeU
tonodeV
, if one is present, orOptional.empty()
if no such edge exists.@Nullable 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.@Nullable E
edgeConnectingOrNull(N nodeU, N nodeV)
Returns the single edge that directly connectsnodeU
tonodeV
, if one is present, ornull
if no such edge exists.Set<E>
edgesConnecting(EndpointPair<N> endpoints)
Returns the set of edges that each directly connectendpoints
(in the order, if any, specified byendpoints
).Set<E>
edgesConnecting(N nodeU, N nodeV)
Returns the set of edges that each directly connectnodeU
tonodeV
.boolean
equals(@Nullable Object obj)
Indicates whether some other object is "equal to" this one.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 a hash code value for the object.int
inDegree(N node)
Returns the count ofnode
'sincoming edges
in a directed network.protected boolean
isOrderingCompatible(EndpointPair<?> endpoints)
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()
-
-
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 the edges which have anincident node
in common withedge
. An edge is not considered adjacent to itself.- Specified by:
adjacentEdges
in interfaceNetwork<N,E>
-
edgesConnecting
public Set<E> edgesConnecting(N nodeU, N nodeV)
Description copied from interface:Network
Returns 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()
).- Specified by:
edgesConnecting
in interfaceNetwork<N,E>
-
edgesConnecting
public Set<E> edgesConnecting(EndpointPair<N> endpoints)
Description copied from interface:Network
Returns 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.- Specified by:
edgesConnecting
in interfaceNetwork<N,E>
-
edgeConnecting
public Optional<E> edgeConnecting(N nodeU, N nodeV)
Description copied from interface:Network
Returns the single edge that directly connectsnodeU
tonodeV
, if one is present, orOptional.empty()
if no such edge exists.In an undirected network, this is equal to
edgeConnecting(nodeV, nodeU)
.- Specified by:
edgeConnecting
in interfaceNetwork<N,E>
-
edgeConnecting
public Optional<E> edgeConnecting(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, orOptional.empty()
if no such edge exists.If this graph is directed, the endpoints must be ordered.
- Specified by:
edgeConnecting
in interfaceNetwork<N,E>
-
edgeConnectingOrNull
public @Nullable 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
public @Nullable 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 graph 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 graph, 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 graph 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(@Nullable Object obj)
Description copied from class:java.lang.Object
Indicates whether some other object is "equal to" this one.The
equals
method implements an equivalence relation on non-null object references:- It is reflexive: for any non-null reference value
x
,x.equals(x)
should returntrue
. - It is symmetric: for any non-null reference values
x
andy
,x.equals(y)
should returntrue
if and only ify.equals(x)
returnstrue
. - It is transitive: for any non-null reference values
x
,y
, andz
, ifx.equals(y)
returnstrue
andy.equals(z)
returnstrue
, thenx.equals(z)
should returntrue
. - It is consistent: for any non-null reference values
x
andy
, multiple invocations ofx.equals(y)
consistently returntrue
or consistently returnfalse
, provided no information used inequals
comparisons on the objects is modified. - For any non-null reference value
x
,x.equals(null)
should returnfalse
.
The
equals
method for classObject
implements the most discriminating possible equivalence relation on objects; that is, for any non-null reference valuesx
andy
, this method returnstrue
if and only ifx
andy
refer to the same object (x == y
has the valuetrue
).Note that it is generally necessary to override the
hashCode
method whenever this method is overridden, so as to maintain the general contract for thehashCode
method, which states that equal objects must have equal hash codes. - It is reflexive: for any non-null reference value
-
hashCode
public final int hashCode()
Description copied from class:java.lang.Object
Returns a hash code value for the object. This method is supported for the benefit of hash tables such as those provided byHashMap
.The general contract of
hashCode
is:- Whenever it is invoked on the same object more than once during
an execution of a Java application, the
hashCode
method must consistently return the same integer, provided no information used inequals
comparisons on the object is modified. This integer need not remain consistent from one execution of an application to another execution of the same application. - If two objects are equal according to the
equals(Object)
method, then calling thehashCode
method on each of the two objects must produce the same integer result. - It is not required that if two objects are unequal
according to the
Object.equals(java.lang.Object)
method, then calling thehashCode
method on each of the two objects must produce distinct integer results. However, the programmer should be aware that producing distinct integer results for unequal objects may improve the performance of hash tables.
As much as is reasonably practical, the hashCode method defined by class
Object
does return distinct integers for distinct objects. (The hashCode may or may not be implemented as some function of an object's memory address at some point in time.)- Specified by:
hashCode
in interfaceNetwork<N,E>
- Overrides:
hashCode
in classObject
- Returns:
- a hash code value for this object.
- See Also:
Object.equals(java.lang.Object)
,System.identityHashCode(java.lang.Object)
- Whenever it is invoked on the same object more than once during
an execution of a Java application, the
-
-