有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (6) 个答案

  1. # 1 楼答案

    如果内存用于以下情况,则应该这样做:

    List<MyType> fixed = Arrays.asList(new MyType[100]);
    
  2. # 2 楼答案

    Commons library提供了一个内置的^{},它不支持addremoveclear方法(但是允许使用set方法,因为它不修改List的大小)。换句话说,如果您尝试调用其中一个方法,列表仍然保持相同的大小

    要创建固定大小的列表,只需拨打

    List<YourType> fixed = FixedSizeList.decorate(Arrays.asList(new YourType[100]));
    

    如果您想要指定列表的不可修改视图,或对内部列表的只读访问,则可以使用^{}

    List<YourType> unmodifiable = java.util.Collections.unmodifiableList(internalList);
    
  3. # 3 楼答案

    通常,固定大小列表的另一种选择是Java数组。默认情况下,列表在Java中允许增长/收缩。但是,这并不意味着您不能拥有固定大小的列表。您需要做一些工作并创建一个自定义实现

    您可以使用clear、add和remove方法的自定义实现来扩展ArrayList

    例如

    import java.util.ArrayList;
    
    public class FixedSizeList<T> extends ArrayList<T> {
    
        public FixedSizeList(int capacity) {
            super(capacity);
            for (int i = 0; i < capacity; i++) {
                super.add(null);
            }
        }
    
        public FixedSizeList(T[] initialElements) {
            super(initialElements.length);
            for (T loopElement : initialElements) {
                super.add(loopElement);
            }
        }
    
        @Override
        public void clear() {
            throw new UnsupportedOperationException("Elements may not be cleared from a fixed size List.");
        }
    
        @Override
        public boolean add(T o) {
            throw new UnsupportedOperationException("Elements may not be added to a fixed size List, use set() instead.");
        }
    
        @Override
        public void add(int index, T element) {
            throw new UnsupportedOperationException("Elements may not be added to a fixed size List, use set() instead.");
        }
    
        @Override
        public T remove(int index) {
            throw new UnsupportedOperationException("Elements may not be removed from a fixed size List.");
        }
    
        @Override
        public boolean remove(Object o) {
            throw new UnsupportedOperationException("Elements may not be removed from a fixed size List.");
        }
    
        @Override
        protected void removeRange(int fromIndex, int toIndex) {
            throw new UnsupportedOperationException("Elements may not be removed from a fixed size List.");
        }
    }
    
  4. # 4 楼答案

    Java列表是对象的集合。。。列表中的元素。列表的大小是该列表中的元素数。如果希望该大小是固定的,这意味着您不能添加或删除元素,因为添加或删除元素将违反“固定大小”约束

    实现“固定大小”列表的最简单方法(如果这是您真正想要的!)将元素放入数组,然后Arrays.asList(array)创建列表包装器。包装器将允许您执行诸如getset之类的操作,但是addremove操作将抛出异常

    如果您想为现有列表创建一个固定大小的包装器,那么可以使用apachecommons ^{}类。但是请注意,这个包装器无法阻止其他更改原始列表大小的操作,如果发生这种情况,包装的列表可能会反映这些更改


    另一方面,如果您确实希望列表类型的大小有固定的限制,那么您需要创建自己的列表类来实现这一点。例如,您可以创建一个包装类,它在各种add/addAllremove/removeAll/retainAll操作中实现相关检查。(和迭代器remove方法中,如果支持的话。)

    那么为什么Java集合框架不实现这些呢?以下是我这么认为的原因:

    1. 需要这样做的用例很少
    2. 在需要这样做的用例中,当一个操作试图打破限制时,对该做什么有不同的要求;e、 g.抛出异常,忽略操作,丢弃一些其他元素以腾出空间
    3. 带有限制的列表实现对于帮助器方法可能会有问题;e、 g.Collections.sort
  5. # 5 楼答案

    对。您可以将java数组传递给Arrays.asList(Object[])

    List<String> fixedSizeList = Arrays.asList(new String[100]);
    

    不能向fixedSizeList插入新字符串(它已经有100个元素)。只能按如下方式设置其值:

    fixedSizeList.set(7, "new value");
    

    这样你就有了一个固定大小的列表。它的功能就像一个数组,我想不出使用它的好理由。我很想听听你为什么希望固定大小的集合是一个列表,而不是仅仅使用数组

  6. # 6 楼答案

    创建一个大小为100的数组。如果需要List接口,那么对其调用Arrays.asList。它将返回一个由数组支持的固定大小的列表