集合
2018-07-23 本文已影响0人
mrjunwang
Java容器可分为两大类:
-
Collection
-
List
- ArrayList
- LinkedList
- Vector(了解,已过时)
-
Set
-
HashSet
- LinkedHashSet
-
TreeSet
-
-
-
Map
-
HashMap
- LinkedHashMap
-
TreeMap
-
ConcurrentHashMap
-
Hashtable(了解,,已过时)
-
着重标出的那些就是我们用得最多的容器。
一、ArrayList和Vector的区别
共同点:
- 这两个类都实现了List接口,它们都是有序的集合(存储有序),底层是数组。我们可以按位置索引号取出某个元素,允许元素重复和为null。
区别:
-
同步性:
- ArrayList是非同步的
- Vector是同步的
- 即便需要同步的时候,我们可以使用Collections工具类来构建出同步的ArrayList而不用Vector
-
扩容大小:
- Vector增长原来的一倍,ArrayList增长原来的0.5倍
二、HashMap和Hashtable的区别
共同点:
- 从存储结构和实现来讲基本上都是相同的,都是实现Map接口~
区别:
-
同步性:
- HashMap是非同步的
- Hashtable是同步的
- 需要同步的时候,我们往往不使用,而使用ConcurrentHashMapConcurrentHashMap基于JDK1.8源码剖析
-
是否允许为null:
- HashMap允许为null
- Hashtable不允许为null
-
contains方法
- 这知识点是在牛客网刷到的,没想到这种题还会有(我不太喜欢)....
- Hashtable有contains方法
- HashMap把Hashtable的contains方法去掉了,改成了containsValue和containsKey
-
继承不同:
- HashMap<K,V> extends AbstractMap<K,V>
- public class Hashtable<K,V> extends Dictionary<K,V>
三、List和Map的区别
共同点:
- 都是Java常用的容器,都是接口
不同点:
-
存储结构不同:
- List是存储单列的集合
- Map存储的是key-value键值对的集合
-
元素是否可重复:
- List允许元素重复
- Map不允许key重复
-
是否有序:
- List集合是有序的(存储有序)
- Map集合是无序的(存储无序)
四、Collection和Collections的区别
Collection是集合的上级接口,继承它的有Set和List接口
Collections是集合的工具类,提供了一系列的静态方法对集合的搜索、查找、同步等操作
五、Java中HashMap的key值要是为类对象则该类需要满足什么条件?
需要同时重写该类的hashCode()方法和它的equals()方法。
从源码可以得知,在插入元素的时候是先算出该对象的hashCode。如果hashcode相等话的。那么表明该对象是存储在同一个位置上的。
如果调用equals()方法,两个key相同,则替换元素
如果调用equals()方法,两个key不相同,则说明该hashCode仅仅是碰巧相同,此时是散列冲突,将新增的元素放在桶子上
一般来说,我们会认为:只要两个对象的成员变量的值是相等的,那么我们就认为这两个对象是相等的!因为,Object底层比较的是两个对象的地址,而对我们开发来说这样的意义并不大~这也就为什么我们要重写equals()方法
重写了equals()方法,就要重写hashCode()的方法。因为equals()认定了这两个对象相同,而同一个对象调用hashCode()方法时,是应该返回相同的值的!
[集合的基本问题](https://www.jianshu.com/p/80c999ebb5f0)
什么是哈希?
将任意长度的输入,通过散列函数计算后,转为固定长度的输出。输出就是哈希值。