返回顶部
首页 > 资讯 > 后端开发 > Python >Java哈希表和有序表实例代码讲解
  • 773
分享到

Java哈希表和有序表实例代码讲解

Java哈希表和有序表Java哈希表Java有序表 2023-05-15 14:05:47 773人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录哈希表(HashMap)按值传递按址传递内存大小比较有序表(TreeMap)哈希表(HashMap) hash查询的时间复杂度是O(1) 按值传递 Character,Short

哈希表(HashMap)

hash查询的时间复杂度是O(1)

按值传递

Character,Short,Integer,Long, Float,Double,String,Boolean,在java当中哈希表内部以值的形式传递,而不是一地址的形式传递。

例如:

HashMap<Integer, String> intMap = new HashMap<>();
intMap.put(1234567, "111");
Integer a = 1234567;
Integer b = 1234567;
System.out.println("a==b = " + (a == b));
System.out.println("a.equals(b) = " + a.equals(b));
System.out.println("intMap.get(a) = " + intMap.get(a));
System.out.println("intMap.get(b) = " + intMap.get(b));

// 输出结果
// a==b = false
// a.equals(b) = true
// intMap.get(a) = 111
// intMap.get(b) = 111

由上边的案例中 a!= b,但是intMap.get(a) == intMap.get(b).我们可以看出,在我们从hashmap里面查询或者操作某些值的话,是以值的形式去传递和匹配的,而不是以内存地址的形式去匹配。

按址传递

如果是非原生的类型的话,以内存地址的形式传递。例如:

public static class node {
    private int value;
    public Node(int value) {
        this.value = value;
    }
}
HashMap<Node, String> map = new HashMap<>();
Node node1 = new Node(1);
Node node2 = new Node(1);
map.put(node1, "ziop");
System.out.println("map.containsKey(node1) = " + map.containsKey(node1));
System.out.println("map.containsKey(node2) = " + map.containsKey(node2));

//输出结果
//map.containsKey(node1) = true
//map.containsKey(node2) = false

内存大小比较

基础类型,一条记录的内存大小是Key的大小加上Value的大小。

非基础类型, 一条记录的内存大小是 两个地址的大小, 一个地址8字节,key和value 共16字节

如果是 基础类型和非基础类型的混合类型的话,就是各自按照各自的方式计算

有序表(TreeMap)

  • 有序表会根据key的大小进行 升序排列 ,我们可以用他来做hashmap中的所有操作,并且扩展出了,查找第一个key或者最后一个key的操作,也扩展出了查找小于某个区间的最大值和大于某个区间的最小值
  • 所有操作时间复杂度都是O(logn)级别。
  • 但是如果key是非基础类型的话,并不能直接排序,需要该类型实现了排序接口,有可排序功能。或者在new treeMap的时候传入比较方法

存放基础类型操作

TreeMap<Integer, String> treeMap = new TreeMap<>();
treeMap.put(3,"我是3 ");
treeMap.put(0,"我是3 ");
treeMap.put(7,"我是3 ");
treeMap.put(2,"我是3 ");
treeMap.put(5,"我是3 ");
treeMap.put(9,"我是3 ");
treeMap.put(1,"我是3 ");
System.out.println("treeMap.containsKey(3) = "+treeMap.containsKey(3));
System.out.println("treeMap.containsKey(6) = "+treeMap.containsKey(6));
System.out.println("treeMap.get(3) = "+treeMap.get(3));
treeMap.put(3,"他是3");
System.out.println("treeMap.get(3) = "+treeMap.get(3));
treeMap.remove(3);
System.out.println("treeMap.get(3) = "+treeMap.get(3));
treeMap.remove(3);
System.out.println("treeMap.firsTKEy() = "+treeMap.firstKey());
System.out.println("treeMap.lastKey() = "+treeMap.lastKey());
//        返回 小于等于五 并且最近的 key
System.out.println("treeMap.floorKey(5) = "+treeMap.floorKey(5));
System.out.println("treeMap.floorKey(6) = "+treeMap.floorKey(6));
//        返回 大于等于 4 并且最靠近的值
System.out.println("treeMap.ceilingKey(4) = "+treeMap.ceilingKey(4));

