java基础知识-Java中的集合

知识点:

java中分为数组和集合两大类,这两个容器都是可以存储数据的方法

数组和集合的区别:(1)数组长度不可变化而且无法保存具有映射关系的数据;集合类用于保存数量不确定的数据,以及保存具有映射关系的数据。(2)数组元素既可以是基本类型的值,也可以是对象;集合只能保存对象。

Java集合类主要由两个接口Collection和Map。

Collection接口派生出来的常用集合有:

(主要)ArrayList、LinkedList

(次要)HashSet、TreeSet、Vector(过去式)

Map接口派生出来的常用集合有:

(主要)HashMap

(次要)TreeMap

简要说明List、Set、Map的区别

List集合:有序、可重复集合,集合中每个元素都有其对应的顺序索引。实现List接口的集合主要有:ArrayList、LinkedList、Vector。

Set集合:有序,不可重复集合,重复元素会覆盖掉。实现Set接口的集合主要有:HashSet、TreeSet。

Map集合:以键值对的方式存储,元素无存入顺序,元素不可重复,重复元素会覆盖掉,key、value都可以为null实现Map接口的集合主要有:HashMap、HashTable、TreeMap。


集合常见的面试题:

1. ArrayList和LinkedList有什么区别?

ArrayList 有序,可重复的集合表示,底层实现是一个数组    查找快增删慢

LinkedList 有序,可重复的集合表示,底层实现是一个链表,查找慢增删快

ArrayList是数组的数据结构,LinkedList是链表的数据结构。

随机访问的时候,ArrayList的效率比较高,因为LinkedList要移动指针,而ArrayList是基于索引(index)的数据结构,可以直接映射到。

插入、删除数据时,LinkedList的效率比较高,因为ArrayList要移动数据。

LinkedList比ArrayList开销更大,因为LinkedList的节点除了存储数据,还需要存储引用。

2. ArrayList和Vector有什么区别?

ArrayList 非线程安全的

Vector 是线程安全的

3. HashMap和HashTable有什么区别?

线程安全性不同:HashMap非线程安全,HashTable线程安全

继承的父类不同:Hashtable继承自Dictionary类,而HashMap继承自AbstractMap类。但二者都实现了Map接口

key和value是否允许null值:Hashtable中,key和value都不允许出现null值

两个遍历方式的内部实现上不同

4. ArrayList,Vector,LinkedList的存储性能和特性

ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法线程安全,性能上比ArrayList差。

而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,所以索引数据较慢,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。

5. HashMap的存储结构以及工作原理和什么时候扩容

jdk1.7:Hashmap实际上是一个数组和链表的散列表  jdk1.8:当链表中的元素超过了 8 个以后,会将链表转换为红黑树

以键值对(key-value)的形式存储元素的。HashMap需要一个hash函数,它使用hashCode()和equals()方法来向集合/从集合添加和检索元素。当调用put()方法的时候,HashMap会计算key的hash值,然后把键值对存储在集合中合适的索引上。如果key已经存在了,value会被更新成新值。HashMap的一些重要的特性是它的容量(capacity),负载因子(loadfactor)和扩容极限(thresholdresizing)

当hashmap中的元素个数超过数组大小loadFactor(加载因子)时,就会进行数组扩容,loadFactor的默认值为0.75

6.Comparable和Comparator接口是干什么的?列出它们的区别

Java提供了只包含一个compareTo()方法的Comparable接口。这个方法可以个给两个对象排序。具体来说,它返回负数,0,正数来表明输入对象小于,等于,大于已经存在的对象。Java提供了包含compare()和equals()两个方法的Comparator接口。compare()方法用来给两个输入参数排序,返回负数,0,正数表明第一个参数是小于,等于,大于第二个参数。equals()方法需要一个对象作为参数,它用来决定输入参数是否和comparator相等。只有当输入参数也是一个comparator并且输入参数和当前comparator的排序结果是相同的时候,这个方法才返回true。

你可能感兴趣的:(java基础知识-Java中的集合)