• 如何回答关于List和Set的问题

    发布:51Code 时间: 2017-06-20 15:33

  • 首先,先关注其共同点。 List和Set都是继承自Collection接口。 接下来我们着重分析它们的不同点。 List特点:元素有放入顺序,元素可以重复; Set特点:元素无放入顺序,元素不可重复(...

  • 首先,先关注其共同点。

    List和Set都是继承自Collection接口。   接下来我们着重分析它们的不同点。

    List特点:元素有放入顺序,元素可以重复;

    Set特点:元素无放入顺序,元素不可重复(注意:元素虽然没有放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置是固定的) 。 

           List接口三个常用实现类:LinkedList,ArrayList,Vector ;

    Set接口三个常用实现类:HashSet(底层由HashMap实现),LinkedHashSet,TreeSet。

    List (inteface) 

           次序是List 的最重要特点,它确保维护元素特定的顺序。

           ArrayList 允许对元素快速随机访问。

           LinkedList 对顺序访问进行优化,向List 中间插入与移除的开销并不大,具有addFrist(),addLast(),getFirst(),getLast(),removeFirst()和removeLast()。这些方法使得LinkedList可当作堆栈/队列/双向队列。

        Set (inteface) 

           存入Set 的每个元素必须唯一,不保证维护元素的次序.加入Set 的Object必须定义equals()方法 。

           HashSet 为快速查找而设计的Set ,存入HashSet对象必须定义hashCode()。

           TreeSet  保护次序的Set ,使用它可以从Set 中提取有序序列。

           LinkedHashSet  具有HashSet的查询速度,且内部使用链表维护元素的次序。

           它们之间的存储方式不一样: 

           TreeSet采用红黑树的树据结构排序元素. 

           HashSet采用散列函数,这是专门为快速查询而设计的. 

           LinkedHashSet内部使用散列以加快查询速度,同时使用链表维护元素的次序. 

           使用HashSet/TreeSet时,必须为类定义equals();而HashCode()是针对HashSet,作为一种编程风格,当覆盖equals()的时候,就应该同时覆盖hashCode().

  • 上一篇:内存溢出和内存泄漏的区别

    下一篇:Android窗口小部件APP Widget

网站导航
Copyright(C)51Code软件开发网 2003-2018 , 沪ICP备05003035号