每天来点面试题(二)

(1)LIst 接口有那些实现类,有什么区别,应用场景有什么区别?

有三个 ArrayLIst , LinkedLIst  , 还有 Vector

底层数据结构不一样,

ArrayList 是 动态数组实现的,

LinkedList 是链表实现的,

Vector 和 ArrayLIst 实现方式类似,但是 是线程安全的(也就是有 加锁解锁 的操作,然后就会有额外开销)。

 

对于查找数据和少量的增删改 完全可以用 ArrayLIst,因为数组的查找可以直接根据下标(索引)查找,速度特别快,

而 LinkedListt 适合大量的增删改 ,因为是链表数据结构 ,所以数据不需要像数组那样同步移动,只需要修改链表节点的头尾节点即可,

而 Vector 就应用比较少了,适合那些对多线程操作要求比较高的,保证线程的同步(同一时刻只有一个线程在操作,线程之间通信有花销)。

(2)遍历 Map 的几种方式,以及相应适用场景

有四种

增强 for 循环

for (String key : map.keySet()) {
System.out.println(key+map.get(key));
}

迭代器

  while (it.hasNext()) {
   Map.Entry<String, String> entry = it.next();
   System.out.println(entry.getKey() + entry.getValue());
  }

entrySet

  for (Map.Entry<String, String> entry : map.entrySet()) {
   System.out.println(entry.getKey() +  entry.getValue());
  }

以及keySet

Iterator<String> iterator = map.keySet().iterator();
while (iterator.hasNext()) {
String key = iterator.next();
System.out.println(key +  map.get(key));
}

知道了有这四种方式之后是不是需要了解一下到底那个速度快点,经常用的又是哪个,

网上找了找,发现有人做了测试,

增强 for 循环使用方便,但是大数据处理起来会慢点,

迭代大概是 for 循环的 1.5 倍,

entrySet 比 KeySet 快很多,1.5 倍左右。

posted @ 2017-07-19 14:35  找*寻*  阅读(144)  评论(0编辑  收藏  举报
TOP