java中的HashMap的工作原理是什么?
java中的HashMap是以键值对的形式存在的。HashMap需要一个hash函数,它使用hashCode()和equals()方法来向集合添加和检索元素,当调用put()方法时,
HashMap会计算key的hash值,然后把键值对存储在集合中合适的索引上。如果key已经存在了,value会被更新成新值。HashMap还有一些重要特性:它的容量capacity,负载因子load factor和扩容极限threshold reszing
hashCode()和equals()方法的重要性体现在哪些方面?
java中的HashMap使用hashCode()和equals()方法来确定键值对的索引,当根据键获取值的时候也会用到这两个方法。如果没有正确的实现这两个方法,两个
不同的键可能会有相同的hash值,因此,可能会被集合人为是相等的。而且,这两个方法也用来发现重复元素。所以这两个方法的实现对HashMap的精确性和正确性是
至关重要的。
HashMap和Hashtable有什么区别?
HashMap和Hashtable都实现了Map接口,因此有很多相似的特性。但是有以下不同点:
HashMap允许键值为null,而Hashtable不允许键值为null.
Hashtable是线程安全的,HashMap不是线程安全的
HashMap提供了可供应用迭代的键的集合。另一方面,Hashtable提供了对键的列举(Enumeration)
数组(Array)和列表(ArrayList)有什么区别?什么时候应该使用Array而不是ArrayList?
不同点:
Array可以包含基本类型和对象类型,ArrayList只能包含对象类型
Array大小是固定的,ArrayList的大小是动态变化的
ArrayList提供了等多的方法和特性,比如:addAll(),removeAll(),iterator()等等
对于基本类型数据,集合使用自动装箱来减少编码工作量。但是,当处理固定大小的基本数据类型的时候,这种方式相对较慢。
ArrayList和LinkedList有什么区别?
ArrayList和LinkedList都是线了List接口,他们具有以下不同点:
ArrayList是基于索引的数据接口,它的底层是数组。他可以在O(1)时间复杂度对元素进行随机访问。与此同时,LinkedList是以元素列表的形式存
储它的数据,每一个元素都和它的前一个和后一个元素链接在一起,在这种情况下,查找某个元素的时间复杂度是O(n).
LinkedList比ArrayList更占内存,因为LinkedList为每一个结点存储了两个引用,一个指向前一个元素,一个指向下一个元素。
Comparable和Comparator接口是干什么的》列出他们的区别?
java提供了只包含一个compareTo()方法的Comparable接口。这个方法可以给两个对象排序。具体来说,他返回负数,0,整数来表明输入对象小于,等于,>大于已经存在的对象。
java提供了包含compare()和equals()方法的comparator接口。compare()方法用来给两个输入参数排序,返回负数,0,正数表明第一个参数是小于,等于,
大于第二个参数。equals()方法需要一个对象作为参数,他用来决定输入参数是否和comparator相等。只有当输入参数也是一个comparator并且输入参数和当前comparator的排序结果是相同的时候,这个方法才返回ture.
什么是java优先级队列?
java优先级队列是一个基于优先级堆的无界队列,它的元素是按照自然顺序排序的
如何权衡使用有序数组还是无序数组?
有序数组的好处是查找时间复杂度为O(log n),而无序数组是O(n)。有序数组的缺点是插入操作的时间复杂度为O(n),因此值大的元素需要往后移动给新来>的元素提供位置。相反,无序数组的插入时间复杂度为常量O(1)。
Enumeration接口和Iterator接口的区别有哪些?
Enumeration速度是Iterator的2倍,同时占用更少的内存。但是,Iterator远远比Enumeration安全,因为其他线程不能修改正在被iterator遍历的集合里面
的对象。同时,Iterator允许调用者删除底层集合里面的元素,而Enumeration不可能。
HashSet和TreeSet有什么区别?
HashSet是由一个hash表来实现的,因此它的元素是无序的。add(),remove(),contains()方法的时间复杂度为O(1).
另一方面,TreeSet是由一个树形的结构来实现的,它的里面的元素是有序的。因此,add(),remove(),contains()方法的时间复杂度为O(log n)。
java中的HashMap是以键值对的形式存在的。HashMap需要一个hash函数,它使用hashCode()和equals()方法来向集合添加和检索元素,当调用put()方法时,
HashMap会计算key的hash值,然后把键值对存储在集合中合适的索引上。如果key已经存在了,value会被更新成新值。HashMap还有一些重要特性:它的容量capacity,负载因子load factor和扩容极限threshold reszing
hashCode()和equals()方法的重要性体现在哪些方面?
java中的HashMap使用hashCode()和equals()方法来确定键值对的索引,当根据键获取值的时候也会用到这两个方法。如果没有正确的实现这两个方法,两个
不同的键可能会有相同的hash值,因此,可能会被集合人为是相等的。而且,这两个方法也用来发现重复元素。所以这两个方法的实现对HashMap的精确性和正确性是
至关重要的。
HashMap和Hashtable有什么区别?
HashMap和Hashtable都实现了Map接口,因此有很多相似的特性。但是有以下不同点:
HashMap允许键值为null,而Hashtable不允许键值为null.
Hashtable是线程安全的,HashMap不是线程安全的
HashMap提供了可供应用迭代的键的集合。另一方面,Hashtable提供了对键的列举(Enumeration)
数组(Array)和列表(ArrayList)有什么区别?什么时候应该使用Array而不是ArrayList?
不同点:
Array可以包含基本类型和对象类型,ArrayList只能包含对象类型
Array大小是固定的,ArrayList的大小是动态变化的
ArrayList提供了等多的方法和特性,比如:addAll(),removeAll(),iterator()等等
对于基本类型数据,集合使用自动装箱来减少编码工作量。但是,当处理固定大小的基本数据类型的时候,这种方式相对较慢。
ArrayList和LinkedList有什么区别?
ArrayList和LinkedList都是线了List接口,他们具有以下不同点:
ArrayList是基于索引的数据接口,它的底层是数组。他可以在O(1)时间复杂度对元素进行随机访问。与此同时,LinkedList是以元素列表的形式存
储它的数据,每一个元素都和它的前一个和后一个元素链接在一起,在这种情况下,查找某个元素的时间复杂度是O(n).
LinkedList比ArrayList更占内存,因为LinkedList为每一个结点存储了两个引用,一个指向前一个元素,一个指向下一个元素。
Comparable和Comparator接口是干什么的》列出他们的区别?
java提供了只包含一个compareTo()方法的Comparable接口。这个方法可以给两个对象排序。具体来说,他返回负数,0,整数来表明输入对象小于,等于,>大于已经存在的对象。
java提供了包含compare()和equals()方法的comparator接口。compare()方法用来给两个输入参数排序,返回负数,0,正数表明第一个参数是小于,等于,
大于第二个参数。equals()方法需要一个对象作为参数,他用来决定输入参数是否和comparator相等。只有当输入参数也是一个comparator并且输入参数和当前comparator的排序结果是相同的时候,这个方法才返回ture.
什么是java优先级队列?
java优先级队列是一个基于优先级堆的无界队列,它的元素是按照自然顺序排序的
如何权衡使用有序数组还是无序数组?
有序数组的好处是查找时间复杂度为O(log n),而无序数组是O(n)。有序数组的缺点是插入操作的时间复杂度为O(n),因此值大的元素需要往后移动给新来>的元素提供位置。相反,无序数组的插入时间复杂度为常量O(1)。
Enumeration接口和Iterator接口的区别有哪些?
Enumeration速度是Iterator的2倍,同时占用更少的内存。但是,Iterator远远比Enumeration安全,因为其他线程不能修改正在被iterator遍历的集合里面
的对象。同时,Iterator允许调用者删除底层集合里面的元素,而Enumeration不可能。
HashSet和TreeSet有什么区别?
HashSet是由一个hash表来实现的,因此它的元素是无序的。add(),remove(),contains()方法的时间复杂度为O(1).
另一方面,TreeSet是由一个树形的结构来实现的,它的里面的元素是有序的。因此,add(),remove(),contains()方法的时间复杂度为O(log n)。