Collection/Set/List的联系和区别?
- Collection是java集合的顶级接口,存储一组不唯一、无序的对象。
- List接口和Set接口是Collection接口的2个子接口。
- List接口存放一组不唯一、有序的对象。
- Set接口存放一组唯一、无序的对象。
Set和List的特点和区别?
- List是有序的Collection,使用此接口,能够精确的控制每个元素插入的位置。用户能够使用索引来访问List元素。
- Set是存放一组唯一的、无序的对象,和List使用方法类似,但是不可以使用索引。
Collection接口中常用的方法?
- add(Object obj) 添加一个对象的引用
- size() 容器中元素的数量
- remove(Object obj) 移除一个对象
- removeAll(Collection co) 删除与集合co中相同的元素
- retainAll(Collection co) 只保留与集合co中相同的元素
- contains(Object obj) 判断当前集合是否有obj对象
- isEmpty() 判断当前集合是否为null
- iterator() 生成此集合的迭代器
ArrayList、LinkedList的区别?
- ArrayList和LinkedList都实现了List接口,都具备List中元素有序、不唯一的特点。ArrayList实现了长度可变的数组,在内存的分配连续空间。遍历元素和随机访问元素的效率比较高。
- LinkedList采用了链表的存储方式。插入、删除的效率比较高。
HashSet和TreeSet的区别?
- HashSet采用的是HashTable哈希表存储结构,优点是添加速度快,查询速度快,删除速度快。缺点是无序。
- TreeSet采用的是二叉树的存储结构,优点是有序查询速度比HashSet快,缺点是查询速度没有HashSet快。
使用HashSet存储自定义对象,为什么要重写hashCode()和equals()?
HashSet存储用的Hash表结构,哈希表需要用到hashCode()和equals()方法。HashCode()产生hash值以计算内存位置。
Map中,key能否重复,如果重复,会发生什么事情?
key是无序的,唯一的,如果添加重复的key,会把前面的key的值给覆盖掉。
采用增强for循环来遍历没有指定泛型的List或是Set,可以遍历吗?
可以遍历,遍历其Object
如果想在遍历的时候删除元素,采用哪种遍历方式比较好?
采用Iterator接口,Iterator有移除元素的remove方法
资源文件有什么作用?
资源文件是用来配置信息的,如数据库信息、键值对信息…。程序里要有个方法来读取资源文件里面的配置信息。如果没有资源文件,那么配置信息就要写在代码里,需要修改信息的时候,就不得不修改代码。有了资源文件之后,需要修改信息,直接修改资源文件,不用修改代码,保证了代码的封装性。
Vector和ArrayList的区别和联系?
- 实现原理相同,功能相同,都是长度可变的数组结构,很多情况下可以相互通用。
- Vector是早期的JDK接口,ArrayList是替代Vector接口的新接口
- Vector线程安全,ArrayList重速度轻安全,是线程不安全的,
长度增长时,Vector默认增长1倍,ArrayList增长50%
HashTable和HashMap的区别联系?
- HashTable是早期JDK提供的接口,HashMap是新JDK提供的接口
- HashTable继承Directory类 HashMap实现Map接口
- HashTable线程安全,HashMap线程不安全
- HashTable不允许null HashMap允许null
JAVA主要容器的选择依据和重要场景
- HashTable和Vector是线程安全的,因此在多线程的情况下使用,HashMap和ArrayList是线程不安全的,建议在单线程情况下使用
- 除去排序时使用TreeSet和TreeMap 其它时候都应该使用HashSet和HashMap 效率更高
- ArrayList由数组构建 LinkedList由双向链表构建 在删除和添加频繁操作的时候使用LinkedList 在查询频繁的操作时候使用ArrayList