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 user-defined edges - various edge multiplicity options, including simple graphs, multigraphs and 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