//输出结果如下
//treeMap.containsKey(3) = true 
//treeMap.containsKey(6) = false 
//treeMap.get(3) = 我是3 
//treeMap.get(3) = 他是3
//treeMap.get(3) = null
//treeMap.firstKey() = 0
//treeMap.lastKey() = 9
//treeMap.floorKey(5) = 5
//treeMap.floorKey(6) = 5
//treeMap.ceilingKey(4) = 5

存放非基础类型进行操作

//        存放非基础类型
public static void main(String[] args) {
	TreeMap<Node, Integer> treeMap1 = new TreeMap<>();
	Node node3 = new Node(3);
	Node node4 = new Node(4);
	treeMap1.put(node3, 3);
	treeMap1.put(node4, 4);
	System.out.println("treeMap1.firstEntry().getValue() = " + treeMap1.firstEntry().getValue());
	System.out.println("treeMap1.lastEntry().getValue() = " + treeMap1.lastEntry().getValue());
}
public static class Node implements Comparable<Node> {
	private int value;
    public Node(int value) {
    	this.value = value;
	}
        @Override
    public int compareTo(Node node) {
        return this.value - node.value; 
    }
}

到此这篇关于Java哈希表和有序表实例代码讲解的文章就介绍到这了,更多相关Java哈希表和有序表内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java哈希表和有序表实例代码讲解

