meta|Java集合面试题看这篇就够了( 三 )


       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 , 有三种情况:
    1. 返回正整数(比较者大于被比较者)
    2. 返回0(比较者等于被比较者)
    3. 返回负整数(比较者小于被比较者)
    4. comparator 接口出自 java.util 包 , 它有一个 compare(object obj1 , object obj2) 方法用来排序 , 返回值同样是int , 有三种情况 , 和compareTo类似 。
它们之间的区别:
  1. 很多包装类都实现了comparable接口 , 像Integer、string等 。 所以直接调用 co1lections.sort() 直接可以使用 。 如果对类里面自带的自然排序不满意 , 而又不能修改其源代码的情况下 , 使用 comparator 就比较合适 。
  2. 此外使用 comparator 可以避免添加额外的代码与我们的目标类耦合 , 同时可以定义多种排序规则 , 这一点是comparable接口没法做到的
  3. 从灵活性和扩展性讲 Comparator 更优 , 故在面对自定义排序的需求时 , 可以优先考虑使用comparator接口 。
9.Collection和Collections有什么区别?
  • Collection :是最基本的 集合接口  , 它提供了对集合对象进行基本操作的通用接口方法 。 一个Collection代表一组Object , 即Collection的元素 。 它的直接继承接口有List , Set 和Queue 。
  • Collections :是不属于Java的集合框架的 , 它是 集合类的一个工具类  。此类不能被实例化  ,服务于Java的Collection框架  。 它包含有关集合操作的静态多态方法 , 实现对各种集合的搜索、排序、线程安全等操作 。
10.说一下PriorityQueue?PriorityQueue 是在 JDK1.5 中被引入的 其与 Queue 的区别在于元素出队顺序是与优先级相关的 , 即总是优先级最高的元素先出队 。
它有这些特点: