当初学java时,只是简单的把java基础知识过了一遍就跑去刷题了,很多知识都是在刷题的过程中慢慢加深理解的。
由于每次刷题时,刷到与容器有关的我基本上都跑去百度了,例如百度一下:java中List的常用方法。
百度的次数不少,但总感觉不成体系,容易搞混,于是在这篇文章中总结了刷题过程中容器的一些常用方法。以此减少自己以后百度的次数。
如果你想复习一下容器的常用方法或者希望以后在容器这方面能少百度几次的话,相信这篇文章对你一定会有帮助。
容器,就是保存数据用的的东西
容器不需要定义大小,会自动扩容
其中List、Set、Queue这三个接口继承了Collection接口。
Map则是自成一家,没有继承别人。
ArrayList和LinkedList这两个是实现类,实现了List接口,这两个类可能会增加一些接口没有的新方法(刷题时一般用不到)。
同理、Set、Queue、Map的实现类也一样。
接下来把这些关系用一副图表示出来
如果需要用到一个List容器可以像下面这样子定义
ArrayList<Integer> list = new ArrayList<>();
LinkedList<Integer> list = new LinkedList<>();
有人也会定义成
List<Integer> list = new ArrayList<>();
有什么区别呢?
区别就是用
ArrayList<Integer> list = new ArrayList<>()
定义出来的list可以使用的方法多一些。
而用
List<Integer> list = new ArrayList<>()
定义出来的list可以用的方法少一些,因为类实现接口的时候可能会增加一些新的方法。
一般情况都可以定义成
List<Integer> list = new ArrayList<>()
就行了。因为我们原本就是想用List这个容器,List里的方法已经够我们用了。
除非你一定需要用到ArrayList里面特有的方法你才定义成
ArrayList<Integer> list = new ArrayList<>()
其实使用哪个无所谓,只要不把自己困扰住就行了,知道为什么可以这样子定义就可以了。
Set和Map和Queue的定义也和list一样。
List<Integer> list = new ArrayList<>();
Set<Integer> set = new HashSet<>();
HashMap:用于快速访问,常用与哈希有关的(常用)
TreeMap:键处于排序状态
LinkedHashMap:保持元素插入的顺序
Map<String,Integer> map = new HashMap<>();
有些人可能有疑问 怎么Queue还和LinkedList联系起来了,其实Queue的添加队尾和删除队头不就是相等于插入链表的尾结点,和删除链表的头结点吗,所以说不需要在定义一个Queue的实现类了。
以上常用是基于刷题而言的。
如果是以后学到框架之类的需要用到其他线程安全性的容器,那时常用和少用就又不一样了,不过理解了这些,到时学线程安全的容器的时候上手也很快,原理差不多只是名字不同罢了。
如果觉得有收获,不妨花个几秒钟点个赞,欢迎关注我的公众号玩编程地码农,目前专注写数据结构与算法和计算机基础等相关知识。
原文:https://www.cnblogs.com/wbcdmn/p/13872309.html