1.Collection和Collections的区别:
Collections:
如果提供给它们的集合或类对象为null,则此类的方法都抛出一个NullPointerException 。
该类中包含的多态算法的文档通常包括实现的简要说明 。 这些描述应被视为实施说明 ,而不是说明书的一部分 。 只要规范本身得到遵守,实现者就可以随意替代其他算法。 (例如,sort使用的算法不一定是一个mergeesort,但它必须是稳定的 。)
如果集合不支持适当的突变原语,例如set方法,则该类中包含的“破坏性”算法,即修改其操作的集合的算法被指定为抛出UnsupportedOperationException 。 如果调用对集合没有影响,这些算法可能但不是必须抛出此异常。 例如,在已经排序的不可修改列表上调用sort方法可以抛出UnsupportedOperationException 。
这个班是Java Collections Framework的会员 。
Collection:
包或多重集 (可能包含重复元素的无序集合)应直接实现此接口。
所有通用的Collection实现类(通常通过其子接口间接实现88446144404803)应提供两个“标准”构造函数:一个void(无参数)构造函数,它创建一个空集合,以及一个构造函数, Collection ,它创建一个与其参数相同的元素的新集合。 实际上,后一个构造函数允许用户复制任何集合,生成所需实现类型的等效集合。 没有办法强制执行此约定(因为接口不能包含构造函数),而是所有Java平台库中的通用Collection实现。
包含在该界面中的“破坏性”的方法,即,修改其经营的收集方法,被指定抛出UnsupportedOperationException如果此collection不支持该操作。 如果是这样的话,可能会,但不要求这些方法,抛出一个UnsupportedOperationException如果调用会对收集没有影响。 例如,如果要添加的集合为空,则可以在不可修改的集合上调用addAll(Collection)
方法,但不是必须抛出该异常。
Some collection implementations have restrictions on the elements that they may contain.例如,一些实现禁止空元素,有些对它们的元素的类型有限制。 尝试添加不合格元素会引发未经检查的异常,通常为NullPointerException或ClassCastException 。 尝试查询不合格元素的存在可能会引发异常,或者可能只是返回false; 一些实现将展现出前者的行为,一些实现将展现出后者。 更一般来说,尝试对不符合条件的元素进行操作,其完成不会导致将不合格元素插入到集合中可能会导致异常,或者可能会成功执行该选项。 此异常在此接口的规范中标记为“可选”。
每个集合决定自己的同步策略。 在没有实现的更强保证的情况下,未定义的行为可能是由于对由另一个线程进行突变的集合的任何方法的调用而导致的; 这包括直接调用,将集合传递给可能执行调用的方法,并使用现有的迭代器来检查集合。
在集合框架接口的许多方法在来定义equals
方法。 例如,对于在本说明书contains(Object o)
方法表示:“返回true当且仅当这个集合包含至少一个元素e使得(o==null ? e==null : o.equals(e))”。 该规范不应该被解释为意味着具有非空参数调用o Collection.contains会导致o.equals(e)被调用任何元素e。 实现可以自由地实现优化,从而避免equals调用,例如,首先比较两个元素的哈希码。 ( Object.hashCode()
规范保证具有不等的哈希码的两个对象不能相等。)更一般地,各种Collections Framework接口的实现可以随意使用底层Object
方法的指定行为,无论执行者认为合适。
执行递归遍历集合的一些集合操作可能会失败,而自引用实例的异常会导致集合直接或间接包含其自身。 这包括clone()
, equals()
, hashCode()
和toString()
方法。 实现可以可选地处理自引用场景,然而大多数当前实现不这样做。
此接口是成员Java Collections Framework 。
-
实现要求:
-
默认方法实现(继承或其他)不应用任何同步协议。
如果
Collection
实现具有特定的同步协议,那么它必须覆盖默认实现以应用该协议。 - 2.Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用==还是equals()?它们有何区别?
- "=="不仅判断内容是否相同,还判断内存地址是否相同;
- "equals()"仅判断内容是否相同。
- 3.List,Set,Map是否继承自Collection接口?
- 答:都是继承自Collection接口的集合接口。
- 4.两个对象值相同(x.equals == true),但却可有不同的Hash code,这句话对不对?
- 答:因为两个对象的内存地址不同,总哈希码值也就不同,所以这句话对。
- 5.说出ArrayList,Vector,LinkedList的存储性能和特性。
- 答: 存储性能: 特性:
- ArrayList 底层是数组结构,查询快、 不同步、不安全、
- 增删慢。 效率高
- Vector 底层是数组结构,查询快、 同步、安全、效率低
- 增删慢。
- LinkedList 底层是链表结构,查询慢、 不同步、不安全、效 率高
- 增删快。
- 6.HashMap和Hashtable的区别。
- 答:只有唯一区别-安全问题,Hashtable较为安全。
- 7.ArrayList和Vector的区别,HashMap和Hashtable的区别。
- 答:前者特性互为相反,后者有唯一区别问题-安全问题。