A large portion of Java software development is using APIs from various libraries. From 10,000 open source Java projects, I extracted the frequency of API classes. The classes are either from Java standard library or from third-party libraries. Each class is counted once for each project. The list below shows the top 100.
1. Top 100 Java Classes
The number in parenthesis is the frequency, and it scales from 1 – 10,000. For example, “java.util.ArrayList (6958)†means out of 10,000 projects, 5958 of them use java.util.ArrayList
. You can go to the full list here.
- java.util.ArrayList (6958)
- java.io.IOException (6866)
- java.util.List (6784)
- java.util.HashMap (5590)
- java.util.Map (5413)
- java.io.File (5097)
- java.io.InputStream (4234)
- java.util.Set (3915)
- java.util.Arrays (3884)
- java.util.Iterator (3856)
- java.util.Collections (3643)
- java.util.Date (3461)
- java.util.HashSet (3278)
- java.io.BufferedReader (3257)
- java.util.Collection (3192)
- java.net.URLÂ (3168)
- java.io.FileInputStream (3044)
- java.io.InputStreamReader (3023)
- org.junit.Test (3008)
- java.io.FileOutputStream (2843)
- java.io.FileNotFoundException (2669)
- java.io.OutputStream (2563)
- java.util.regex.Pattern (2469)
- java.io.Serializable (2437)
- java.util.LinkedList (2372)
- java.text.SimpleDateFormat (2245)
- java.util.Properties (2190)
- java.util.Random (2171)
- java.lang.reflect.Method (2141)
- java.io.ByteArrayOutputStream (2112)
- java.util.regex.Matcher (2012)
- android.os.Bundle (2007)
- java.util.logging.Logger (1999)
- java.io.UnsupportedEncodingException (1968)
- org.junit.Before (1920)
- java.util.Comparator (1896)
- java.io.ByteArrayInputStream (1868)
- java.io.PrintWriter (1862)
- java.util.Calendar (1854)
- android.app.Activity (1843)
- java.net.MalformedURLException (1828)
- android.content.Context (1780)
- android.view.View (1731)
- java.util.Locale (1719)
- java.util.Enumeration (1709)
- java.util.Map.Entry (1705)
- java.io.FileWriter (1677)
- java.io.FileReader (1651)
- android.util.Log (1614)
- android.content.Intent (1601)
- java.lang.reflect.InvocationTargetException (1594)
- java.util.logging.Level (1557)
- java.lang.reflect.Field (1499)
- java.io.StringWriter (1499)
- android.widget.TextView (1442)
- java.util.LinkedHashMap (1409)
- java.io.Reader (1390)
- java.net.URIÂ (1377)
- java.io.Writer (1339)
- java.text.ParseException (1318)
- junit.framework.TestCase (1318)
- java.io.OutputStreamWriter (1295)
- java.io.StringReader (1279)
- java.io.BufferedWriter (1265)
- java.util.Vector (1254)
- java.util.StringTokenizer (1251)
- java.text.DateFormat (1246)
- java.util.concurrent.TimeUnit (1237)
- java.io.BufferedInputStream (1235)
- java.util.TreeMap (1227)
- org.xml.sax.SAXException (1218)
- javax.servlet.http.HttpServletRequest (1175)
- java.io.PrintStream (1168)
- java.util.TreeSet (1160)
- android.widget.Toast (1157)
- java.util.Hashtable (1154)
- java.lang.reflect.Constructor (1139)
- java.net.URLEncoder (1134)
- java.security.NoSuchAlgorithmException (1134)
- org.w3c.dom.Document (1130)
- android.widget.Button (1129)
- org.junit.After (1128)
- javax.servlet.http.HttpServletResponse (1109)
- java.awt.Color (1099)
- java.net.URISyntaxException (1085)
- javax.servlet.ServletException (1081)
- javax.xml.parsers.DocumentBuilderFactory (1076)
- java.lang.annotation.Retention (1075)
- java.security.MessageDigest (1072)
- java.util.concurrent.Executors (1062)
- java.net.UnknownHostException (1057)
- org.slf4j.Logger (1054)
- java.sql.SQLException (1043)
- org.slf4j.LoggerFactory (1042)
- java.util.UUIDÂ (1040)
- java.net.InetAddress (1026)
- junit.framework.Assert (1011)
- android.view.ViewGroup (1005)
- java.util.concurrent.ConcurrentHashMap (1001)
- java.awt.event.ActionEvent (995)
2. Potential Usage of the Frequency List
It is not surprising that 85 are from Java standard library, since it is a part of the language. Among the 85, most of them are from util, lang and io.
This list may serve the following usage.
- The frequency of usage of a class reflects its popularity and importance. For beginning Java developers, learning the most useful API first might be a good strategy.
- The majority of developers all over the world reflect the trend of Java development. In this top 100, we can see that Android is very popular.
- When two classes have the same/similar functionalities, the classes with the higher frequency means that the class is preferred. The classes may be preferred for different reasons, such as usability, documentation, time complexity, energy consumption, etc.
3. Distribution of the Whole List
As shown in the chart below, the distribution of the whole list has a very tall head and very long tail. So we should be interested in the top ones.
The survey is based on explicit imports in class files, foo.* is ignored, so you will not find a lot of classes in java.lang, such as String, Math, StringBuilder, etc., since it is not necessary to explicitly import them.
I guess the number of example should be one mistake
For example, “java.util.ArrayList (6958)†means out of 10,000 projects, 5958 of them use java.util.ArrayList.
It should be 6958 . Am I right ?
Nice work. Really interesting!
Good job!
nothing else to do ? bored?
great
Interesting, thanks for sharing.
Surprisingly, NullPointerException is not in the top 100! 🙂