本文链接: https://lsjlt.com/news/209119.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java哈希表和有序表实例代码讲解
    目录哈希表(HashMap)按值传递按址传递内存大小比较有序表(TreeMap)哈希表(HashMap) hash查询的时间复杂度是O(1) 按值传递 Character,Short...
    99+
    2023-05-15
    Java哈希表和有序表 Java哈希表 Java有序表
  • Java哈希表和有序表如何实现
    这篇文章主要介绍“Java哈希表和有序表如何实现”,在日常操作中,相信很多人在Java哈希表和有序表如何实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java哈希表和有序表如何实现”的疑惑有所帮助!接下来...
    99+
    2023-07-06
  • Java哈希表和有序表怎么实现
    本文小编为大家详细介绍“Java哈希表和有序表怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java哈希表和有序表怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。哈希表(HashMap)hash查...
    99+
    2023-07-06
  • Java超详细分析讲解哈希表
    目录哈希表概念哈希函数的构造平均数取中法折叠法保留余数法哈希冲突问题以及解决方法开放地址法再哈希函数法公共溢出区法链式地址法哈希表的填充因子代码实现哈希函数添加数据删除数据判断哈希表...
    99+
    2024-04-02
  • 哈希表的原理及实现代码
    哈希表可以表述为,是一种可以根据关键字快速查询数据的数据结构 一. 哈希表有哪些优点? 不论哈希表中数据有多少,增加,删除,改写数据的复杂度平均都是O(1),效率非常高 二. 实现哈希表 1. 哈希表原理 如果说每一个数据它都对应着一个固...
    99+
    2023-01-31
    原理 代码 哈希表
  • 讲解Java 哈希表(google 公司的上机题)
    这篇文章主要介绍“讲解Java 哈希表(google 公司的上机题)”,在日常操作中,相信很多人在讲解Java 哈希表(google 公司的上机题)问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”讲解Java ...
    99+
    2023-06-07
  • 带你了解Java数据结构和算法之哈希表
    目录1、哈希函数的引入①、把数字相加②、幂的连乘2、冲突3、开放地址法①、线性探测②、装填因子③、二次探测④、再哈希法4、链地址法5、桶6、总结1、哈希函数的引入 大家都用过字典,字...
    99+
    2024-04-02
  • Java 普通代码块静态代码块执行顺序(实例讲解)
    如下所示:class B { public B() { super(); System.out.println("构造器B"); } { System.out.println("普通的代码块B"); } static{ System...
    99+
    2023-05-31
    静态代码块 执行顺序 java
  • Java Servlet实现表白墙的代码实例
    目录一、表白墙简介二、代码实现 1、约定前后端交互的接口2、后端代码实现3、前端代码实现  三、效果演示总结 一、表白墙简介 在表白墙页面中包...
    99+
    2023-02-21
    servlet 表白墙 表白墙代码制作 表白墙源代码
  • Java实现双链表的示例代码
    目录一、双向链表是什么二、具体方法实现定义结点下标访问异常获取链表长度打印链表清空链表头插法尾插法指定位置插入查找元素删除第一次出现的关键字删除所有值为key的节点三、完整代码一、双...
    99+
    2024-04-02
  • C语言动态顺序表实例代码
    目录顺序表概念:一.准备工作二、顺序表的基本操作 1.顺序表的初始化函数2.尾插函数(在尾部插入数据)3.头插函数(在数组头部插入数据) 4.尾删函数5.头删函数6.在第pos的位置...
    99+
    2024-04-02
  • Python实现希尔排序,归并排序和桶排序的示例代码
    目录1. 前言2. 希尔排序2.1 前后切分2.2 增量切分3. 归并排序3.1 分解子问题3.2 求解子问题3.3 合并排序4. 基数排序5. 总结1. 前言 本文将介绍希尔排序、...
    99+
    2024-04-02
  • Java 17新特性讲解与代码实例
    Java 17是Java SE 17的开源参考实现,于2021年9月14日正式发布,是Java 11以来的又一个长期支持(LTS)版本。Java 17中有一些新的特性和改进,本文将对它们进行简要的介绍和示例。 密封类 密封类和接口限制了哪些...
    99+
    2023-09-07
    java 开发语言 java17
  • python实现合并两个有序列表的示例代码
    题目描述 将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 LeetCode原题地址:https://leetcode-cn.com/pr...
    99+
    2024-04-02
  • Java 集合框架掌握 Map 和 Set 的使用(内含哈希表源码解读及面试常考题)
    目录1. 搜索1.1 场景引入1.2 模型2. Map2.1 关于 Map 的介绍2.2 关于 Map.Entry<K, V> 的介绍2.3 Map 的常用方法说明2.4...
    99+
    2024-04-02
  • sqlserver多表联合查询和多表分页查询的代码讲解
    这篇文章主要为大家详细介绍了sqlserver多表联合查询和多表分页查询的方法,图文详解容易学习,配合代码阅读理解效果更佳,非常适合初学者入门,感兴趣的小伙伴们可以参考一下。多表联查:select...
    99+
    2024-04-02
  • Java实现一个顺序表的完整代码
    实现一个顺序表 接口实现 定义一个MyArrayList类,在类中实现以下函数 public class MyArrayList { } 数组的定义 public ...
    99+
    2024-04-02
  • vue实现列表拖拽排序的示例代码
     本文主要介绍了vue实现列表拖拽排序的示例代码,具体如下: <template> <div class="test_wrapper" @drago...
    99+
    2024-04-02
  • C/C++实现线性顺序表的示例代码
    目录线性顺序表简介C语言实现代码C++语言实现代码线性顺序表简介 使用顺序存储结构的线性存储结构的表为线性顺序表,线性存储结构是元素逻辑结构一对一,顺序存储结构是元素物理结构连续,线...
    99+
    2024-04-02
  • Java实现浪漫流星表白的示例代码
    目录介绍核心代码注意事项介绍 本文实现的功能有: 1、播放音乐 2、自定义流星数量、飞行速度、光晕大小、流星大小 3、自定义表白话语  运用到的知识点有: GUI:java...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作