Package org.jgrapht.graph.specifics
Class UndirectedSpecifics<V,E>
- java.lang.Object
-
- org.jgrapht.graph.specifics.UndirectedSpecifics<V,E>
-
- Type Parameters:
V
- the graph vertex typeE
- the graph edge type
- All Implemented Interfaces:
java.io.Serializable
,Specifics<V,E>
- Direct Known Subclasses:
FastLookupUndirectedSpecifics
public class UndirectedSpecifics<V,E> extends java.lang.Object implements Specifics<V,E>, java.io.Serializable
Plain implementation of UndirectedSpecifics. This implementation requires the least amount of memory, at the expense of slow edge retrievals. Methods which depend on edge retrievals, e.g. getEdge(V u, V v), containsEdge(V u, V v), addEdge(V u, V v), etc may be relatively slow when the average degree of a vertex is high (dense graphs). For a fast implementation, useFastLookupUndirectedSpecifics
.- See Also:
- Serialized Form
-
-
Field Summary
Fields Modifier and Type Field Description protected AbstractBaseGraph<V,E>
abstractBaseGraph
protected EdgeSetFactory<V,E>
edgeSetFactory
private static java.lang.String
NOT_IN_UNDIRECTED_GRAPH
private static long
serialVersionUID
protected java.util.Map<V,UndirectedEdgeContainer<V,E>>
vertexMapUndirected
-
Constructor Summary
Constructors Constructor Description UndirectedSpecifics(AbstractBaseGraph<V,E> abstractBaseGraph)
Construct a new undirected specifics.UndirectedSpecifics(AbstractBaseGraph<V,E> abstractBaseGraph, java.util.Map<V,UndirectedEdgeContainer<V,E>> vertexMap)
Construct a new undirected specifics.UndirectedSpecifics(AbstractBaseGraph<V,E> abstractBaseGraph, java.util.Map<V,UndirectedEdgeContainer<V,E>> vertexMap, EdgeSetFactory<V,E> edgeSetFactory)
Construct a new undirected specifics.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addEdgeToTouchingVertices(E e)
Adds the specified edge to the edge containers of its source and target vertices.void
addVertex(V v)
Adds a vertex.int
degreeOf(V vertex)
Returns the degree of the specified vertex.java.util.Set<E>
edgesOf(V vertex)
Returns a set of all edges touching the specified vertex.java.util.Set<E>
getAllEdges(V sourceVertex, V targetVertex)
Returns a set of all edges connecting source vertex to target vertex if such vertices exist in this graph.E
getEdge(V sourceVertex, V targetVertex)
Returns an edge connecting source vertex to target vertex if such vertices and such edge exist in this graph.protected UndirectedEdgeContainer<V,E>
getEdgeContainer(V vertex)
A lazy build of edge container for specified vertex.java.util.Set<V>
getVertexSet()
Get the vertex set.java.util.Set<E>
incomingEdgesOf(V vertex)
Returns a set of all edges incoming into the specified vertex.int
inDegreeOf(V vertex)
Returns the "in degree" of the specified vertex.private boolean
isEqualsStraightOrInverted(java.lang.Object sourceVertex, java.lang.Object targetVertex, E e)
int
outDegreeOf(V vertex)
Returns the "out degree" of the specified vertex.java.util.Set<E>
outgoingEdgesOf(V vertex)
Returns a set of all edges outgoing from the specified vertex.void
removeEdgeFromTouchingVertices(E e)
Removes the specified edge from the edge containers of its source and target vertices.
-
-
-
Field Detail
-
serialVersionUID
private static final long serialVersionUID
- See Also:
- Constant Field Values
-
NOT_IN_UNDIRECTED_GRAPH
private static final java.lang.String NOT_IN_UNDIRECTED_GRAPH
- See Also:
- Constant Field Values
-
abstractBaseGraph
protected AbstractBaseGraph<V,E> abstractBaseGraph
-
vertexMapUndirected
protected java.util.Map<V,UndirectedEdgeContainer<V,E>> vertexMapUndirected
-
edgeSetFactory
protected EdgeSetFactory<V,E> edgeSetFactory
-
-
Constructor Detail
-
UndirectedSpecifics
public UndirectedSpecifics(AbstractBaseGraph<V,E> abstractBaseGraph)
Construct a new undirected specifics.- Parameters:
abstractBaseGraph
- the graph for which these specifics are for
-
UndirectedSpecifics
public UndirectedSpecifics(AbstractBaseGraph<V,E> abstractBaseGraph, java.util.Map<V,UndirectedEdgeContainer<V,E>> vertexMap)
Construct a new undirected specifics.- Parameters:
abstractBaseGraph
- the graph for which these specifics are forvertexMap
- map for the storage of vertex edge sets
-
UndirectedSpecifics
public UndirectedSpecifics(AbstractBaseGraph<V,E> abstractBaseGraph, java.util.Map<V,UndirectedEdgeContainer<V,E>> vertexMap, EdgeSetFactory<V,E> edgeSetFactory)
Construct a new undirected specifics.- Parameters:
abstractBaseGraph
- the graph for which these specifics are forvertexMap
- map for the storage of vertex edge setsedgeSetFactory
- factory for the creation of vertex edge sets
-
-
Method Detail
-
addVertex
public void addVertex(V v)
Adds a vertex.
-
getVertexSet
public java.util.Set<V> getVertexSet()
Get the vertex set.- Specified by:
getVertexSet
in interfaceSpecifics<V,E>
- Returns:
- the vertex set
-
getAllEdges
public java.util.Set<E> getAllEdges(V sourceVertex, V targetVertex)
Returns a set of all edges connecting source vertex to target vertex if such vertices exist in this graph. If any of the vertices does not exist or isnull
, returnsnull
. If both vertices exist but no edges found, returns an empty set.- Specified by:
getAllEdges
in interfaceSpecifics<V,E>
- Parameters:
sourceVertex
- source vertex of the edge.targetVertex
- target vertex of the edge.- Returns:
- a set of all edges connecting source vertex to target vertex.
-
getEdge
public E getEdge(V sourceVertex, V targetVertex)
Returns an edge connecting source vertex to target vertex if such vertices and such edge exist in this graph. Otherwise returnsnull
. If any of the specified vertices isnull
returnsnull
In undirected graphs, the returned edge may have its source and target vertices in the opposite order.
-
isEqualsStraightOrInverted
private boolean isEqualsStraightOrInverted(java.lang.Object sourceVertex, java.lang.Object targetVertex, E e)
-
addEdgeToTouchingVertices
public void addEdgeToTouchingVertices(E e)
Adds the specified edge to the edge containers of its source and target vertices.- Specified by:
addEdgeToTouchingVertices
in interfaceSpecifics<V,E>
- Parameters:
e
- the edge
-
degreeOf
public int degreeOf(V vertex)
Returns the degree of the specified vertex. A degree of a vertex in an undirected graph is the number of edges touching that vertex.
-
edgesOf
public java.util.Set<E> edgesOf(V vertex)
Returns a set of all edges touching the specified vertex. If no edges are touching the specified vertex returns an empty set.
-
inDegreeOf
public int inDegreeOf(V vertex)
Returns the "in degree" of the specified vertex.- Specified by:
inDegreeOf
in interfaceSpecifics<V,E>
- Parameters:
vertex
- vertex whose in degree is to be calculated.- Returns:
- the in degree of the specified vertex.
-
incomingEdgesOf
public java.util.Set<E> incomingEdgesOf(V vertex)
Returns a set of all edges incoming into the specified vertex.- Specified by:
incomingEdgesOf
in interfaceSpecifics<V,E>
- Parameters:
vertex
- the vertex for which the list of incoming edges to be returned.- Returns:
- a set of all edges incoming into the specified vertex.
-
outDegreeOf
public int outDegreeOf(V vertex)
Returns the "out degree" of the specified vertex.- Specified by:
outDegreeOf
in interfaceSpecifics<V,E>
- Parameters:
vertex
- vertex whose out degree is to be calculated.- Returns:
- the out degree of the specified vertex.
-
outgoingEdgesOf
public java.util.Set<E> outgoingEdgesOf(V vertex)
Returns a set of all edges outgoing from the specified vertex.- Specified by:
outgoingEdgesOf
in interfaceSpecifics<V,E>
- Parameters:
vertex
- the vertex for which the list of outgoing edges to be returned.- Returns:
- a set of all edges outgoing from the specified vertex.
-
removeEdgeFromTouchingVertices
public void removeEdgeFromTouchingVertices(E e)
Removes the specified edge from the edge containers of its source and target vertices.- Specified by:
removeEdgeFromTouchingVertices
in interfaceSpecifics<V,E>
- Parameters:
e
- the edge
-
getEdgeContainer
protected UndirectedEdgeContainer<V,E> getEdgeContainer(V vertex)
A lazy build of edge container for specified vertex.- Parameters:
vertex
- a vertex in this graph- Returns:
- an edge container
-
-