美文网首页程序员
懵逼青铜—collection和map纠葛

懵逼青铜—collection和map纠葛

作者: 布尔师姐 | 来源:发表于2019-05-23 16:50 被阅读2次

     布尔师姐最喜欢的事就是不务正业,最近有个特别强烈的想法,想做些有意义的事。比如教书育人。想想桃李满天下,美誉满高楼,我活着终于找到了人生的意义。但苦于师姐只有本科学历,也无一技之长,只是从事了两年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.

文中如有不对之处还望各路大仙批评指正。

相关文章

  • 懵逼青铜—collection和map纠葛

    布尔师姐最喜欢的事就是不务正业,最近有个特别强烈的想法,想做些有意义的事。比如教书育人。想想桃李满天下,美誉满高楼...

  • java工程师应掌握的

    1 Java基础 1.1 Collection和Map (1)掌握Collection和Map的继承体系。 (2)...

  • 高级开发工程师

    1. Java基础 1.1 Collection和Map (1)掌握Collection和Map的继承体系。 (2...

  • JavaSE中的容器

    概述:容器包括Collection和Map。Collection存储对象,Map存储键值对。 一. Collect...

  • Java 集合类实现原理

    Collection & Map Collection 子类有 List 和 Set List --> Array...

  • Map

    1.Map类集合 Map是和Collection同级别的接口,但是Map也可以返回一些collection类型的,...

  • Collection和map

    Collection的子类有List和Set,Map 是独立的接口。 一、Map 1.HashMap Hashma...

  • 容器

    概况 容器主要包括 Collection 和 Map 两种,Collection 存储着对象的集合,而 Map 存...

  • Java的集合类概述

    Java的集合类主要由两个接口派生而出:Collection和Map,Collection和Map是Java集合框...

  • Java容器概览

    容器主要包括 Collection 和 Map 两种,Collection 存储着对象的集合,而 Map 存储着键...

网友评论

    本文标题:懵逼青铜—collection和map纠葛

    本文链接:https://www.haomeiwen.com/subject/bvivzqtx.html