张森霖 10-9

List

  • #### 实现List的类都允许元素重复,如 LinkedList,ArrayList。

LinkedList与ArrayList的异同

异:
  • LinkedList是以节点的方式储存数据的,所以增删快,但是查询慢。
  • ArrayList是以数组的方式储存数据,所以查询快,但是增删慢,因为实现增删会引起其他数据的位置发生改变。
同:
  • 都是非线程安全的

Set

  • 检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。
  • 存入set的每个元素要保证唯一,不允许重复。
  • Set具有与Collection完全一样的接口,因此没有任何额外的功能,不像前面有两个不同的List。实际上Set就是Collection,只 是行为不同。(这是继承与多态思想的典型应用:表现不同的行为。)Set不保存重复的元素。

hashset

  • 底层数据结构采用哈希表实现,元素无序且唯一,线程不安全,效率高,可以存储null元素
  • 具体实现唯一性的比较过程:存储元素首先会使用hash()算法函数生成一个int类型hashCode散列值,然后已经的所存储的元素的hashCode值比较,如果hashCode不相等,则所存储的两个对象一定不相等,此时存储当前的新的hashCode值处的元素对象;如果hashCode相等,存储元素的对象还是不一定相等,此时会调用equals()方法判断两个对象的内容是否相等,如果内容相等,那么就是同一个对象,无需存储;如果比较的内容不相等,那么就是不同的对象,就该存储了。

treeset

  • 底层数据结构采用二叉树来实现,元素唯一且已经排好序
  • 根据构造方法不同,分为自然排序(无参构造)和比较器排序(有参构造),自然排序要求元素必须实现Compareable接口,并重写里面的compareTo()方法。

Map

  • Map用于保存具有映射关系的数据,Map里保存着两组数据:key和value,它们都可以使任何引用类型的数据,但key不能重复。所以通过指定的key就可以取出对应的value

treemap与hashtable比较

img

hashmap

img

关于map加载因子:

  • 加载因子,如果加载因子越大,对空间的利用更充分,但是查找效率会降低(链表长度会越来越长);如果加载因子太小,那么表中的数据将过于稀疏(很多空间还没用,就开始扩容了),对空间造成严重浪费。如果我们在构造方法中不指定,则系统默认加载因子为0.75,这是一个比较理想的值,一般情况下我们是无需修改的。

今日总结:晚上总结了一下,了解了各种集合之间的差异,方法的异同,在代码中测试了一些方法,至于方法的底层实现依然搞不懂,以后技术达到了再深究这个问题,先理解这些集合的应用。

标签

评论

this is is footer