(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 倍左右。