美文网首页
集合框架总结

集合框架总结

作者: cpyl | 来源:发表于2019-02-28 00:44 被阅读0次

    Java的主要容器:

    • Collection
      • List
        • ArrayList
        • LinkedList
        • Vector(过时)
      • Set
        • HashSet
        • LinkedHashSet
        • TreeSet
    • Map
      • HashMap
        • LinkedHashMap
      • TreeMap
      • Hashtable(过时)
      • ConcurrentHashMap(支持并发,待看)

    一、AraryList和Vector的区别

    共同点
    这两个类都实现了List接口,它们是有序的集合。底层的数据结构是数组,都可以根据索引实现随机查询,并且速度快,插入删除由于要移动元素,所以速度慢。允许元素为null
    不同点

    • AraryList是不同步的,效率高。Vector保证了数据的操作是同步的,效率低。可以使用collections.synchronizedlist(new ...)实现ArrayList的同步

    二、HashMap和Hashtable的区别

    相同点:都是实现了Map接口,底层是哈希表+红黑树
    不同点

    • 同步性:HashMap非同步,Hashtable同步(需要同步用ConcurrentHashMap)
    • 是否允许为null:HashMap允许为null,Hashtable不允许为null
    • HashMap继承自AbstractMap,HashMap继承自Dictionary
    • HashMap把Hashtable的contains方法去掉了,改成了containsValue和containsKey

    三、 List和Map的区别

    相同点:都是一种容器,可以储存元素(...)
    不同点

    • 储存元素的方式:List储存的是单列的元素,Map存储的是键值对的元素
    • 元素是否可以重复:List可以重复,Map不可以重复
    • 元素是否有序:所有实现了List接口的集合都是有序的,Map无序(指的是是否保证插入顺序)

    四、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()?

    添加元素的时候,如果key(也对应的Set集合的元素)相等,那么则修改value值。而在Set集合中,value值仅仅是一个Object对象罢了(该对象对Set本身而言是无用的)。在put中两个方法都要用

    五、Collections和Collection的区别

    • Collection是集合的一个接口,List和Set都继承了它
    • Collections是操作集合的一个工具类,提供了很多搜索、查找、同步等方法

    六、说出ArrayList,LinkedList的存储性能和特性:

    ArrayList底层是数组,LinkedList底层是双向链表

    • ArrayList可以使用下标对元素进行随机方法,而LinkedList
      访问元素只能遍历链表
    • ArrayList在插入删除元素时,需要移动元素。而LinkedLIst只需要修改对应的指针就可以了,消耗代价比较小。
    • 但是在某些情况下(百万级数据量),还是ArrayList快。例如在末尾插入删除,不需要移动元素。

    七、 ListListIterator有什么特点

    • ListIterator继承了Iterator接口,它用于遍历List集合的元素。
    • ListIterator可以实现双向遍历,添加元素,设置元素

    八、什么是并发集合类

    ava1.5并发包(java.util.concurrent)包含线程安全集合类,允许在迭代时修改集合

    • 它们的迭代器是fail-fast的,遍历时修改会抛ConcurrentModificationException

    十、Java中HashMap的key值要是为类对象则该类需要满足什么条件?

    需要重写HashCode()和equals()方法
    在调用put方法时,首先计算key的hash值(HashCode()),如果算的两个key的hash值相等是放到同一个桶上的。

    • 调用equal(),如果key相等,就替换掉value
    • 否则,就是发生了碰撞,将插入的元素放到合适的位置上。

    在Object中的equals()默认是比较对象的地址的,我们认为如果两个对象的成员变量一样就说它们是相等,所以要重写equal()。又因为equals()认定两个对象相等,他们的hashcode也一定一样,所以也要重写hashCode()

    十一、ArrayList中加入大量的数据,应该如何减小消耗

    进行大数据量的插入时,ArrayList底层的动态数组频繁进行也会消耗大量的资源。因此可以在初始化时指定容量。也可以手动调用ensureCapacity(int minCapacity)进行扩容

    十二、确定使用该集合类型下的哪个子类

    • 有序的:所有实现了List的子类,LinkedHashSet,LinkedHashMap
    • 同步的:线程安全的(Vector、Hashtable、ConCurrentHashMap)JUC包
    • 排序的:红黑树类型的(TreeSet、TreeMap)

    相关文章

      网友评论

          本文标题:集合框架总结

          本文链接:https://www.haomeiwen.com/subject/ygyquqtx.html