zoukankan      html  css  js  c++  java
  • 集合框架—基础

    map
    HashMap
    哈希表结构存储,键值对唯一,键值都可为null,存放顺序不固定,
    Hashtable
    哈希表结构存储,线程安全的,不允许null(jdk是这么设计的)
    TreeMap
    是有序的,二叉树结构存储,不允许重复,键值对唯一,不允许null
    list
    ArrayList
    动态数组结构存储,遍历速度快,索引随机访问快,允许多空值
    LinkedList
    底层数据结构是链表,插入和删除速度快。
    Vector
    数组结构存储,线程安全的,查找速度快,但增删效率低;

    Set特点: 元素无放入顺序,元素不可重复,重复元素会覆盖掉,(注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的,加入Set的Object必须定义equals()方法 ,另外list支持for循环,也就是通过下标来遍历,也可以用迭代器,但是set只能用迭代,因为他无序,无法用下标来取得想要的值。)由于Set接口提供的数据结构是数学意义上集合概念的抽象,因此它需要支持对象的添加、删除,而不需提供随机访问。只能用迭代.

    18.hashCode()和equals()方法有何重要性?

    HashMap使用Key对象的hashCode()和equals()方法去决定key-value对的索引。当我们试着从HashMap中获取值的时候,这些方法也会被用到。如果这些方法没有被正确地实现,在这种情况下,两个不同Key也许会产生相同的hashCode()和equals()输出,HashMap将会认为它们是相同的,然后覆盖它们,而非把它们存储到不同的地方。同样的,所有不允许存储重复数据的集合类都使用hashCode()和equals()去查找重复,所以正确实现它们非常重要。equals()和hashCode()的实现应该遵循以下规则:

    (1)如果o1.equals(o2),那么o1.hashCode() == o2.hashCode()总是为true的。

    (2)如果o1.hashCode() == o2.hashCode(),并不意味着o1.equals(o2)会为true。

    Map接口提供了哪些不同的集合视图?

    (1)    Set keyset()

    (2)    Collection values():

    (3)    Set<Map.Entry<K,V>> entrySet():

    40.与Java集合框架相关的有哪些最好的实践?

    (1)根据需要选择正确的集合类型。比如,如果指定了大小,我们会选用Array而非ArrayList。如果我们想根据插入顺序遍历一个Map,我们需要使用TreeMap。如果我们不想重复,我们应该使用Set。

    (2)一些集合类允许指定初始容量,所以如果我们能够估计到存储元素的数量,我们可以使用它,就避免了重新哈希或大小调整。

    (3)基于接口编程,而非基于实现编程,它允许我们后来轻易地改变实现。

    (4)总是使用类型安全的泛型,避免在运行时出现ClassCastException。

    (5)使用JDK提供的不可变类作为Map的key,可以避免自己实现hashCode()和equals()。

    (6)尽可能使用Collections工具类,或者获取只读、同步或空的集合,而非编写自己的实现。它将会提供代码重用性,它有着更好的稳定性和可维护性。

  • 相关阅读:
    远程发送和接收数据流生成图片
    iTextSharp 设置 PDF 所有页面背景图功能
    iTextSharp 生成 PDF 问题集合
    C# 中 IL/MSIL , CTS , CLS , CLR , JIT 分别是什么 ?
    django创建项目2 jojo
    selenium键盘操作 jojo
    python格式化 jojo
    安装了Django后,执行djangoadmin.py无法创建工程的解决办法 jojo
    django创建项目1 jojo
    python自带模块模拟鼠标和键盘操作 jojo
  • 原文地址:https://www.cnblogs.com/domi22/p/8046921.html
Copyright © 2011-2022 走看看