布尔师姐最喜欢的事就是不务正业,最近有个特别强烈的想法,想做些有意义的事。比如教书育人。想想桃李满天下,美誉满高楼,我活着终于找到了人生的意义。但苦于师姐只有本科学历,也无一技之长,只是从事了两年Java小白。遂激动的投递了一所计算机培训学校。
面试学校自然需要知识深度和广度功力高深,奈何师姐道行太浅。深感惭愧,确实不该祸害祖国未来的栋梁。故回家吐血整理相关基础知识,分享给大家,有不妥之处,望各路大仙批评指正。也可添加微信交流Java或者摄影。(部分内容摘自网络,对于原作者多有冒犯,如有不妥之处,请联系我删除。)
question 1:说说你对collection的理解?
这个问题猛然间甩过来,有些不知所措。collection是啥子?
collection继承实现结构Iterable:Iterable接口位于java.lang包下;
Iterable接口collection继承Iterable接口,会返回一个Iterator接口,为什么list等不直接实现Iterator接口呢?
看一下JDK中的集合类,比如List一族或者Set一族,都是继承了Iterable接口,但并不直接继承Iterator接口。
仔细想一下这么做是有道理的。因为Iterator接口的核心方法next()或者hasNext()
是依赖于迭代器的当前迭代位置的。
如果Collection直接继承Iterator接口,势必导致集合对象中包含当前迭代位置的数据(指针)。
当集合在不同方法间被传递时,由于当前迭代位置不可预置,那么next()方法的结果会变成不可预知。
除非再为Iterator接口添加一个reset()方法,用来重置当前迭代位置。
但即时这样,Collection也只能同时存在一个当前迭代位置。
而Iterable则不然,每次调用都会返回一个从头开始计数的迭代器。
List、Queue 、Set有什么区别?
list :list是有序的,且元素可为空,可重复的。主要实现类有ArrayList和Linkedlist。ArrayList底层有数组实现,允许元素随机访问,但是向ArrayList中插入和删除时因为要移动复制速度较慢,所以对于随机访问get()和set(),ArrayList优于linkedList,因为linkedList要移动指针。LinkedList底层是通过双向链表实现的,对于新增add和删除remove,LinedList比较有优势,因为开销固定。
Queue:主要特性是队列,主要实现类有 LinkedList、PriorityQueue、ArrayQueue.这里可查看Queue子类的具体区别
Set:里面的元素是唯一的(靠重写hashcode和equals()方法实现),无序的(存取顺序不一致)。主要实现类hashSet,TreeSet,LinkHashSet.。存入hashset的元素必须定义hashcode方法。可以添加null。treeSet: 底层数据结构是哈希表,线程不安全,效率高,允许存储null值,元素无序元素的唯一性是靠重写hashCode()方法和equals()方法。不重写则无法保证。Integer 和String 默认重写了hashCode()和equals()方法。LinkedHashSet: 底层数据结构是链表和哈希表,线程不安全,效率高,元素有序且唯一。TreeSet: 底层数据结构是二叉树,线程不安全,效率高,元素有序且唯一。不允许null元素。TreeSet可以对元素进行排序,排序方式有自然排序和比较器排序,具体取决于使用的构造方法。
question 2:map实现了collection接口吗?
Map自然是没有实现collection接口的,map和collection一样都是集合的顶层接口,他们都处于一样的位置,colletion是单列集合,map是双列集合,存储是键值对。
HashMap结构图其中用的较多的是hashMap和LinkedHashMap。HashMap:存储数据采用的哈希表结构,元素的存取顺序不能保证一致。由于要保证键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。 LinkedHashMap:HashMap下有个子类LinkedHashMap,存储数据采用的哈希表结构+链表结构。通过链表结构可以保证元素的存取顺序一致;通过哈希表结构可以保证的键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。
至于其他文中未提交到类型,比如treeMap将会在后续的学习中继续整理。
总结一下:
* Colletion和Map都是集合体系里面的顶层接口,不存在互相继承、实现的说法
* Collection 下面有Set,Queue,List三个接口,Set的子类HashSet、TreeSet、LinkedHashSet。Queue的子类有ArrayDeque和prorityQueue。List的子类有ArrayList,LinkedList,Vector(线程安全)。
* Map的子类有HashMap,TreeMap,LinkedHashMap,HashTable.
文中如有不对之处还望各路大仙批评指正。
网友评论