首页 > 试题广场 >

关于集合类,下列说法正确的是()

[单选题]
关于集合类,下列说法正确的是()
  • 可以在hashcode()中使用随机数字
  • ArrayList list=new ArrayList(50),list在创建时扩容了5次
  • java中的TreeMap是使用红黑树实现的
  • 在遍历ArrayList的过程中不尅直接调用remove()方法移除元素
推荐
A. hashCode一般用以下几种方式:这里的随机数法指的是:选择一随机函数,取关键字的随机值作为散列地址,通常用于关键字长度不同的场合。不适用于集合类。


B. ArrayList list=new ArrayList(50)是直接创建,没有扩容过程,只有向ArrayList添加元素的时候才会扩容
C. 正确
D. 迭代ArrayList的时候调用remove方***抛出ConcurrentModificationException,但是通过迭代器Iterator调用remove()方法则不会抛出异常
例如以下代码会抛异常
public class Test {
    public static void main(String[] args)  {
        ArrayList<Integer> list = new ArrayList<Integer>();
        list.add(2);
        Iterator<Integer> iterator = list.iterator();
        while(iterator.hasNext()){
            Integer integer = iterator.next();
            if(integer==2)
                list.remove(integer);
        }
    }
}

改成以下代码则不会:
public class Test {
    public static void main(String[] args)  {
        ArrayList<Integer> list = new ArrayList<Integer>();
        list.add(2);
        Iterator<Integer> iterator = list.iterator();
        while(iterator.hasNext()){
            Integer integer = iterator.next();
            if(integer==2)
                iterator.remove();   //注意这个地方
        }
    }
}



编辑于 2019-10-14 14:15:23 回复(0)
C
  • A选项hashcode方法根据一定规则与对象相关的信息(对象存储地址、对象字段)映射成一个数值,称为散列值,所以不属于随机数字,A错误。
  • B选项表示创建一个指定初始容量为50的空列表,并不是动态创建在原有的基础上扩容的,B错误。
  • C选项TreeMap 是一个有序的key-value集合,它是通过红黑树实现的,C正确。
  • D选项ArrayList 提供了 remove(int index)移除列表指定位置的元素、remove(Object o)移除列表首次出现的指定元素(存在的情况下),没有remove()之说,D错误。
发表于 2019-10-12 06:23:55 回复(0)
答案:C、D(感觉都对啊)
A.对于相同的值去hashcode,得到的值是一样的,会造成哈希冲突。
B.源码如下,很容易看出来是直接创建大小为50的list:
public ArrayList(int initialCapacity) {
        if (initialCapacity > 0) {
            this.elementData = new Object[initialCapacity];
        } else if (initialCapacity == 0) {
            this.elementData = EMPTY_ELEMENTDATA;
        } else {
            throw new IllegalArgumentException("Illegal Capacity: "+
                                               initialCapacity);
        }
    }
D.非要说错的话,题目中可打成了尅算吗???

发表于 2019-10-11 21:02:02 回复(0)
选C
发表于 2019-10-14 09:32:46 回复(0)
    // Red-black mechanics

    private static final boolean RED   = false;
    private static final boolean BLACK = true;

    /**
     * Node in the Tree.  Doubles as a means to pass key-value pairs back to
     * user (see Map.Entry).
     */

    static final class Entry<K,V> implements Map.Entry<K,V> {
        K key;
        V value;
        Entry<K,V> left;
        Entry<K,V> right;
        Entry<K,V> parent;
        boolean color = BLACK;
    }
部分 TreeMap 源码,RED and BLACK 
发表于 2019-10-13 14:30:20 回复(0)
c
A.hashcode()不能是随机数字,会出现哈希冲突
B没有扩容,只是把默认值给改变了
D
发表于 2019-10-11 19:36:38 回复(0)
C啊,书上明明白白写着,treemap底层是红黑树
发表于 2019-10-11 14:38:44 回复(0)