Java集合面试题及答案(11-15)

11、如何对Java集合进行排序?
答:可以使用Collections.sort()方法对List进行排序,或者使用TreeSet来自动排序,也可以使用Stream API的sorted()方法对流进行排序。

12、HashMap和ConcurrentHashMap有什么区别?
答:HashMap是线程不安全的,ConcurrentHashMap是线程安全的。HashMap的put操作是非线程安全的,多线程同时进行put操作可能会导致数据丢失;ConcurrentHashMap使用分段锁技术,将整个map分成若干个段,每个段都可以独立进行加锁和解锁操作,多个线程可以同时操作不同的段,从而提高了并发性能。

13、如何遍历一个Map?
答:有多种方法可以遍历一个Map,比如使用迭代器、使用keySet()、使用entrySet()等。其中,使用entrySet()的方式是效率最高的,代码示例如下:

Map<String, Integer> map = new HashMap<>();
for (Map.Entry<String, Integer> entry : map.entrySet()) {
    String key = entry.getKey();
    Integer value = entry.getValue();
    // TODO: 处理key和value
}

14、如何对一个List进行排序?
答:可以使用Collections.sort()方法对List进行排序。如果要按照对象的某个属性进行排序,需要让该对象实现Comparable接口,并重写compareTo()方法,或者创建一个Comparator对象并传入sort()方法中。代码示例:

List<String> list = new ArrayList<>();
Collections.sort(list);  // 按照自然顺序排序

List<Person> persons = new ArrayList<>();
// 方式1:Person类实现Comparable接口
Collections.sort(persons);

// 方式2:创建一个Comparator对象
Comparator<Person> comparator = new Comparator<Person>() {
    public int compare(Person p1, Person p2) {
        return p1.getAge() - p2.getAge();
    }
};
Collections.sort(persons, comparator);

15、如何将一个数组转换为List?
答:可以使用Arrays.asList()方法将数组转换为List。该方法返回的List不是java.util.ArrayList类的实例,而是一个内部类java.util.Arrays$ArrayList的实例,因此不支持添加、删除和修改操作。代码示例:

String[] arr = {"Java", "Python", "C++"};
List<String> list = Arrays.asList(arr);