Top 100 Classes Used in Java Projects

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.

  1. java.util.ArrayList (6958)
  2. java.io.IOException (6866)
  3. java.util.List (6784)
  4. java.util.HashMap (5590)
  5. java.util.Map (5413)
  6. java.io.File (5097)
  7. java.io.InputStream (4234)
  8. java.util.Set (3915)
  9. java.util.Arrays (3884)
  10. java.util.Iterator (3856)
  11. java.util.Collections (3643)
  12. java.util.Date (3461)
  13. java.util.HashSet (3278)
  14. java.io.BufferedReader (3257)
  15. java.util.Collection (3192)
  16. java.net.URL (3168)
  17. java.io.FileInputStream (3044)
  18. java.io.InputStreamReader (3023)
  19. org.junit.Test (3008)
  20. java.io.FileOutputStream (2843)
  21. java.io.FileNotFoundException (2669)
  22. java.io.OutputStream (2563)
  23. java.util.regex.Pattern (2469)
  24. java.io.Serializable (2437)
  25. java.util.LinkedList (2372)
  26. java.text.SimpleDateFormat (2245)
  27. java.util.Properties (2190)
  28. java.util.Random (2171)
  29. java.lang.reflect.Method (2141)
  30. java.io.ByteArrayOutputStream (2112)
  31. java.util.regex.Matcher (2012)
  32. android.os.Bundle (2007)
  33. java.util.logging.Logger (1999)
  34. java.io.UnsupportedEncodingException (1968)
  35. org.junit.Before (1920)
  36. java.util.Comparator (1896)
  37. java.io.ByteArrayInputStream (1868)
  38. java.io.PrintWriter (1862)
  39. java.util.Calendar (1854)
  40. android.app.Activity (1843)
  41. java.net.MalformedURLException (1828)
  42. android.content.Context (1780)
  43. android.view.View (1731)
  44. java.util.Locale (1719)
  45. java.util.Enumeration (1709)
  46. java.util.Map.Entry (1705)
  47. java.io.FileWriter (1677)
  48. java.io.FileReader (1651)
  49. android.util.Log (1614)
  50. android.content.Intent (1601)
  51. java.lang.reflect.InvocationTargetException (1594)
  52. java.util.logging.Level (1557)
  53. java.lang.reflect.Field (1499)
  54. java.io.StringWriter (1499)
  55. android.widget.TextView (1442)
  56. java.util.LinkedHashMap (1409)
  57. java.io.Reader (1390)
  58. java.net.URI (1377)
  59. java.io.Writer (1339)
  60. java.text.ParseException (1318)
  61. junit.framework.TestCase (1318)
  62. java.io.OutputStreamWriter (1295)
  63. java.io.StringReader (1279)
  64. java.io.BufferedWriter (1265)
  65. java.util.Vector (1254)
  66. java.util.StringTokenizer (1251)
  67. java.text.DateFormat (1246)
  68. java.util.concurrent.TimeUnit (1237)
  69. java.io.BufferedInputStream (1235)
  70. java.util.TreeMap (1227)
  71. org.xml.sax.SAXException (1218)
  72. javax.servlet.http.HttpServletRequest (1175)
  73. java.io.PrintStream (1168)
  74. java.util.TreeSet (1160)
  75. android.widget.Toast (1157)
  76. java.util.Hashtable (1154)
  77. java.lang.reflect.Constructor (1139)
  78. java.net.URLEncoder (1134)
  79. java.security.NoSuchAlgorithmException (1134)
  80. org.w3c.dom.Document (1130)
  81. android.widget.Button (1129)
  82. org.junit.After (1128)
  83. javax.servlet.http.HttpServletResponse (1109)
  84. java.awt.Color (1099)
  85. java.net.URISyntaxException (1085)
  86. javax.servlet.ServletException (1081)
  87. javax.xml.parsers.DocumentBuilderFactory (1076)
  88. java.lang.annotation.Retention (1075)
  89. java.security.MessageDigest (1072)
  90. java.util.concurrent.Executors (1062)
  91. java.net.UnknownHostException (1057)
  92. org.slf4j.Logger (1054)
  93. java.sql.SQLException (1043)
  94. org.slf4j.LoggerFactory (1042)
  95. java.util.UUID (1040)
  96. java.net.InetAddress (1026)
  97. junit.framework.Assert (1011)
  98. android.view.ViewGroup (1005)
  99. java.util.concurrent.ConcurrentHashMap (1001)
  100. 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.

  1. 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.
  2. 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.
  3. 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.

popular-java-classes

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.

Category >> Java  
If you want someone to read your code, please put the code inside <pre><code> and </code></pre> tags. For example:
<pre><code> 
String foo = "bar";
</code></pre>
  • Daniel

    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 ?

  • cytom2k

    Nice work. Really interesting!

  • yqj2065

    Good job!

  • neilstockton

    nothing else to do ? bored?

  • tiny

    great

  • Mahmoud Ben Hassine

    Interesting, thanks for sharing.

    Surprisingly, NullPointerException is not in the top 100! 🙂