zoukankan      html  css  js  c++  java
  • Java Collection Summary

    HashSetTreeSet区别:

    //主要是两方面:1、底层数据结构的实现;2、如何实现唯一性

    HashSet:底层数据结构是哈希表,线程不安全.

    HashSet是如何保证元素唯一性的呢?  

    是通过元素的两个方法,hashCode和equals来完成。 

    如果元素的HashCode值相同,才会判断equals是否为true。   

    如果元素的hashcode值不同,不会调用equals。


    TreeSet:底层数据结构是二叉树.  

    保证元素唯一性的依据:compareTo方法return 0.

    方法一、实现comparable接口,重写compareTo()方法。

    方法二、自定义比较器实现Comparator接口

    当元素自身不具备比较性或者具备的比较性不是所需要的,这时,就需要让容器自身具备比较性;在集合初始化时,就具有比较方式。

    TreeSet ts =new TreeSet(new MyCompare());  


    HashSet和HashMap的区别:

    *HashMap* *HashSet*
    HashMap实现了Map接口 HashSet实现了Set接口
    HashMap储存键值对 HashSet仅仅存储对象
    使用put()方法将元素放入map中 使用add()方法将元素放入set中
    HashMap中使用键对象来计算hashcode值 HashSet使用成员对象来计算hashcode值,对于两个对象来说hashcode可能相同,所以equals()方法用来判断对象的相等性,如果两个对象不同的话,那么返回false
    HashMap比较快,因为是使用唯一的键来获取对象 HashSet较HashMap来说比较慢

    上面的表格来源于:http://www.importnew.com/6931.html

    Hashtable和HashMap的区别:

    1、hashMap允许空键值,而hashTable不允许(因为要根据键来寻找对应的值)。

    2、hashTable方法是同步的(synchronized),而hashMap不是。

    3、HashTable继承自Dictionary类

    public class Hashtable<K,V>extends Dictionary<K,V> implements Map<K,V>, Cloneable, java.io.Serializable {}
    而 HashMap继承自AbstractMap,是Map 接口的一个实现;

    public class HashMap<K,V>
        extends AbstractMap<K,V>
        implements Map<K,V>, Cloneable, Serializable{}
    ★ 这也说明了两者的相同点都是Map接口的实现。

    HashMap和TreeMap,linkedHashMap的区别:

    HashMap是基于哈希表的Map接口的实现,并允许使用null值和null键。此类不保证映射的顺序,特别是他不保证该顺序恒久不变。

    TreeMap是基于红黑树的NavigableMap实现。该映射根据其键的自然顺序进行排序,或者根据映射时创建的Comparator进行排序。

    LinkedHashMap HashMap的一个子类,如果需要输出的顺序和输入的相同,那么用LinkedHashMap可以实现。


    ConcurrentMap和HashMap的区别:

    1、ConcurrentMap 是线程安全的,而hashMap不是线程安全的。

    2hashMap可以有null的键,concurrentMap不可以有。

    3ConcurrentMap的操作都是原子操作,hashMap不是。ConcurrentMap 
    提供其他原子putIfAbsent、remove、replace 方法的 Map。



    keyset 和 entryset的区别:

    keyset()迭代后只能通过get()取value.

    entrySet():迭代后可以e.getKey(),e.getValue()取key和value。返回的是Entry接口(接口Map的一个内部接口).

    Keyset()的速度比entryset()慢。


    LinkedListArrayListVector的区别:

    1LinkedList使用双链表来实现,很适合数据的动态插入、删除,随机访问和遍历速度比较慢。此外,它还提供了List接口中没有定义的方法,专门用于操作表头和表尾元素。

    2、 ArrayList 采用数组的形式来保存对象,这种方式将对象放在连续的位置中,最大缺点是插入删除比较麻烦。当从ArrayList的中间位置插入或者删除元素时,需要对数组进行复制、移动、代价比较高。因此,它适合随机查找和遍历,不适合插入和删除。

    3、Vector与ArrayList一样,也是通过数组实现的,不同的是它支持线程的同步,即某一时刻只有一个线程能够写Vector,避免多线程同时写而引起的不一致性,但实现同步需要很高的花费,因此,访问它比访问ArrayList慢。 

    ArrayList在内存不够时默认是扩展50% + 1个,Vector是默认扩展1倍。



  • 相关阅读:
    Vue中v-for不绑定key会怎样
    关于Vuex可直接修改state问题
    不要完全相信Chrome控制台打印的信息
    Vue挂载元素的替换
    (转)openURL的使用方法
    iOS:将NSDate转换为当前时区时间
    OC中使用 static 、 extern、 const使用
    iOS: 正则表达式
    iOS:原生二维码扫描
    iOS:ABPeoplePickerNavigationController系统通讯录使用
  • 原文地址:https://www.cnblogs.com/jinfenglee/p/4388744.html
Copyright © 2011-2022 走看看