集合体系:

Iterable
->Collection
->List
->ArrayList
->LinkedList
->Vector
->Stack

->Set
->HashSet
->TreeSet
Map
->Hashtable
->HashMap
->LinkedHashMap

Collections,不属于集合,是集合类的工具类
Arrays,不属于集合类,是数据对象的工具类

1、Collection框架中实现比较要实现什么接口

Comparable/Comparator

2、ArrayList和Vector的区别

  1. 线程同步,Vector线程安全,ArrayList线程不安全
    2. 效率问题,Vector效率低,ArrayList效率高
    3. 增长数量,Vector以2倍增长,ArrayList以1.5倍增长

    3、HashMap和Hashtable的区别

  2. 线程同步,Hashtable线程安全,HashMap线程不安全
    2. 效率问题,Hashtable效率低,HashMap效率高
    3. HashMap可以使用null作为key,Hashtable不可以使用null为key
    4. HashMap使用的是新实现,继承AbstractMap,而Hashtable是继承Dictionary类,实现比较老
    5. Hash算不同,HashMap的hash算法比Hashtable的hash算法效率高
    6. HashMap把Hashtable的contains方法去掉了,改成containsValue和containsKey。因为contains方法容易让人引起误解。
    7. 取值不同,HashMap用的是Iterator接口,而Hashtable中还有使用Enumeration接口

    4、List和 Map区别?

    一个是存储单列数据的集合,另一个是存储键和值的双列数据的集合,List中存储的数据是有顺序,并且允许重复;Map中存储的数据是
    没有顺序的,其键是不能重复的,它的值是可以有重复的。
    1. List有重复值,Map没有重复key,但可以有重复值
    2. List有序,Map不一定有序
    3. List只能存单列值,Map可以存双列值

    5、List, Set, Map是否继承自Collection接口?

    List,Set是,Map不是

    6、List、Map、Set三个接口,存取元素时,各有什么特点?

    List使用get(index)取值,也可以使用Iterator、toArray取值
    Set只能通过Iterator、toArray取值
    Map取值使用get(key)取值,也可以使用keySet取键值集合,也可使用values取值集合,entrySet取全部映射。

    7、说出ArrayList,Vector, LinkedList的存储性能和特性

  3. ArrayList和Vector使用数组存储元素;LinkedList使用链表存储元素
    2. ArrayList和Vector插入删除数据时,需要搬运数据,效率较差;LinkedList使用链表,不需要搬运数据,效率高
    3. ArrayList和Vectory查询时,按数组下标查询,不需要遍历,效率高;LinkedList需要遍历,查询效率底

    8、去掉一个Vector集合中重复的元素

  4. 自行遍历,用另外一个Vector来判断是否有重复
    2. 用Set(TreeSet或HashSet)来去重
    3. 用Apache的CollectionUtil工具类去重
    还有一种简单的方式,HashSet set = new HashSet(vector);

    9、Collection和 Collections的区别。

    Collection是集合类的上级接口,继承与他的接口主要有Set和List.
    Collections是针对集合类的一个工具类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

    10、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用==还是equals()?它们有何区别?

    Set里的元素是不能重复的,元素重复与否视具体情况而定:
    1. HashSet使用equals比较
    2. TreeSet使用compareTo进行比较

    11、你所知道的集合类都有哪些?主要方法?

    最常用的集合类接口是List 和 Map。
    List的具体实现包括ArrayList、Vector、LinkedList,它们是可变大小的列表,比较适合构建、存储和操作任何类型对象的元素列表。List适用于按数值索引访问元素的情形。
    Set的具体实现包括HashSet和TreeSet,它们也是可变大小集合,但不适合用索引取值。
    Map 提供了一个更通用的元素存储方法。Map集合类用于存储元素对(称作”键”和”值”),其中每个键映射到一个值。
    ArrayList/Vector、LinkedList
    HashSet/TreeSetàSet
    Properties/HashTable/TreeMap/HashMap

List的主要方法有:
add、get、remove、set、iterator、contains、addAll、removeAll、indexOf、toArray、clear、isEmpty
Set的主要方法有:
add、remove、iterator、contains、addAll、removeAll、toArray、clear、isEmpty
Map的主要方法有:
put、get、keySet、values、entrySet、clear、remove、isEmpty

12、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?

  1. equals等,hashCode同,因此重写equals方法必须重写hashCode
    2. hashCode等,equals不一定同,但hashCode最好散列化
    3. 任何对象equals null都得false
    4. 没有继承关系的两个类,equals都得false
    5. 重写equals方法的类最好是值类,即不可变

    13、TreeSet里面放对象,如果同时放入了父类和子类的实例对象,那比较时使用的是父类的compareTo方法,还是使用的子类的compareTo方法,还是抛异常!

    (应该是没有针对问题的确切的答案,当前的add方法放入的是哪个对象,就调用哪个对象的compareTo方法,至于这个compareTo方法怎么做,就看当前这个对象的类中是如何编写这个方法的)