• Graphs, Explained
  • Definitions
  • Capabilities
  • Graph Types
  • Graph
  • ValueGraph
  • Network
  • Choosing the right graph type
  • Building graph instances
  • Builder constraints vs. optimization hints
  • Mutable and Immutable graphs
  • Mutable* types
  • Immutable* implementations
  • Guarantees
  • Treat these classes as "interfaces", not implementations
  • Graph elements (nodes and edges)
  • Elements must be useable as Map keys
  • Uniqueness
  • Consistency between hashCode() and equals()
  • Ordering consistency with equals()
  • Non-recursiveness
  • Elements and mutable state
  • Elements must be non-null
  • Graph traversal
  • Utility functions
  • Library contracts and behaviors
  • Mutation
  • Graph equals() and graph equivalence
  • Accessor methods
  • Synchronization
  • Element objects
  • Notes for implementors
  • Storage models
  • Accessor behavior
  • Abstract* classes
  • Code examples
  • Is node in the graph?
  • Is there an edge between nodes u and v (that are known to be in the graph)?
  • Basic Graph example
  • Basic ValueGraph example
  • Basic Network example
  • Traversing an undirected graph node-wise
  • Traversing a directed graph edge-wise
  • FAQ
  • Why did Guava introduce common.graph?
  • What kinds of graphs does common.graph support?
  • common.graph doesn’t have feature/algorithm X, can you add it?
  • Does it support very large graphs (i.e., MapReduce scale)?
  • How can I define the order of successors(node)?
  • Why should I use it instead of something else?
  • Major Contributors