List、Set、Map 和 Queue 之间的区别
来源:互联网 发布:java mission control 编辑:程序博客网 时间:2024/06/05 22:31
分享楼主看到的一道Java面试题:
List、Set、Map 和 Queue 之间的区别:
List 是一个有序集合,允许元素重复。它的某些实现可以提供基于下标值的常量访问时间,但是这不是 List 接口保证的。Set 是一个无序集合。
由于给出的答案过于简单,楼主对其进行了进一步的探索,在网上寻找到一些资料,对其具体的区别进行进一步的挖掘,得到了这些知识:
List、Set、Map 和 Queue 之间的区别
list 和set 有共同的父类 它们的用法也是一样的 唯一的不太就是set中不能有相同的元素 list中可以
list和set的用途非常广泛 list可以完全代替数组来使用
map 是独立的合集 它使用键值对的方式来储存数据 键不能有重复的 值可以用重复
map不像上边两种集合那个用的广泛 不过在servlet 和jsp中 map可是绝对的重中之重 页面之间传值全靠map
List是集合类的接口,子类有ArraryList 和LinkList,通常在Android开发中我们常用的是arrayList,来将数据进行插入和移除。
其次map也是一个集合映射,不过是键值对的映射,也就是key , value形式,比如当我们需要查询其中的某个对象时,只需要查询其key便能直接获取到他的value(值),就像一个小型的数据库,也有类似于hashmap , Linkedhashmap ,treemap等方法来进一步实现和拓展,并且提高他的性能。
Set是最简单的一种集合。集合中的对象不按特定的方式排序,并且没有重复对象。 Set接口主要实现了两个实现类:
- HashSet: HashSet类按照哈希算法来存取集合中的对象,存取速度比较快
- TreeSet :TreeSet类实现了SortedSet接口,能够对集合中的对象进行排序。
Set的功能方法
Set具有与Collection完全一样的接口,因此没有任何额外的功能,不像前面有两个不同的List。实际上Set就是Collection,只 是行为不同。(这是继承与多态思想的典型应用:表现不同的行为。)Set不保存重复的元素(至于如何判断元素相同则较为复杂)
Set : 存入Set的每个元素都必须是唯一的,因为Set不保存重复元素。加入Set的元素必须定义equals()方法以确保对象的唯一性。Set与Collection有完全一样的接口。Set接口不保证维护元素的次序。
- HashSet:为快速查找设计的Set。存入HashSet的对象必须定义hashCode()。
- TreeSet: 保存次序的Set, 底层为树结构。使用它可以从Set中提取有序的序列。
LinkedHashSet:具有HashSet的查询速度,且内部使用链表维护元素的顺序(插入的次序)。于是在使用迭代器遍历Set时,结果会按元素插入的次序显示。
Queue用于模拟"队列"这种数据结构(先进先出 FIFO)。队列的头部保存着队列中存放时间最长的元素,队列的尾部保存着队列中存放时间最短的元素。新元素插入(offer)到队列的尾部,
访问元素(poll)操作会返回队列头部的元素,队列不允许随机访问队列中的元素。结合生活中常见的排队就会很好理解这个概念 3.1) PriorityQueue PriorityQueue并不是一个比较标准的队列实现,PriorityQueue保存队列元素的顺序并不是按照加入队列的顺序,而是按照队列元素的大小进行重新排序,这点从它的类名也可以
看出来 3.2) Deque Deque接口代表一个"双端队列",双端队列可以同时从两端来添加、删除元素,因此Deque的实现类既可以当成队列使用、也可以当成栈使用 3.2.1) ArrayDeque 是一个基于数组的双端队列,和ArrayList类似,它们的底层都采用一个动态的、可重分配的Object[]数组来存储集合元素,当集合元素超出该数组的容量时,系统会在底层重
新分配一个Object[]数组来存储集合元素 3.2.2) LinkedList
上面的知识点很好的解释了对于四种集合的具体原理,对于HashSet的快速查找,必须存入HashSet的对象必须定义hashCode()这点。 这里想研究的深入一点,于是又进一步探索,得到了我认为比较好的解释:
下面给出解释:hashset先调用对象的hashcode函数来进行散列,当散列到不同位置时,则认为对象不相同且进行插入操作(不用判断equals函数);当散列到同一个位置才会调用对象的equals函数来进行比较,只当equals返回false则认为两个对象不相等才会进行插入操作,否则认为两个对象相同而不进行插入操作。
通俗的来讲就是:hashset在插入数据的时候首先会和集合里面的元素比较hashcode,如果不相同就直接插入即可,如果hashcode相同,那么进一步调用equals函数来进行将要插入的元素与hashcode相同的元素内容之间的比较,如果不相同就可以插入,相同就不可以插入!
- List、Set、Map 和 Queue 之间的区别
- 简述list,map,set, queue的区别
- List Map Set集合之间的区别
- Java中Map, List, Set和Queue的区别和使用场景
- Java 深入学习(1) —— 容器类(集合类)Set、List、Queue、Map 之间的区别
- List Set Queue Map
- List,set,Map 的用法和区别
- List,set,Map 的用法和区别
- List.Set和Map的区别
- list、set和map 的区别
- List,set,Map 的用法和区别
- List,set,Map 的用法和区别
- list set和 map的区别
- List,set,Map 的用法和区别
- List,set,Map 的用法和区别
- List,map,set的区别和作用
- List,set,Map 的用法和区别
- List,set,Map 的用法和区别
- 英语作文通用句
- popen C函数获取linux命令的执行结果
- maven工程加入jacoco检测单元测试代码覆盖率
- 最简单的方法安装JDK
- 【Java笔试题】通过年月获取详细日历
- List、Set、Map 和 Queue 之间的区别
- 视频播放
- 文件和目录权限chmod、更改所有者和所属组chown、umask、隐藏权限lsattr、chattr2.14-2.17
- python2.7.2+sleekxmpp arm 移植
- 添加购物车
- 1005. 继续(3n+1)猜想 (25)-浙大PAT乙级真题java实现
- 哈希检索
- GetMessage和PeekMessage的联系与区别以及用法 TranslateMessage与DispatchMessage
- Android mvp+Retrofit 登录注册