Collection和Collections有什么区别?
Collection是java.util下的接口,它是各种集合的父接口,继承于它的接口主要有Set和List;
Collections是java.util下的类,是针对集合的帮助类,提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。
List底层是怎么实现的?双向链表和数组的区别?
在Java中List是一个接口,继承于Collection接口,并定义了添加元素,删除元素,取出元素等对集合操作的抽象方法。
双向链表与数组的区别为:
1.数组必须事先定义固定的长度(元素个数),不能适应数据动态地增减的情况。当数组增加时,可能超出原先定义的元素个数;当数据减少时,造成内存浪费;数组可以根据下标直接存取。
2.链表动态的进行存储分配,可以适应数据动态的增减的情况,且可以方便的插入、删除数据项;而数组中插入、删除数据项时,需要移动其他数据项,非常繁琐。
简述HashTable原理,并说明它和HashMap区别?
HashTable原理:HashTable是基于哈希表的实现。通过使用put方法把对象进行关联,需要时用get取 得与key关联的值对象。还可以查询某个对象的索引值等等。
二者都实现了Map接口,主要区别在于:
1.HashMap没有排序,允许一个null键和多个null值,HashTable不允许;
2.HashMap把HashTable的contains方法去掉了,改成containsvalue和containskey
3.HashTabl继承自Dictionary类,HashMap是Java1.2引进的Map接口的实现
4.HashTable的方法是Synchronize的,而HashMap不是,在多个线程访问HashTable时,不需要自己为它的方法实现同步,而HashMap就必须为之提供同步。
HashMap和HashSet有什么关系?
放进HashSet中对象,其实是用这个HashMap的key来存储的。当调用HashSet的add方法时,实际是向HashMap中增加了一行(key-value对),该行的value就是一个Object类型的常量。
ArrayList和LinkedList的大致区别如下:
1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
List、Set、Map的区别?
1、List(有序、可重复)
List里存放的对象是有序的,同时也是可以重复的,List关注的是索引,拥有一系列和索引相关的方法,查询速度快。因为往list集合里插入或删除数据时,会伴随着后面数据的移动,所有插入删除数据速度慢。
2、Set(无序、不能重复)
Set里存放的对象是无序,不能重复的,集合中的对象不按特定的方式排序,只是简单地把对象加入集合中。
3、Map(键值对、键唯一、值不唯一)
Map集合中存储的是键值对,键不能重复,值可以重复。根据键得到值,对map集合遍历时先得到键的set集合,对set集合进行遍历,得到相应的值。