List、Set和Map

2018-06-01  本文已影响0人  pluss

java 常用集合list与Set、Map区别及适用场景总结
Java中容器[Collection(List,Set,Queue),Map],迭代器(Iterator)和比较器(Comparator)及列表排序

关于 Java Collections 的几个常见问题



private static final Object PRESENT = new Object();

    public synchronized V put(K key, V value) {
        // Make sure the value is not null
        if (value == null) {//value为null抛异常
            throw new NullPointerException();
        }

        // Makes sure the key is not already in the hashtable.
        Entry<?,?> tab[] = table;
        int hash = key.hashCode();//key为null抛异常
        int index = (hash & 0x7FFFFFFF) % tab.length;
        @SuppressWarnings("unchecked")
        Entry<K,V> entry = (Entry<K,V>)tab[index];
        for(; entry != null ; entry = entry.next) {
            if ((entry.hash == hash) && entry.key.equals(key)) {
                V old = entry.value;
                entry.value = value;
                return old;
            }
        }

        addEntry(hash, key, value, index);
        return null;
    }

作为hashmap的key的类必须重写hashcode方法,包装类都重写了hashcode方法?

  1. 该方法对于基本数据类型的数组支持并不好,当数组是基本数据类型时不建议使用
  2. 当使用asList()方法时,数组就和列表链接在一起了。当更新其中之一时,另一个将自动获得更新。因为asList获得的List实际引用的就是数组 注意:仅仅针对对象数组类型,基本数据类型数组不具备该特性。
  3. asList得到的数组是的没有add和remove方法的。因为asList返回的List是Arrays中的内部类,而该类并没有定义add和remove方法。
上一篇下一篇

猜你喜欢

热点阅读