• 57-71 容器考点


    一、Collection框架结构,List,Set,Map三个接口的区别,存取元素的特点。你所知道的集合类有哪些,主要方法?

    注意List,Set继承自Collection,Map不继承Collection。

    二、Collection和Collections区别

    1、java.util.Collection接口:是集合类的上级接口,继承他的接口主要有Set和List。

    2、java.util.Collections类:是针对集合类的一个帮助类,它提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

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

      Comparable 和 Comparator 都是用来实现集合中元素的比较、排序的。只是 Comparable 是在集合内部定义的方法实现的排序,而Comparator 是在集合外部实现的排序。所以,如想实现排序,就需要在集合外定义 Comparator 接口的方法或在集合内实现 Comparable 接口的方法。

    1、实现java.lang.Comparable接口(集合本身实现该接口)

      重写该接口的唯一方法 int compareTo(T o)方法。

    public class User implements Comparable{}//是User类继承该接口
    使用时Arrays.sort(users);

    2、实现java.util.Comparator接口(集合外定义一个类实现该接口)

      重写该接口的两个方法:int compare(T o1, T o2)和boolean equals(Object obj)。

    public class SampleComparator implements Comparator{}//不是User类继承该接口
    使用时Arrays.sort(array, new SampleComparator()); //需传入该接口的实例化对象

    四、各种容器类的区别

    1、ArrayList和Vector的区别

    相同点:二者都继承了List接口,是有序集合,允许重复元素,使用数组方式存储数据,可以按索引号取出元素。(HashSet之类的集合不允许重复,不可按索引号取元素)

    区别:

    (1)Vector是线程安全的,适合多线程的情况;ArrayList线程不安全,效率高。

      注意:Vector和Hashtable是旧的,线程安全的(即方法是synchronized的);ArrayList与HashMap是后来才提供的,线程不安全,多线程访问时需要为它提供外同步。

    (2)二者都有一个初始容量(可以自己设置),当存储元素超过容量时,Vector默认增长为原来两倍(可以自己设置);ArrayList增长为原来1.5倍(不可自己设置)。

    2、HashMap和Hashtable区别

    (1)HashMap实现Map接口,Hashtable实现Map接口,同时也继承陈旧的Dictionary类。

    (2)HashMap非线程安全,效率高;Hashtable线程安全。

    (3)HashMap允许有一个null key;Hashtable不允许null key。

    (4)迭代 HashMap 采用快速失败机制,而 Hashtable 不是,所以这是设计的考虑点。

    补充:我们知道java.util.HashMap不是线程安全的,因此如果在使用迭代器的过程中有其他线程修改了map,那么将抛出ConcurrentModificationException,这就是所谓fail-fast策略。

    3、ArrayList,Vector,LinkedList的存储性能和特点

      三者都实现List接口,其中ArrayList和Vector继承AbstractList,LinkedList继承AbstractSequentialList。

    (1)ArrayList和Vector都是使用数组方式存储元素,查找快,插入慢;

      LinkedList使用双向链表实现存储,查找慢,插入快。LinkedList提供了一些方法,它可以被当做堆栈和队列使用。

    (2)ArrayList和LinkedList线程不安全;Vector线程安全。

    五、去掉Vector集合中的重复元素

    HashSet set = new HashSet(vector);

    六、两个对象值相同(x.equals(y)==true),但有不同的hashcode。这句话对吗?

      对!

      如果对象保存在HashSet或HashMap中,那么如果x.equals(y)==true,则hashcode必须相等。

      如果对象不是保存在HashSet或HashMap中,则hashcode可以不等。例如ArrayList中的对象可以不重写hashcode(),当然,我们建议重写,因为关于hashcode的常规规定是:如果根据 equals(Object) 方法,两个对象是相等的,那么对这两个对象中的每个对象调用 hashCode 方法都必须生成相同的整数结果。

    七、TreeSet里面放对象,如果同时放入父类和子类对象,比较时使用的是父类的还是子类的compareTo(),还是抛异常?

      当前add方法放入的是哪个对象,就调用那个对象的compareTo方法,至于这个方法怎么做,就要看它如何被重写的。

  • 相关阅读:
    桌面应用程序ClickOne打包部署
    Linux系统基础5周入门精讲(Linux发展过程)
    Linux系统基础5周入门精讲(服务器介绍)
    算法进阶--动态规划
    行为型模式
    结构型模式
    设计模式
    哈希表--树
    数据结构
    查找排序相关面试题
  • 原文地址:https://www.cnblogs.com/seven7seven/p/3940171.html
Copyright © 2020-2023  润新知