Here is an experimental and untested fork of JGraphT like you've described:
https://github.com/automenta/jgraphtI just committed it and decided to search the mailing list for JGraphT and your message was the only one. It is similar to your explanation except I've modified the JGraphT root interfaces to provide new Iterator methods using Java 8 default methods. In the subclasses which use the Set methods, I override these to reverse the flow, calling set.iterator() so they are unaffected by this change. There may be parts of JGraphT like certain wrapper classes and generators which do not depend on a Set which could run more efficiently without instantiating Collections. The vertexSet and edgeSet methods still rely on Set's at this point, but can be modified in the same way to make it Collection-less. The next step would be to cleanly separate the Collection methods into a subinterface so there is no confusion. A further separation into read-only and mutable graphs might also apply.
After this, the Blueprints WrapperGraph interface was straightforward to add. But I haven't tested it yet. However all of the original JGraphT unit tests still pass.
I used JUNG several years ago. On a recent project needing fast in-memory graphs we decided on JGraphT since it's newer and seemed more active, with more included algorithms:
Maybe we can switch to Blueprints TinkerGraph instead of JGraphT. For example, this might be rewriteable as a Furnace vertex program:
Here's the original suggestion for a JUNG interface:
Thanks!