Java集合类的那点通俗的认知
开门见山地说吧,Java提供了一套完整的集合类(也可以叫做容器类)来管理一组长度可变的对象(也就是集合的元素),其中常见的类型包括List、Set、Queue和Map。从我个人的编程经验来看,List的实现类ArrayList和Map的实现类HashMap使用频率最高,其它实现类只能望其项背了。 List、Set和Queue都是Collection的子接口,但各有各的好。List按照插入的顺序保存元素,Set不会有重复的元素,Queue通常(但并非一定)以 FIFO(先进先出)的方式排序各个元素。 Map与Collection最大的不同就在于,它是一组“键值对”,可以快速地通过键来查找值;Collection是没有键的,因此需要按照某种规则来查找值(这里说的值就是元素)。 怎么使用集合类呢?示例如下:
通常情况下,ArrayList是我们在选择List的时候的首选。别问我为什么,就好像你问我为什么1+1 = 2 ?我回答不上来啊。 有人会问,如果我的应用操作偏向于插入和删除,而不是随机访问,我还要选用ArrayList吗?我知道LinkedList在处理插入和删除的时候更高效,而ArrayList更适合随机访问。 那么我的回答是,你已经知道了答案,就做出自己的选择吧。 List的应用经常会涉及到一些经典的排序算法,我们不妨来重温一下冒泡排序,冒泡排序的规则是:假如有N个数,是无序的;从第一个数开始和后面N-1的数比较,发现有比自己小的就交换位置;从第二个数开始和后面N-2的数比较,同样发现有比自己小的就交换位置;直到N-1结束。 来看程序清单1-1:
Collections类是操作Collection的一个工具集,提供了很多可以操作和返回Collection的静态方法,非常好用。Collections.addAll()方法可以将所有指定元素添加到指定 Collection中,可以分别指定要添加的元素,就像
HashMap是最常见的Map实现,应用非常的广泛;支持null键和null值,是绝大部分利用键值对存取场景的首选;比如,查询数据库的时候经常使用HashMap来进行灵活的(可选择一个表的部分列,而不是所有列)列名和列值的绑定。 HashMap的值中还可以存放新的键值对,就像下面的这张示意图。 考虑这样一种场景,王二现在是一个写作大咖了,不再只是一个会写代码的程序员了。有一天,他和几个热情的读者相遇在厕所的门口,为了表示对王二的尊重,读者们觉得礼让王二先去解决问题是必要的。 PriorityQueue是一种优先级队列(Priority即为优先的意思),可以应用于这种场景。代码示例如下:
PriorityQueue既然要排出优先级,那么就要有一定的规则,排列的对象就要实现Comparable接口。 建议在学习的时候debug一下,你会发现queue的变化非常的有意思;每次add添加或者poll取出时就会执行对应的compareTo。(非常惭愧,我对内部的排序没有搞太懂,留待后面继续学习) PriorityQueue常用的功能函数如下:
推荐阅读: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |