JGraphT is a free Java graph library that provides mathematical graph-theory objects and algorithms. JGraphT supports various types of graphs including:
* directed and undirected graphs.
* graphs with weighted / unweighted / labeled or any user-defined edges.
* various edge multiplicity options, including: simple-graphs, multigraphs, pseudographs.
* unmodifiable graphs - allow modules to provide "read-only" access to internal graphs.
* listenable graphs - allow external listeners to track modification events.
* subgraphs graphs that are auto-updating subgraph views on other graphs.
* graph visualization using the JGraph library
Although powerful, JGraphT is designed to be simple and type-safe (via Java 5 generics). For example, graph vertices can be of any objects. You can create graphs based on: Strings, URLs, XML documents, etc; you can even create graphs of graphs!