1.Map接口下有几个子类,各自有什么特点?
答:Map接口下常用的子类有3个:
①HashMap:存储数据采用的哈希表结构,元素的存取顺序不能保证一致。由于要保证键的唯一、不重复,需
要重写键的hashCode()方法、equals()方法。
②LinkedHashMap:存储数据采用的哈希表结构+链表结构。通过链表结构可以保证元素的存取顺序一致;通过哈希表结构可以保证的键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。
③HashTable:底层也是一个哈希表,是一个线程安全的集合,单线程集合,速度慢。不能存储空值,空键。Hashtable在jdk1.2版本之后被更先进的集合取代了。
2.目前为止,我们所学的遍历map集合有几种方式?
截止目前所学的遍历map集合有两种方式:
【keySet遍历方式】通过调用Map.keyset方法获取Map中的所有键,存储在一个Set中,然后遍历这个Set,通过Map.get方法获取每个键对应的值。
【entrySet遍历方式】通过调用Map.entrySet()方法获取Map中的所有键值对Entry,存储在一个Set中,然后遍历这个Set,通过Entry.getKey()和Entry.getValue()方法分别获取Entry对象中的键和值。
3.请用自己的语言描述你所了解的集合体系
集合体系是我们需要存储多个数据,且个数不确定时(无法用数组),使用的容器。
集合体系有两个主要分支:单列集合【Collection】和双列集合【Map】。
【Collection】接口下有两个主要接口【List】和【Set】
【List】接口:
通常表示一个列表(数组、队列、链表、栈等),有序的,
元素是可以重复的,通过索引就可以精确的操作集合中的元素,List接口的特有方法,都是围绕索引定义的。
List获取元素的方式有两种:一种是迭代,还有一种是遍历+get
List接口是支持对元素进行增删改查动作的(add,set,get,remove)
常用的实现类为【ArrayList】和【LinkedList】,还有不常用的【Vector】(已过时)。
1、ArrayList:是数组结构,长度是可变的,原理是(创建新数组+复制数组),查询速度快,增删较慢,不同步。ArrayList不是线程安全的,只能用在单线程环境下
2、LinkedList:是基于双向循环链表实现的,是链表结构,不同步的,增删速度快,查询较慢。
3、Vector:可以增长的数组结构,同步的,效率很低,查询增删凑慢,已过时。
【Set】接口:
不允许包含重复的元素(通过hashcode和equals函数保证),一般不保证顺序,而且方法和Collection一致,set集合取出元素的方式只有一种:迭代器。 常用的实现类为【HashSet】和【LinkedHashSet 】。HashSet是无序的,LinkedHashSet是有序的。一般需要重写hashcode和equals方法。 【Map】 是一个双列集合,一个元素包含两个值(一个key,一个value)。key是不允许重复的,value是可以重复的。 常用的方法有增put、删remove和查get,同时put还有修改的功能。常用的遍历方式有两种:keySet和entrySet遍历方式 常用的实现类有三个: 【HashMap】:存储数据采用的哈希表结构,元素的存取顺序不能保证一致。由于要保证键的唯一、不重复,需 要重写键的hashCode()方法、equals()方法。 【LinkedHashMap】:存储数据采用的哈希表结构+链表结构。通过链表结构可以保证元素的存取顺序一致;通过哈希表结构可以保证的键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。 【HashTable】:底层也是一个哈希表,是一个线程安全的集合,单线程集合,速度慢。不能存储空值,空键。Hashtable和Vector集合一样,在jdk1.2版本之后被更先进的集合取代了。
|