Java入门之集合

        集合可以比喻为一个篮子,里边可以放一堆鸡蛋、几根黄瓜、几只小猫等等任何你可以想到的东西。集合是java语言为程序员提供的工具,方便业务编码。如果要自己去实现一套集合,效率、性能以及并发安全等等问题都要考虑在内,工作量不言而喻。

        Java中的集合分为两种:Collection和Map。Collection之下又有List,Set,Queue三大类;Map没有下属分类。数据的存储再计算机中分为连续存储(元素内存地址连续)和链表存储(元素通过指针关联)。List按照数据的不同存储方式有不同的实现,常用的是ArrayList和LinkedList。ArrayList底层使用数组存放元素,随机访问效率高,但是中间数据的删除和插入效率低下:需要移动插入点/删除点之后的数据;ArrayList中的数据按插入顺序排列,并且允许重复。LinkedList使用链表形式存放数据,不支持随机访问,只能从到尾的遍历;但是数据的插入和删除效率很高--只需要修改指针即可;由于每个数据项都需要存储指向下一个元素的指针,所以占用空间变大。

        Set实现类主要有HashSet和TreeSet。HashSet底层使用HashMap实现,利用的HashMap的key不能重复的机制,给所有的key的value为null。TreeSet是带排序的set实现,元素类型要么实现Comparable,要么在初始化的时候指定一个比较器;默认是字典升序。

        Queue队列分为普通队列和双端队列。主要实现有PriorityQueue优先级队列,底层使用小根堆,所有数据越小优先级越高。LinkedList实现了Deqeue接口,具有了双端队列的功能,同时提供了offerFirst/pollLast等普通队列的方式,因此LinkedList是一个比较综合的类,业务编码中也是常用的类。

        在jdk1.8中,jdk团队对集合的所有的集合接口进行了重写,不仅能使用迭代器,还能以流的方式实现对元素的操作;流可以串行执行也可以并行执行,Java在语言层面提供了高性能计算的机制,可能也是为了适应现在大数据的趋势;从jdk1.8开始新增的类似SQL的操作和各种功能性接口在语言层面支持了类似Map-Reduce的功能。对于业务开发,个人认为1.8是最好的版本,首先这个版本是官方永久支持的版本,另外之后版本新增的许多功能,除了JVM变得更加高效智能外,对业务并无太大的优势,反而增加了运行时的代码量。

你可能感兴趣的:(集合,java,开发语言)