zoukankan      html  css  js  c++  java
  • Collection集合。

    1.集合主要包含collection和map两个接口。其中collection中的元素是一个value值,map中的元素是key:value形式的。

    2.collection包含set、list。

    3.List接口:list接口包含ArrayList,LinkedList,Vector。

    4.set接口:set接口包含HashSet,TreeSet。

    5.map包含HashMap,TreeMap。

    6.List,Set,Map的区别?

    (6.1)List:有序,可重复。

    ArrayList:底层实现的数据结构是数组,查询快,增删慢,不同步,效率高,线程不安全,每次增长50%的空间。

    LinkedList:底层实现的是链表结构,查询慢,增删快,不同步,效率高,线程不安全。

    Vector:底层实现的数据结构是数组,查绚块,增删慢。线程安全,效率低。

    (6.2)Set:无序,唯一。

    HashSet:底层数据结构是哈希表(无序,唯一)。保证元素唯一性依赖于两个方法:hashCode()和equals()

    LinkedHashSet:底层数据结构是链表和哈希表。(FIFO,有序,唯一)。通过链表保证有序性, 通过哈希表保证唯一性。

    TreeSet:底层数据结构是红黑树,有字典排序。(有序,唯一)

     一般。ArrayList和HashSet用的比较广泛。如果明确知道需要线程安全或者有序,就根据集合的具体特点选择使用哪一个集合。Set和List都是单列元素的集合,父接口都是Colelction,有一定的相似之处。

    List表示有先后顺序的集合, 按元素先来后到的元素进行插入,当然,可以插队,使用add(int index,object e)指定元素的位置。其实并不是把对象本身存储在集合里,而是在集合中用一个索引变量指向这个对象,当集合中包含多个同样的对象时,是多个索引指向同一个对象。List除了可以以Iterator接口取得所有的元素,再逐一遍历各个元素之外,还可以调用get(index i)来明确说明取第几个。

    Set里面不允许有重复的元素,即不能有两个相等(注意,不是仅仅是相同equals)的对象。所以,Set集合的add方法有一个boolean的返回值,当集合中没有某个元素,此时add方法可成功加入该元素时,则返回true,当集合含有与某个元素equals相等的元素时,此时add方法无法加入该元素,返回结果为false。Set取元素时,没法说取第几个,只能以Iterator接口取得所有的元素,再逐一遍历各个元素。

    7.Map中常用的是Hash Map,HashMap,HashTable,TreeMap。

        TreeMap:有序

        HashMap:无序,线程不安全,效率高

        HashTable:无序,线程安全,效率低。

        HashMap和hashTable的区别:

            Hashtable不允许null值,HashMap允许null值(key和value都允许)

            Hashtable是Java1.1的一个类,它基于陈旧的Dictionary类。而HashMap是Java1.2引进的Map接口的一个实现。

            Hashtable是线程安全的,而HashMap是线程不安全的。如果对同步性或与遗留代码的兼容性没有任何要求,建议使用HashMap。 查看Hashtable的源代码就可以发现,除构造函数外,Hashtable的所有 public 方法声明中都有 synchronized关键字,而HashMap的源码中则没有。

    Map和List、Set不同,是双列元素的集合,不允许重复的key(equals),通过put(obj key,obj value)将元素存储到map集合中。取值时通过get(Object key),或者通过map.keySet(),map.values(),map.entrySet()获得keys,values的信息。

    总结:List 以特定次序来持有元素,可有重复元素。Set 无法拥有重复元素,内部排序。Map 保存key-value值,value可多值。

    8.List时如何扩容的?

    lsit初始化的长度是10,当长度达到10时,再新增数据会进行扩容。每次扩容为1.5倍+1,并将之前的数据copy到新的array中去。发现不同jdk是不一样的,关于(1.5倍+1)出现在jdk1.6,其他1.7和1.8都是(1.5倍扩容)。

  • 相关阅读:
    Java实现 计蒜客 拯救行动
    Java实现 计蒜客 拯救行动
    Java实现 LeetCode 174 地下城游戏
    Java实现 LeetCode 174 地下城游戏
    Java实现 LeetCode 174 地下城游戏
    Java实现 LeetCode 173 二叉搜索树迭代器
    Java实现 LeetCode 173 二叉搜索树迭代器
    Visual Studio的SDK配置
    怎样使用CMenu类
    mfc menu用法一
  • 原文地址:https://www.cnblogs.com/wangffeng293/p/13048599.html
Copyright © 2011-2022 走看看