如何过滤Java集合?
如何对Java集合进行排序?
将列表转换为集合的最佳方法。
何时通过ArrayList使用LinkedList?
HashMap和Hashtable的区别。
解释Java hashCode()和equals()方法。
什么是Java优先队列?
ArrayList和Vector之间的区别。
什么是Java并发集合类?
解释Comparable和Comparator。
Java集合面试题和答案
1. 如何过滤Java集合?
过滤Java集合的最好方法是使用Java 8. Java流和lambda表达式可用于按如下过滤集合,
2. 如何对Java集合进行排序?
使用比较器对Java集合进行排序。
如果Animal实现Comparable,那么以下就足够了。
3. 将列表转换为集合的最佳方法。
使用HashSet实例化。
4. 何时通过ArrayList使用LinkedList?
Java的LinkedList实现是一个双向链表。 ArrayList是一个动态调整大小的数组实现。因此,LinkedList和ArrayList之间的比较几乎类似于比较一个双向链表和一个动态调整大小的数组。
LinkedList方便顺序来回遍历,但随机访问元素与LinkedList的大小成比例。同时,ArrayList最适合于使用位置的随机访问。
LinkedList最适合在LinkedList的任何位置插入和删除元素。 ArrayList不适合在ArrayList中插入或删除元素。由于每次插入一个新元素,所有元素都应该向下移动,并且应该完成动态调整大小。
关于LinkedList和ArrayList的内存使用情况,LinkedList集合使用更多的内存,因为它需要保持指向相邻元素的指针。 ArrayList不存在这种开销,只需要数据所需的内存就足够了。考虑这些因素并根据用例在LinkedList或ArrayList之间做出决定。
5. HashMap和Hashtable的区别。
HashMap未同步,但Hashtable已同步。
HashMap允许null作为键和值。 由于key是唯一的,因此只允许有一个null作为key。 哈希表不允许在键或值中为空。
LinkedHashMap扩展了HashMap,因此可以转换。 它有助于获得固定的迭代次序。 Hashtable不可能。
在本质上,几乎没有理由使用Java Hashtable。
6. 解释Java hashCode()和equals()方法。
equals()方法用于确定两个Java对象的相等性。 当我们有一个自定义类时,我们需要重写equals()方法并提供一个实现,以便它可以用来找到它的两个实例之间的相等性。 通过Java规范,equals()和hashCode()之间有一个契约。 它说,“如果两个对象相等,即obj1.equals(obj2)为true,那么obj1.hashCode()和obj2.hashCode()必须返回相同的整数”
无论何时我们选择重写equals(),我们都必须重写hashCode()方法。 hashCode()用于计算位置存储区和key。
7. 什么是Java优先级队列?
Java PriorityQueue是一个数据结构,它是Java集合框架的一部分。 它是一个队列的实现,其中元素的顺序将根据每个元素的优先级来决定。 实例化PriorityQueue时,可以在构造函数中提供比较器。 该比较器将决定PriorityQueue集合实例中元素的排序顺序。
8. ArrayList和Vector之间的区别。
Vector是同步的,ArrayList不是。
当Vector增加时,Vector的内部尺寸加倍。 但是,当ArrayList增加时,ArrayList会增加一半。
ArrayList比Vector更好的性能,因为它不同步。
ArrayList的迭代器快速失败,但Vector的枚举不是快速失败的。
甚至在此之前,ArrayList是在Java 1.2和Vector中引入的。 但最初Vector并不是Java集合框架的一部分,后来成为集合框架的一部分。
到目前为止,没有必要使用Vector,它可以被认为是遗留的,并被弃用。 如果您需要同步收集,则可以同步并使用ArrayList。
9. 什么是Java并发集合类?
Java 5中引入了并发集合以及注释和泛型。这些类位于java.util.concurrent包中,它们有助于解决常见的并发问题。它们非常高效,并有助于我们减少常见的样板并发代码。重要的并发集合类是BlockingQueue,ConcurrentMap,ConcurrentNavigableMap和ExecutorService。
10. 解释Comparable和Comparator
一个类可以实现Comparable接口来定义对象的自然排序。 如果你把一个字符串列表,通常它是按字母顺序比较排序的。 因此,当创建一个String类时,可以实现Comparable接口并覆盖compareTo方法以提供比较定义。 我们可以将它们用作,
str1.compareTo(str2);
现在,如果你想根据它的长度比较两个字符串,你会怎么做。 我们去比较器。 我们创建一个类并让它实现比较器接口并重写比较方法。 我们可以将它们用作,
Collections.sort(listOfStrings, comparatorObj);
自然顺序取决于设计类的人。 比较器也可以在这种情况下使用,当我们需要多个排序选项时可以使用它。 想象一下,一个类已经可用,我们不能修改它。 在这种情况下,比较器也是可以选择的。