大部分Java开发都会使用各种类库/框架及其API。 作者从10000个开源Java项目中提取并统计了各个 API Class 的使用频率,包括Java标准库和第三方类库。在每个项目中一个 class 只计数1次(这种方法也有一定的道理,因为有封装和重用,出现次数多不一定就是用的多)。下面列出了排名前100的 Class
。
下面括号中的数字表示出现频率, 范围从 1 到 10000; 例如, “java.util.ArrayList (6958)
” 代表在这10000个项目中, 有 5958 个使用到 java.util.ArrayList
; 如果感兴趣,你也可以 查看详细统计列表
- 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)
其中的85个来自于Java标准类库,这并不奇怪,因为标准库是语言的一个组成部分。在这85个标准类中, 大部分位于 java.util
, java.lang
和 java.io
包中.
关于上面的列表,使用说明如下:
- 一个类的使用频率反映其流行程度和重要性。 对Java初学者来说, 多花心思学习最有用的这些 API 可能是个很主意。
- 全世界大多数程序员的选择反映了Java开发的趋势。 在这100个类中,我们可以看到, Android 是非常受欢迎的。
- 如果两个类具有 同样/相似 的功能, 则频率越高意味着这个类被优先考虑。 一个类被优先考虑的原因可能各不相同,比如可用性(usability), API文档(documentation), 时间复杂度(complexity)、 电量消耗(energy consumption)等。
如下面的图表所示, 整个列表具有非常明显的长尾效应。 我们一般只对顶部区域感兴趣。
这项调查只统计明确引入的那些类, 而形如 java.lang.* 这种通配符的形式的 import 被忽略了, 所以像 String, Math, StringBuilder 这些类都没进入统计, 因为在默认语言包内,没有必要显式引入它们。 如果你感兴趣,也可以做做大数据分析,记得将你的结果分享给大家哦!
- 4 types of Java inner classes
- Learn Eclipse RCP framework by using open source projects
- Collection Classes Summary Table
- How to make a method thread-safe in Java?
原文链接: Top 100 Classes Used in Java Projects
原文日期: 2014-09-28
翻译日期: 2014-10-17
翻译人员: 铁锚