|Original author(s)||Kevin Bourrillion and Jared Levy (Google Collections Library) |
27.0.1 / November 19, 2018
|Type||Utility and Collection Libraries|
|License||Apache License 2.0|
Google Guava can be roughly divided into three components: basic utilities to reduce menial labor to implement common methods and behaviors, an extension to the Java collections framework (JCF) formerly called the Google Collections Library, and other utilities which provide convenient and productive features such as functional programming, graphs, caching, range objects, and hashing.
The creation and architecture of the collection component were partly motivated by generics introduced in JDK 1.5. Although generics improve the productivity of programmers, the standard JCF does not provide sufficient functionality, and its complement Apache Commons Collections had not adopted generics in order to maintain backward compatibility. This fact led two engineers Kevin Bourrillion and Jared Levy to develop an extension to JCF, which provides additional generic classes such as multisets, multimaps, bitmaps, and immutable collections.
The library's design and code were advised and reviewed by Joshua Bloch, the original lead designer of the Java Collections framework, and Doug Lea, one of the lead designers of concurrency utilities in JDK.
As of April 2012, Guava ranked the 12th most popular Java library, next to the Apache Commons projects and a few others. Research performed in 2013 on 10,000 GitHub projects found that Google-made libraries, such as Google Web Toolkit and Guava, constituted 7 of the top 100 most popular libraries in Java, and that Guava was the 8th most popular Java library. As of March 2018, Guava was the 6th most starred Java project on Github.
While Google Guava is an open source project, the maintainers of Guava do not encourage external contributions. Kevin Bourrillion wrote a Google+ post explaining that, while Guava is open source, it is also a collection of APIs referenced throughout the internal Google codebase. Bourrillion writes, "I don't think many of you understand: the work you've done to produce that patch is actually minuscule compared to the total amount of work we have to do to put it in Guava." This post and the reaction to this post sparked a debate over the public/private nature of projects like Google Guava and extensive discussion over what constitutes an open source project. Support for Guava has been dropped from version 5 of the Spring Framework.
The Apache Commons is a project of the Apache Software Foundation, formerly under the Jakarta Project. The purpose of the Commons is to provide reusable, open source Java software. The Commons is composed of three parts: proper, sandbox, and dormant.Application programming interface
In computer programming, an application programming interface (API) is a set of subroutine definitions, communication protocols, and tools for building software. In general terms, it is a set of clearly defined methods of communication among various components. A good API makes it easier to develop a computer program by providing all the building blocks, which are then put together by the programmer.
An API may be for a web-based system, operating system, database system, computer hardware, or software library.
An API specification can take many forms, but often includes specifications for routines, data structures, object classes, variables, or remote calls. POSIX, Windows API and ASPI are examples of different forms of APIs. Documentation for the API usually is provided to facilitate usage and implementation.Bidirectional map
In computer science, a bidirectional map, or hash bag, is an associative data structure in which the pairs form a one-to-one correspondence. Thus the binary relation is functional in each direction: each can also be mapped to a unique . A pair thus provides a unique coupling between and so that can be found when is used as a key and can be found when is used as a key.
Mathematically, a bidirectional map can be defined a bijection between two different sets of keys and of equal cardinality, thus constituting a injective and surjective function:
Carrot² is an open source search results clustering engine. It can automatically cluster small collections of documents, e.g. search results or document abstracts, into thematic categories. Apart from two specialized search results clustering algorithms, Carrot² offers ready-to-use components for fetching search results from various sources. Carrot² is written in Java and distributed under the BSD license.List of Java frameworks
Below is a list of Java programming language technologies (frameworks, libraries)Multimap
In computer science, a multimap (sometimes also multihash or multidict) is a generalization of a map or associative array abstract data type in which more than one value may be associated with and returned for a given key. Both map and multimap are particular cases of containers (for example, see C++ Standard Template Library containers). Often the multimap is implemented as a map with lists or sets as the map values.Search-based software engineering
Search-based software engineering (SBSE) applies metaheuristic search techniques such as genetic algorithms, simulated annealing and tabu search to software engineering problems. Many activities in software engineering can be stated as optimization problems. Optimization techniques of operations research such as linear programming or dynamic programming are often impractical for large scale software engineering problems because of their computational complexity. Researchers and practitioners use metaheuristic search techniques to find near-optimal or "good-enough" solutions.
SBSE problems can be divided into two types:
black-box optimization problems, for example, assigning people to tasks (a typical combinatorial optimization problem).
white-box problems where operations on source code need to be considered.Set (abstract data type)
In computer science, a set is an abstract data type that can store unique values, without any particular order. It is a computer implementation of the mathematical concept of a finite set. Unlike most other collection types, rather than retrieving a specific element from a set, one typically tests a value for membership in a set.
Some set data structures are designed for static or frozen sets that do not change after they are constructed. Static sets allow only query operations on their elements — such as checking whether a given value is in the set, or enumerating the values in some arbitrary order. Other variants, called dynamic or mutable sets, allow also the insertion and deletion of elements from the set.
A multiset is a special kind of set in which an element can figure several times.