list.add(\"aaa\");
list.add(\"bbb\");
list.add(\"ccc\");
//for循环遍历
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
//Iterator遍历
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
//foreach遍历
for (String s : list) {
System.out.println(s);
???面试官追问:那么对于以上三种遍历方式应该如何选取呢?
在Java集合框架中 , 提供了一个 RandomAccess
接口 , 该接口没有方法 , 只是一个标记 。 通常用来标记List的实现是否支持RandomAccess 。 所以在遍历时 , 可以先判断是否支持RandomAccess ( list instanceof RandomAccess) , 如果支持可用for循环遍历 , 否则建议用Iterator或 foreach遍历 。
8.comparable和comparator的区别?
comparable
接口出自java.lang
包 , 可以理解为一个内比较器 , 因为实现了comparable接口的类可以和自己比较 , 要和其他实现了Comparable接口类比较 , 可以使用compareTo(objectobj)
方法 。 compareTo方法的返回值是int , 有三种情况:
- 返回正整数(比较者大于被比较者)
- 返回0(比较者等于被比较者)
- 返回负整数(比较者小于被比较者)
comparator
接口出自java.util
包 , 它有一个compare(object obj1 , object obj2)
方法用来排序 , 返回值同样是int , 有三种情况 , 和compareTo类似 。
- 很多包装类都实现了comparable接口 , 像Integer、string等 。 所以直接调用
co1lections.sort()
直接可以使用 。 如果对类里面自带的自然排序不满意 , 而又不能修改其源代码的情况下 , 使用comparator
就比较合适 。
- 此外使用
comparator
可以避免添加额外的代码与我们的目标类耦合 , 同时可以定义多种排序规则 , 这一点是comparable接口没法做到的
- 从灵活性和扩展性讲
Comparator
更优 , 故在面对自定义排序的需求时 , 可以优先考虑使用comparator接口 。
Collection
:是最基本的 集合接口 , 它提供了对集合对象进行基本操作的通用接口方法 。 一个Collection代表一组Object , 即Collection的元素 。 它的直接继承接口有List , Set 和Queue 。
Collections
:是不属于Java的集合框架的 , 它是 集合类的一个工具类 。此类不能被实例化 ,服务于Java的Collection框架 。 它包含有关集合操作的静态多态方法 , 实现对各种集合的搜索、排序、线程安全等操作 。
PriorityQueue
是在 JDK1.5 中被引入的 其与 Queue
的区别在于元素出队顺序是与优先级相关的 , 即总是优先级最高的元素先出队 。它有这些特点: