面试准备之集合接口及底层及特点描述

基本上找到的上层就是Collection、Map、Dictionary啦~,

首先说一下Collection和Map的区别,Collection是链表数组类型的集合List、Set,只包含一种数据结构,而Map是键值对类型的集合,包含着AbstractMap。

下面说一下List和Set的区别,其实很简单啦  List有序而Set无序,而且List可以添加重复的元素哦 Set可不行,

这里引用一下,说明一下Set和List的区别

 

List:1.可以允许重复的对象。

 2.可以插入多个null元素。

        3.是一个有序容器,保持了每个元素的插入顺序,输出的顺序就是插入的顺序。

        4.常用的实现类有 ArrayList、LinkedList 和 Vector。ArrayList 最为流行,它提供了使用索引的随意访问,而 LinkedList 则对于经常需要从 List 中添加或删除元素的场合更为合适。(因为链表的增加和删除比数组快,注意底层)

Set:1.不允许重复对象

  2. 无序容器,你无法保证每个元素的存储顺序,TreeSet通过 Comparator  或者 Comparable 维护了一个排序顺序。

        3. 只允许一个 null 元素

        4.Set 接口最流行的几个实现类是 HashSet、LinkedHashSet 以及 TreeSet。最流行的是基于 HashMap 实现的 HashSet;TreeSet 还实现了 SortedSet 接口,因此 TreeSet 是一个根据其 compare() 和 compareTo() 的定义进行排序的有序容器。

https://www.cnblogs.com/IvesHe/p/6108933.html

这时候问题来了,一个宝宝问:那Map接口下的集合就不能排序了嘛?一下是解决方案

  1. public static void main(String[] args){

  2.  
  3. Map<String,String> map = new HashMap();

  4. map.put("A","@");

  5. map.put("W","@");

  6. map.put("E","@");

  7. map.put("Q","@");

  8. map.put("R","@");

  9. map.put("B","@");

  10. map.put("U","@");

  11.  
  12. //这样能得到map的key和value,在某些应用中,这很有用

  13. for(Entry<String,String> entry:map.entrySet()){

  14. System.out.println(entry.getKey()+""+entry.getValue());

  15. }

  16.  
  17. //如果想对Map集合的元素按照key进行排序怎么办?如下,用Collections.sort方法

  18. List<Map.Entry<String, String>> list = new LinkedList<>(map.entrySet());

  19.  
  20. Collections.sort(list, new Comparator<Map.Entry<String, String>>() {

  21. @Override

  22. public int compare(Map.Entry<String, String> o1, Map.Entry<String, String> o2) {

  23. return (o1.getKey()).compareTo(o2.getKey());

  24. }

  25. });

  26.  
  27. System.out.println(list);

  28. }

 

然后就开始说Map下的hashMap TreeMap 和ConcurrentHashMap了

HashMap太多了  主要就是线程不安全,但人家速度快啊,那为了解决这个问题ConcurrentHashMap来了

ConcurrentHashMap有 concurrencyLevel:并行级别、并发数、Segment 数,怎么翻译不重要,理解它。默认是 16,也就是说 ConcurrentHashMap 有 16 个 Segments,所以理论上,这个时候,最多可以同时支持 16 个线程并发写,只要它们的操作分别分布在不同的 Segment 上。这个值可以在初始化的时候设置为其他值,但是一旦初始化以后,它是不可以扩容的。这里不赘述,相信可参考http://www.importnew.com/28263.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章