本帖最后由 黄艺纯 于 2018-8-18 21:36 编辑
1.Map接口下有几个子类,各自有什么特点?
LinkedHashMap:1、保存了记录的插入顺序。
2、哈希表和链接列表实现。 3、不是同步的。 HashMap:1、底层也是哈希表数据结构,此集合线程是不同步 效率高。
2、允许使用 null 值和 null 键。
Hashtable:1、底层数据结构是是哈希表结构,该集合是线程同步的,效率低。
2、key和value不能为null。
TreeMap:1、底层是二叉树数据结构,线程不同步,可以用于给Map集合中的键进行排序 。
2、不是同步的。
2.目前为止,我们所学的遍历map集合有几种方式?
四种:
1、通过Map.keySet遍历key和value
2、通过Map.entrySet使用迭代器遍历key和value
3、通过Map.entrySet使用增强for循环遍历key和value
4、通过Map.values遍历所有的value,但是不能遍历key
3.请用自己的语言描述你所了解的集合体系
集合的由来:
面向对象语言对事物都是以对象的形式来体现,为了方便对多个对象的操作,就需要将对象进行存储,集合就是存储对象最常用的一种方式。
集合特点:
1、用于存储对象的容器。(容器本身就是一个对象,存在于堆内存中,里面存的是对象的地址)
2、集合的长度是可变的。
3、集合中不可以存储基本数据类型值。(只能存对象)
Collection子接口以及常用实现类:
Collection接口
List接口:有序(存入和取出的顺序一致),元素都有索引(角标),元素可以重复。
Vector:内部是数组数据结构,是同步的。增删,查询都很慢!(几乎不用了)
ArrayList:内部是数组数据结构,是不同步的。替代了Vector,查询的速度快,增删速度慢。(查询时是从容器的第一个元素往后找,由于数组的内存空间是连续的,所以查询快;增删的话所有元素内存地址都要改变,所以增删慢。)
LinkedList:内部是链表数据结构,是不同步的。增删元素的速度很快。(同理,链表的内存空间是不连续的,所以查询慢;增删时只需改变单个指针的指向,所以快;)
Set接口:无序,元素不能重复。Set接口中的方法和Collection一致。
HashSet: 内部数据结构是哈希表,是不同步的。
LinkedHashSet:内部数据结构是哈希表和链表,是有顺序的HashSet。
TreeSet:内部数据结构是有序的二叉树,它的作用是提供有序的Set集合,是不同步的。
List接口:
有一个最大的共性特点就是都可以操作角标,所以LinkedList也是有索引的。list集合可以完成对元素的增删改查。
Set和List的区别:
1. Set 接口实例存储的是无序的,不重复的数据。List 接口实例存储的是有序的,可以重复的元素 <最本质区别>。
2. Set检索效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。
3. List和数组类似,可以动态增长,根据实际存储的数据的长度自动增长List的长度。查找元素效率高,插入删除效率低,因为会引起其他元素位置改变。
Map子接口以及常用实现类:
Map:一次添加一对元素,Collection 一次添加一个元素。 Map也称为双列集合,Collection集合也称为单列集合。
其实map集合中存储的就是键值对,map集合中必须保证键的唯一性。
Map常用的子类:
Hashtable :内部结构是哈希表,是同步的。不允许null作为键,null作为值。
Properties:用来存储键值对型的配置文件的信息,可以和IO技术相结合。
HashMap : 内部结构是哈希表,不是同步的。允许null作为键,null作为值。
LinkedHashMap:内部结构是哈希表和链表,不是同步,具有可预知的迭代顺序。
TreeMap : 内部结构是二叉树,不是同步的。可以对Map集合中的键进行排序。
|