一、Collection 和 Collections 的区别
(更多相关面试题推荐:java面试题)
java.util.Collection 是一个集合框架的父接口。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式。
java.util.Collections 是一个包装类。它包含有各种有关集合操作的静态多态方法。此类不能实例化,就像一个工具类,服务于Java的Collection框架。他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。
二、Set 里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用==还是equals)?它们有何区别?
==:
基本类型:比较的是值是否相同
引用类型:比较的是地址值是否相同
equals():
引用类型:默认情况下,比较的是地址值,可进行重写,比较的是对象的成员变量值是否相同。
如果一个类没有自己定义 equals 方法,它默认的 equals 方法(从 Object 类继承的)就是使用==操作符,也是在比较两个变量指向的对象是否是同一对象,这时候使用equals 和使用==会得到同样的结果,如果比较的是两个独立的对象则总返回 false。
如果你编写的类希望能够比较该类创建的两个实例对象的内容是否相同,那么你必须覆盖 equals方法,由你自己写代码来决定在什么情况即可认为两个对象的内容是相同的。
(相关教程推荐:java入门教程)
三、Iterator的作用是什么
用于遍历集合中的元素,比for 和for each的好处:
不会因为节点的删除报异常,自己写的数据结构也可以实现它。
四、HashSet和TreeSet有什么区别,什么时候用它们?
基本的:
1、TreeSet 是二叉树实现的,Treeset中的数据是自动排好序的,不允许放入null值。
2、HashSet 是哈希表实现的,HashSet中的数据是无序的,可以放入null,但只能放入一个null,两者中的值都不能重复,就如数据库中唯一约束。
3、HashSet要求放入的对象必须实现HashCode)方法,放入的对象,是以hashcode码作为标识的,而具有相同内容的 String对象,hashcode是一样,所以放入的内容不能重复。但是同一个类的对象可以放入不同的实例 。
(视频教程推荐:java视频教程)
时间复杂度:
HashSet是由一个hash表来实现的, 因此,它的元素是无序的。 add),remove),contains)方法的时间复杂度是O1)。
TreeSet是由一个树形的结构来实现的,它里面的元素是有序的。因此,add),remove),contains)方法的时间复杂度是Ologn)。
利用TreeSet保存自定义类对象的时候,自定义所在的类一定要实现Comparable接口,如果没有实现这个接口那么就无法区分大小关系,而且在TreeSet中如果要进行排序,那么就要将所有的字段都进行比较,就是说在TreeSet中是依靠comparato)方法返回的是不是0来判断是不是重复元素的。
TreeSet 依靠的是Comparable 来区分重复数据;
HashSet 依靠的是hashCode)、equals)来区分重复数据。