Interface Node

All Superinterfaces:
Element, Iterable<Edge>
All Known Implementing Classes:
AbstractNode, AdjacencyListNode, GraphicNode, MultiNode, SingleNode

public interface Node
extends Element, Iterable<Edge>
An Interface that advises general purpose methods for handling nodes as elements of a graph.

Important

Implementing classes should indicate the complexity of their implementation for each method.

Since:
July 12 2007
  • Method Details

    • getGraph

      Graph getGraph()
      Parent graph. Some elements are not able to give their parent graph.
      Returns:
      The graph containing this node or null if unknown.
    • getDegree

      int getDegree()
      Total number of relations with other nodes or this node.
      Returns:
      The number of edges/relations/links.
    • getOutDegree

      int getOutDegree()
      Number of leaving edges.
      Returns:
      the count of edges that only leave this node plus all undirected edges.
    • getInDegree

      int getInDegree()
      Number of entering edges.
      Returns:
      the count of edges that only enter this node plus all undirected edges.
    • getEdgeToward

      Edge getEdgeToward​(String id)
      Retrieve an edge that leaves this node toward 'id'.

      This method selects only edges leaving this node an pointing at node 'id' (this also selects undirected edges).

      This method is implicitly generic and return something which extends Edge. The return type is the one of the left part of the assignment. For example, in the following call :

       ExtendedEdge e = node.getEdgeToward("...");
       
      the method will return an ExtendedEdge. If no left part exists, method will just return an Edge.

      Parameters:
      id - Identifier of the target node.
      Returns:
      Directed edge going from this node to 'id', or undirected edge if it exists, else null.
    • getEdgeFrom

      Edge getEdgeFrom​(String id)
      Retrieve an edge that leaves node 'id' toward this node.

      This method selects only edges leaving node 'id' an pointing at this node (this also selects undirected edges).

      This method is implicitly generic and return something which extends Edge. The return type is the one of the left part of the assignment. For example, in the following call :

       ExtendedEdge e = node.getEdgeFrom("...");
       
      the method will return an ExtendedEdge. If no left part exists, method will just return an Edge.

      Parameters:
      id - Identifier of the source node.
      Returns:
      Directed edge going from node 'id' to this node, or undirected edge if it exists, else null.
    • getEdgeBetween

      Edge getEdgeBetween​(String id)
      Retrieve an edge between this node and the node 'id', if it exits.

      This method selects directed or undirected edges. If the edge is directed, its direction is not important and leaving or entering edges will be selected.

      This method is implicitly generic and return something which extends Edge. The return type is the one of the left part of the assignment. For example, in the following call :

       ExtendedEdge e = node.getEdgeBetween("...");
       
      the method will return an ExtendedEdge. If no left part exists, method will just return an Edge.

      Parameters:
      id - Identifier of the opposite node.
      Returns:
      Edge between node 'id' and this node if it exists, else null.
    • neighborNodes

      default Stream<Node> neighborNodes()
      Stream over neighbor nodes connected to this node via one or more edges. This iterator iterates across any leaving, entering and non directed edges (nodes are neighbors even if they only have a directed edge from them toward this node). If there are multiple edges connecting the same node, it might be iterated several times.
      Returns:
      The stream, neighbors are streamed in arbitrary order.
    • getEdge

      Edge getEdge​(int i)
      I-th edge. Edges are stored in no given order.

      However this method allows to iterate very quickly on all edges, or to choose a given edge with direct access.

      This method is implicitly generic and return something which extends Edge. The return type is the one of the left part of the assignment. For example, in the following call :

       ExtendedEdge e = node.getEdge(i);
       
      the method will return an ExtendedEdge. If no left part exists, method will just return an Edge.

      Parameters:
      i - Index of the edge.
      Returns:
      The i-th edge.
      Throws:
      IndexOutOfBoundsException - if i is negative or greater than or equal to the degree
    • getEnteringEdge

      Edge getEnteringEdge​(int i)
      I-th entering edge. Edges are stored in no given order.

      However this method allows to iterate very quickly on all entering edges, or to choose a given entering edge with direct access.

      This method is implicitly generic and return something which extends Edge. The return type is the one of the left part of the assignment. For example, in the following call :

       ExtendedEdge e = node.getEnteringEdge(i);
       
      the method will return an ExtendedEdge. If no left part exists, method will just return an Edge.

      Parameters:
      i - Index of the edge.
      Returns:
      The i-th entering edge.
      Throws:
      IndexOutOfBoundsException - if i is negative or greater than or equal to the in-degree
    • getLeavingEdge

      Edge getLeavingEdge​(int i)
      I-th leaving edge. Edges are stored in no given order.

      However this method allows to iterate very quickly on all leaving edges, or to choose a given leaving edge with direct access.

      This method is implicitly generic and return something which extends Edge. The return type is the one of the left part of the assignment. For example, in the following call :

       ExtendedEdge e = node.getLeavingEdge(i);
       
      the method will return an ExtendedEdge. If no left part exists, method will just return an Edge.

      Parameters:
      i - Index of the edge.
      Returns:
      The i-th leaving edge.
      Throws:
      IndexOutOfBoundException - if i is negative or greater than or equal to the out-degree
    • getBreadthFirstIterator

      Iterator<Node> getBreadthFirstIterator()
      Iterator for breadth first exploration of the graph, starting at this node.

      If the graph is not connected, only a part of it will be explored. By default, this iterator will respect edge orientation.

      This method is implicitly generic and return an Iterator over something which extends Node. The return type is the one of the left part of the assignment. For example, in the following call :

       Iterator<ExtendedNode> ite = node.getBreadthFirstIterator();
       
      the method will return an Iterator<ExtendedNode>. If no left part exists, method will just return an Iterator<Node>.

      Returns:
      An iterator able to explore the graph in a breadth first way starting at this node.
    • getBreadthFirstIterator

      Iterator<Node> getBreadthFirstIterator​(boolean directed)
      Iterator for breadth first exploration of the graph, starting at this node.

      If the graph is not connected, only a part of it will be explored.

      This method is implicitly generic and return an Iterator over something which extends Node. The return type is the one of the left part of the assignment. For example, in the following call :

       Iterator<ExtendedNode> ite = node.getBreadthFirstIterator(true);
       
      the method will return an Iterator<ExtendedNode>. If no left part exists, method will just return an Iterator<Node>.

      Parameters:
      directed - If false, the iterator will ignore edge orientation (the default is "True").
      Returns:
      An iterator able to explore the graph in a breadth first way starting at this node.
    • getDepthFirstIterator

      Iterator<Node> getDepthFirstIterator()
      Iterator for depth first exploration of the graph, starting at this node.

      If the graph is not connected, only a part of it will be explored. By default, this iterator will respect edge orientation.

      This method is implicitly generic and return an Iterator over something which extends Node. The return type is the one of the left part of the assignment. For example, in the following call :

       Iterator<ExtendedNode> ite = node.getDepthFirstIterator();
       
      the method will return an Iterator<ExtendedNode>. If no left part exists, method will just return an Iterator<Node>.

      Returns:
      An iterator able to explore the graph in a depth first way starting at this node.
      Computational Complexity :
      of the depth first iterator O(n+m) with n the number of nodes and m the number of edges.
    • getDepthFirstIterator

      Iterator<Node> getDepthFirstIterator​(boolean directed)
      Iterator for depth first exploration of the graph, starting at this node.

      If the graph is not connected, only a part of it will be explored.

      This method is implicitly generic and return an Iterator over something which extends Node. The return type is the one of the left part of the assignment. For example, in the following call :

       Iterator<ExtendedNode> ite = node.getDepthFirstIterator(true);
       
      the method will return an Iterator<ExtendedNode>. If no left part exists, method will just return an Iterator<Node>.

      Parameters:
      directed - If false, the iterator will ignore edge orientation (the default is "True").
      Returns:
      An iterator able to explore the graph in a depth first way starting at this node.
    • edges

      Stream<Edge> edges()
      Stream over all entering and leaving edges.
      Returns:
      A stream over all directed and undirected edges, leaving or entering.
    • leavingEdges

      default Stream<Edge> leavingEdges()
      Stream over all leaving edges.
      Returns:
      A stream over only edges that leave this node plus all undirected edges.
    • enteringEdges

      default Stream<Edge> enteringEdges()
      Stream over all entering edges.
      Returns:
      A stream over only edges that enter this node plus all undirected edges.
    • iterator

      default Iterator<Edge> iterator()
      Specified by:
      iterator in interface Iterable<Edge>
    • toString

      String toString()
      Override the Object.toString() method.
      Overrides:
      toString in class Object
    • hasEdgeToward

      default boolean hasEdgeToward​(String id)
      True if an edge leaves this node toward node 'id'.
      Parameters:
      id - Identifier of the target node.
      Returns:
      True if a directed edge goes from this node to 'id' or if an undirected edge exists.
    • hasEdgeToward

      default boolean hasEdgeToward​(Node node)
      True if an edge leaves this node toward a given node.
      Parameters:
      node - The target node.
      Returns:
      True if a directed edge goes from this node to the other node or if an undirected edge exists.
    • hasEdgeToward

      default boolean hasEdgeToward​(int index) throws IndexOutOfBoundsException
      True if an edge leaves this node toward a node with given index.
      Parameters:
      index - Index of the target node.
      Returns:
      True if a directed edge goes from this node to the other node or if an undirected edge exists.
      Throws:
      IndexOutOfBoundsException - if the index is negative or greater than getNodeCount() - 1.
    • hasEdgeFrom

      default boolean hasEdgeFrom​(String id)
      True if an edge enters this node from node 'id'.
      Parameters:
      id - Identifier of the source node.
      Returns:
      True if a directed edge goes from this node to 'id' or if an undirected edge exists.
    • hasEdgeFrom

      default boolean hasEdgeFrom​(Node node)
      True if an edge enters this node from a given node.
      Parameters:
      node - The source node.
      Returns:
      True if a directed edge goes from the other node to this node or if an undirected edge exists.
    • hasEdgeFrom

      default boolean hasEdgeFrom​(int index) throws IndexOutOfBoundsException
      True if an edge enters this node from a node with given index.
      Parameters:
      index - Index of the source node.
      Returns:
      True if a directed edge goes from the other node to this node or if an undirected edge exists.
      Throws:
      IndexOutOfBoundsException - if the index is negative or greater than getNodeCount() - 1.
    • hasEdgeBetween

      default boolean hasEdgeBetween​(String id)
      True if an edge exists between this node and node 'id'.
      Parameters:
      id - Identifier of another node.
      Returns:
      True if a edge exists between this node and node 'id'.
    • hasEdgeBetween

      default boolean hasEdgeBetween​(Node node)
      True if an edge exists between this node and another node.
      Parameters:
      node - Another node.
      Returns:
      True if an edge exists between this node and the other node.
    • hasEdgeBetween

      default boolean hasEdgeBetween​(int index) throws IndexOutOfBoundsException
      True if an edge exists between this node and a node with given index.
      Parameters:
      index - Index of another node.
      Returns:
      True if an edge exists between this node and the other node.
      Throws:
      IndexOutOfBoundsException - if the index is negative or greater than getNodeCount() - 1.
    • getEdgeToward

      Edge getEdgeToward​(Node node)
      Retrieves an edge that leaves this node toward another node.

      This method selects only edges leaving this node an pointing at the parameter node (this also selects undirected edges).

      This method is implicitly generic and returns something which extends Edge. The return type is the one of the left part of the assignment. For example, in the following call :

       ExtendedEdge e = node.getEdgeToward(...);
       
      the method will return an ExtendedEdge. If no left part exists, method will just return an Edge.

      Parameters:
      node - The target node.
      Returns:
      Directed edge going from this node to the parameter node, or undirected edge if it exists, else null.
    • getEdgeToward

      Edge getEdgeToward​(int index) throws IndexOutOfBoundsException
      Retrieves an edge that leaves this node toward the node with given index.

      This method selects only edges leaving this node an pointing at the parameter node (this also selects undirected edges).

      This method is implicitly generic and returns something which extends Edge. The return type is the one of the left part of the assignment. For example, in the following call :

       ExtendedEdge e = node.getEdgeToward(...);
       
      the method will return an ExtendedEdge. If no left part exists, method will just return an Edge.

      Parameters:
      index - Index of the target node.
      Returns:
      Directed edge going from this node to the parameter node, or undirected edge if it exists, else null.
      Throws:
      IndexOutOfBoundsException - if the index is negative or greater than getNodeCount() - 1.
    • getEdgeFrom

      Edge getEdgeFrom​(Node node)
      Retrieves an edge that leaves given node toward this node.

      This method selects only edges leaving the other node an pointing at this node (this also selects undirected edges).

      This method is implicitly generic and returns something which extends Edge. The return type is the one of the left part of the assignment. For example, in the following call :

       ExtendedEdge e = node.getEdgeFrom(...);
       
      the method will return an ExtendedEdge. If no left part exists, method will just return an Edge.

      Parameters:
      node - The source node.
      Returns:
      Directed edge going from the parameter node to this node, or undirected edge if it exists, else null.
    • getEdgeFrom

      Edge getEdgeFrom​(int index) throws IndexOutOfBoundsException
      Retrieves an edge that leaves node with given index toward this node.

      This method selects only edges leaving the other node an pointing at this node (this also selects undirected edges).

      This method is implicitly generic and returns something which extends Edge. The return type is the one of the left part of the assignment. For example, in the following call :

       ExtendedEdge e = node.getEdgeFrom("...");
       
      the method will return an ExtendedEdge. If no left part exists, method will just return an Edge.

      Parameters:
      index - Index of the source node.
      Returns:
      Directed edge going from the parameter node to this node, or undirected edge if it exists, else null.
      Throws:
      IndexOutOfBoundsException - if the index is negative or greater than getNodeCount() - 1.
    • getEdgeBetween

      Edge getEdgeBetween​(Node node)
      Retrieves an edge between this node and and another node if one exists.

      This method selects directed or undirected edges. If the edge is directed, its direction is not important and leaving or entering edges will be selected.

      This method is implicitly generic and return something which extends Edge. The return type is the one of the left part of the assignment. For example, in the following call :

       ExtendedEdge e = node.getEdgeBetween(...);
       
      the method will return an ExtendedEdge. If no left part exists, method will just return an Edge.

      Parameters:
      node - The opposite node.
      Returns:
      Edge between this node and the parameter node if it exists, else null.
    • getEdgeBetween

      Edge getEdgeBetween​(int index) throws IndexOutOfBoundsException
      Retrieves an edge between this node and the node with index i if one exists.

      This method selects directed or undirected edges. If the edge is directed, its direction is not important and leaving or entering edges will be selected.

      This method is implicitly generic and return something which extends Edge. The return type is the one of the left part of the assignment. For example, in the following call :

       ExtendedEdge e = node.getEdgeBetween(...);
       
      the method will return an ExtendedEdge. If no left part exists, method will just return an Edge.

      Parameters:
      index - The index of the opposite node.
      Returns:
      Edge between node with index i and this node if it exists, else null.
      Throws:
      IndexOutOfBoundsException - if the index is negative or greater than getNodeCount() - 1.