MST

星途 面试题库

面试题:Java Collection接口扩展与定制

假设你需要基于Collection接口自定义一个具有特殊排序功能的集合,该集合在添加元素时能自动按照特定规则排序(如按照元素长度排序),请描述实现思路并给出关键代码示例。
24.7万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试
  1. 实现思路
    • 可以创建一个类实现Collection接口,重写其添加元素的方法(如add方法)。
    • 在添加元素时,将元素添加到一个内部数据结构(如List)中,然后对该内部数据结构按照特定规则(如元素长度)进行排序。
  2. 关键代码示例
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;

public class CustomSortedCollection<T extends Comparable<T>> implements Collection<T> {
    private List<T> internalList;

    public CustomSortedCollection() {
        internalList = new ArrayList<>();
    }

    @Override
    public boolean add(T element) {
        boolean added = internalList.add(element);
        Collections.sort(internalList, Comparator.comparingInt(String::length));
        return added;
    }

    @Override
    public int size() {
        return internalList.size();
    }

    @Override
    public boolean isEmpty() {
        return internalList.isEmpty();
    }

    @Override
    public boolean contains(Object o) {
        return internalList.contains(o);
    }

    @Override
    public Iterator<T> iterator() {
        return internalList.iterator();
    }

    @Override
    public Object[] toArray() {
        return internalList.toArray();
    }

    @Override
    public <T1> T1[] toArray(T1[] a) {
        return internalList.toArray(a);
    }

    @Override
    public boolean remove(Object o) {
        return internalList.remove(o);
    }

    @Override
    public boolean containsAll(Collection<?> c) {
        return internalList.containsAll(c);
    }

    @Override
    public boolean addAll(Collection<? extends T> c) {
        boolean result = internalList.addAll(c);
        Collections.sort(internalList, Comparator.comparingInt(String::length));
        return result;
    }

    @Override
    public boolean removeAll(Collection<?> c) {
        return internalList.removeAll(c);
    }

    @Override
    public boolean retainAll(Collection<?> c) {
        return internalList.retainAll(c);
    }

    @Override
    public void clear() {
        internalList.clear();
    }
}

上述代码中,CustomSortedCollection类实现了Collection接口,重写了add方法,每次添加元素后对内部List按照元素长度进行排序。同时也实现了Collection接口的其他必要方法,确保集合功能的完整性。