文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java复习之集合框架总结

2023-05-31 04:59

关注

俗话说:温故而知新。想想学过的知识,就算是以前学得很不错,久不用了,就会忘记,所以温习一下以前学习的知识我认为是非常有必要的。而本篇文件温习的是 Java基础中的集合框架。

为什么会有集合框架?

平时我们用数组存储一些基本的数据类型,或者是引用数据类型,但是数组的长度是固定的,当添加的元素超过了数组的长度时,需要对数组进行重新的定义,这样就会显得写程序太麻烦,所以Java内部为了我们方便,就提供了集合类,能存储任意对象,长度是可以改变的,随着元素的增加而增加,随着元素的减少而减少。

数组可以存储基本数据类型,也可以存储引用数据类型,基本数据类型存储的是值,引用数据类型存储的是地址,而集合只能存储引用数据类型(也就是对象),其实集合中也可以存储基本数据类型,但是在存储的时候会自动装箱变成对象。

有了集合不意味着我们要抛弃数组,如果需要存储的元素个数是固定的,我们可以使用数组,而当存储的元素不固定,我们使用集合。

集合的种类

集合分为单列集合和双列集合。单列集合的根接口为Collection,双列结合的根接口为Map,两种集合都有基于哈希算法的集合类(HashMap和HashSet),现在我们可能会有疑问,到底是双列集合基于单列集合还是单列集合基于双列集合呢,下面我们来看往集合HashMap和HashSet添加元素的源码:

 public V put(K key, V value) {    return putVal(hash(key), key, value, false, true);  }final V putVal(int hash, K key, V value, boolean onlyIfAbsent,          boolean evict) {    Node<K,V>[] tab; Node<K,V> p; int n, i;    if ((tab = table) == null || (n = tab.length) == 0)      n = (tab = resize()).length;    if ((p = tab[i = (n - 1) & hash]) == null)      tab[i] = newNode(hash, key, value, null);    else {      Node<K,V> e; K k;      if (p.hash == hash &&        ((k = p.key) == key || (key != null && key.equals(k))))        e = p;      else if (p instanceof TreeNode)        e = ((TreeNode<K,V>)p).putTreeVal(this, tab, hash, key, value);      else {        for (int binCount = 0; ; ++binCount) {          if ((e = p.next) == null) {            p.next = newNode(hash, key, value, null);            if (binCount >= TREEIFY_THRESHOLD - 1) // -1 for 1st              treeifyBin(tab, hash);            break;          }          if (e.hash == hash &&            ((k = e.key) == key || (key != null && key.equals(k))))            break;          p = e;        }      }      if (e != null) { // existing mapping for key        V oldValue = e.value;        if (!onlyIfAbsent || oldValue == null)          e.value = value;        afterNodeAccess(e);        return oldValue;      }    }    ++modCount;    if (++size > threshold)      resize();    afterNodeInsertion(evict);    return null;  }public boolean add(E e) {    return map.put(e, PRESENT)==null;  }// PRESENT是一个Object 对象 private static final Object PRESENT = new Object();

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 资料下载
  • 历年真题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