Guava
From charlesreid1
Guava is a Java library of high-performance collections and data containers. It was made and is maintained by Google.
The story behind Guava is, Google basically hired the author of the Java Collections API to go nuts and build a Collections++ library.
Google Guava on Github: https://github.com/google/guava
Installing
Jar File
Probably the easiest way to install Guava is to use the Guava jar file. You can find the link to Guava distributed as a Jar file on the Guava wiki on Github: https://github.com/google/guava/wiki/Release21
Using the Jar file depends on your environment, most IDEs have an easy way to add Jar files to a project.
If you're compiling by command line, you'll need to specify the Java class path and point Java to the location of your Jar files.
Class Path
To pass a custom class path with the location of your Guava jar files to the compiler,
$ javac -cp '.:/path/to/guava/jars/guava-21.0.jar' TSP.java
Then run Java with the same flag:
$ java -cp '.:/path/to/guava/jars/guava-21.0.jar' TSP
Makefile
Put the above in a Makefile for more convenience:
HOME=/path/to/home GUAVA=$(HOME)/guava/jars/guava-21.0.jar CP=-cp '.:$(GUAVA)' build: javac $(CP) $(TARGET) run: # If no size, use default java $(CP) $(BIN) clean: rm -rf *.class .PHONY: clean tsp: clean build run
Networks
Edges
Getting Endpoint Nodes from an Edge
To get the nodes at either end of a node, you can use the incidentNode() function to go from an edge to the two endpoints of the edge.
The incidentNode() method returns an object called a EndpointPair class, defined by Guava. How you use it depends on whether you have a directed or an undirected graph.
Documentation on EndpointPair: http://google.github.io/guava/releases/snapshot/api/docs/com/google/common/graph/EndpointPair.html
If you have a directed graph, you can use an edge to get the EndpointPair object, then call the source() and target() methods to get the nodes at the tail and head of the edge, resp.
If you have an undirected graph, you can use an edge to get the EndpointPair object, then call the nodeU() and nodeV() methods, which are basically equivalent to left and right.
Documentation on Network (see incidentNode method): http://google.github.io/guava/releases/snapshot/api/docs/com/google/common/graph/Network.html#incidentNodes-java.lang.Object-