第四篇集合与容器(代码片段)

zhangzhipeng001 zhangzhipeng001     2022-12-24     726

关键词:

package com.zzp.demo.myCollection;
/**
*
* 用于HashMap
* @author java
*
*/
public class Node2
int hash;
Object key;
Object value;
Node2 next;

 

package com.zzp.demo.myCollection;
/**
 * 
 * 自定义HashMap
 * @author java
 *
 */
public class HashMap01 
    Node2[] table; //位桶数组
    int size; //存放键值对的个数
    
    public HashMap01() 
        table = new Node2[16]; //一般定义成2的整数幂
    
    
    public void put(Object key,Object value)
        //定义新的节点对象
        Node2 newNode = new Node2();
        newNode.hash = myHash(key.hashCode(), table.length);
        newNode.key = key;
        newNode.value = value;
        newNode.next = null;
        
        Node2 temp = table[newNode.hash];
        Node2 iterLast = null;
        boolean keyRepeat = false;
        if(temp == null)
            //此处元素为空,则直接将新节点放进去
            table[newNode.hash] = newNode;
       size++;
else //此处的节点不为空,则直接遍历对应链表 while(temp != null) //判断如果key重复,则覆盖 if(temp.key.equals(key)) System.out.println("key重复,则覆盖"); keyRepeat = true; //只覆盖value 其他的不变 temp.value = value; break; else //如果key不重复,则遍历下一个 iterLast = temp; temp = temp.next; if(!keyRepeat) iterLast.next = newNode;
          size++;
public static int myHash(int v,int length) // System.out.println(v&(length-1));//直接位运算效率高 // System.out.println(v%(length-1));//取模效率低 return v&(length-1); public static void main(String[] args) HashMap01 hs = new HashMap01(); hs.put(10, "aa"); hs.put(20, "bb"); hs.put(30, "cc"); hs.put(20, "ssss"); hs.put(53, "dd"); hs.put(69, "ee"); hs.put(85, "ff"); /*for(int i = 10;i<100;i++) System.out.println(i+"---"+myHash(i,16));//21,37,53 */ System.out.println(hs);

 第二版

package com.zzp.demo.myCollection;
/**
 * 
 * 实现toString方法,方便查看map中的键值对信息
 * @author java
 *
 */
public class HashMap02 
    Node2[] table; //位桶数组
    int size; //存放键值对的个数
    
    public HashMap02() 
        table = new Node2[16]; //一般定义成2的整数幂
    
    
    public void put(Object key,Object value)
        //定义新的节点对象
        Node2 newNode = new Node2();
        newNode.hash = myHash(key.hashCode(), table.length);
        newNode.key = key;
        newNode.value = value;
        newNode.next = null;
        
        Node2 temp = table[newNode.hash];
        Node2 iterLast = null;
        boolean keyRepeat = false;
        if(temp == null)
            //此处元素为空,则直接将新节点放进去
            table[newNode.hash] = newNode;
       size++;
else //此处的节点不为空,则直接遍历对应链表 while(temp != null) //判断如果key重复,则覆盖 if(temp.key.equals(key)) System.out.println("key重复,则覆盖"); keyRepeat = true; //只覆盖value 其他的不变 temp.value = value; break; else //如果key不重复,则遍历下一个 iterLast = temp; temp = temp.next; if(!keyRepeat) iterLast.next = newNode;
          size++;
public static int myHash(int v,int length) // System.out.println(v&(length-1));//直接位运算效率高 // System.out.println(v%(length-1));//取模效率低 return v&(length-1); @Override public String toString() StringBuilder sb = new StringBuilder(""); for(int i=0;i<table.length;i++) Node2 temp = table[i]; while(temp != null) sb.append(temp.key+":"+temp.value+","); temp = temp.next; sb.setCharAt(sb.length()-1, ‘‘); return sb.toString(); public static void main(String[] args) HashMap02 hs = new HashMap02(); hs.put(10, "aa"); hs.put(20, "bb"); hs.put(30, "cc"); hs.put(20, "ssss"); hs.put(53, "dd"); hs.put(69, "ee"); hs.put(85, "ff"); /*for(int i = 10;i<100;i++) System.out.println(i+"---"+myHash(i,16));//21,37,53 */ System.out.println(hs.toString());

 第三版

package com.zzp.demo.myCollection;
/**
 * 
 * 根据键对象获取值对象
 * @author java
 *
 */
public class HashMap03 
    Node2[] table; //位桶数组
    int size; //存放键值对的个数
    
    public HashMap03() 
        table = new Node2[16]; //一般定义成2的整数幂
    
    

    public Object get(Object key)
        int hash = myHash(key.hashCode(), table.length);
        Object value = null;
        
        if(table[hash] != null)
            Node2 temp = table[hash];
            while(temp != null)
                if(temp.key.equals(key))
                    value = temp.value;
                    break;
                else
                    temp = temp.next;
                
            
        
        return value;
    
    
    public void put(Object key,Object value)
        //定义新的节点对象
        Node2 newNode = new Node2();
        newNode.hash = myHash(key.hashCode(), table.length);
        newNode.key = key;
        newNode.value = value;
        newNode.next = null;
        
        Node2 temp = table[newNode.hash];
        Node2 iterLast = null;
        boolean keyRepeat = false;
        if(temp == null)
            //此处元素为空,则直接将新节点放进去
            table[newNode.hash] = newNode;
       size++;
else //此处的节点不为空,则直接遍历对应链表 while(temp != null) //判断如果key重复,则覆盖 if(temp.key.equals(key)) System.out.println("key重复,则覆盖"); keyRepeat = true; //只覆盖value 其他的不变 temp.value = value; break; else //如果key不重复,则遍历下一个 iterLast = temp; temp = temp.next; if(!keyRepeat) iterLast.next = newNode;
          size++;
public static int myHash(int v,int length) // System.out.println(v&(length-1));//直接位运算效率高 // System.out.println(v%(length-1));//取模效率低 return v&(length-1); @Override public String toString() StringBuilder sb = new StringBuilder(""); for(int i=0;i<table.length;i++) Node2 temp = table[i]; while(temp != null) sb.append(temp.key+":"+temp.value+","); temp = temp.next; sb.setCharAt(sb.length()-1, ‘‘); return sb.toString(); public static void main(String[] args) HashMap03 hs = new HashMap03(); hs.put(10, "aa"); hs.put(20, "bb"); hs.put(30, "cc"); hs.put(20, "ssss"); hs.put(53, "dd"); hs.put(69, "ee"); hs.put(85, "ff"); /*for(int i = 10;i<100;i++) System.out.println(i+"---"+myHash(i,16));//21,37,53 */ System.out.println(hs.toString()); System.out.println(hs.get(85));

 第四版

package com.zzp.demo.myCollection;
/**
 * 
 * 用于HashMap
 * @author java
 *
 */
public class Node3<K,V> 
    int hash;
    K key;
    V value;
    Node3 next;    
package com.zzp.demo.myCollection;
/**
 * 
 * 增加泛型
 * @author java
 *
 */
public class HashMap04<K,V> 
    Node3[] table; //位桶数组
    int size; //存放键值对的个数
    
    public HashMap04() 
        table = new Node3[16]; //一般定义成2的整数幂
    
    

    public V get(K key)
        int hash = myHash(key.hashCode(), table.length);
        V value = null;
        
        if(table[hash] != null)
            Node3 temp = table[hash];
            while(temp != null)
                if(temp.key.equals(key))
                    value = (V)temp.value;
                    break;
                else
                    temp = temp.next;
                
            
        
        return value;
    
    
    public void put(K key,V value)
        //定义新的节点对象
        Node3 newNode = new Node3();
        newNode.hash = myHash(key.hashCode(), table.length);
        newNode.key = key;
        newNode.value = value;
        newNode.next = null;
        
        Node3 temp = table[newNode.hash];
        Node3 iterLast = null;
        boolean keyRepeat = false;
        if(temp == null)
            //此处元素为空,则直接将新节点放进去
            table[newNode.hash] = newNode;
            size++;
        else
            //此处的节点不为空,则直接遍历对应链表
            while(temp != null)
                //判断如果key重复,则覆盖
                if(temp.key.equals(key))
                    System.out.println("key重复,则覆盖");
                    keyRepeat = true;
                    //只覆盖value  其他的不变
                    temp.value = value;
                    break;
                else
                    //如果key不重复,则遍历下一个
                    iterLast = temp;
                    temp = temp.next;
                
            
            if(!keyRepeat)
                iterLast.next = newNode;
                size++;
            
        
    
    
    public static int myHash(int v,int length)
//        System.out.println(v&(length-1));//直接位运算效率高
//        System.out.println(v%(length-1));//取模效率低
        return v&(length-1);
    
    
    @Override
    public String toString() 
        StringBuilder sb = new StringBuilder("");
        for(int i=0;i<table.length;i++)
            Node3 temp = table[i];
            while(temp != null)
                sb.append(temp.key+":"+temp.value+",");
                temp = temp.next;
            
        
        sb.setCharAt(sb.length()-1, ‘‘);
        return sb.toString();
    

    
    public static void main(String[] args) 
        HashMap04<Integer,String> hs = new HashMap04<>();
        hs.put(10, "aa");
        hs.put(20, "bb");
        hs.put(30, "cc");
        hs.put(20, "ssss");
        hs.put(53, "dd");
        hs.put(69, "ee");
        hs.put(85, "ff");
        
        /*for(int i = 10;i<100;i++)
            System.out.println(i+"---"+myHash(i,16));//21,37,53
        */
        System.out.println(hs.toString());
        System.out.println(hs.get(85));
    

 




















第四篇:断路器(hystrix)(代码片段)

一、断路器简介。在微服务架构中,根据业务来拆分成一个个的服务,服务与服务之间可以相互调用(RPC),在SpringCloud可以用RestTemplate+Ribbon和Feign来调用。为了保证其高可用,单个服务通常会集群部署。由于网络原因或者自身... 查看详情

高级程序员必须精通的redis,第四篇之——set(集合)(代码片段)

1、简介Redis中所有的的数据结构都是通过一个唯一的字符串key来获取相应的value数据。Redis有5种基础数据结构,分别是:string(字符串)list(列表)hash(字典)set(集合)zset(有序集合... 查看详情

数据分析第四篇:聚类分析(划分)(代码片段)

聚类是把一个数据集划分成多个子集的过程,每一个子集称作一个簇(Cluster),聚类使得簇内的对象具有很高的相似性,但与其他簇中的对象很不相似,由聚类分析产生的簇的集合称作一个聚类。在相同的数据集上,不同的聚... 查看详情

jdk11|第四篇:增强api(代码片段)

文章首发于公众号《程序员果果》地址:https://mp.weixin.qq.com/s/O0xntC-JfeSBk-9x2QfwnA一、简介JDK9~11在语言语法方面有一个小改动,增加了相当数量的新API,这一节讲解下JDK1.8之后新增的一些API。二、增强API1.集合的增强api自Java9开始,Jd... 查看详情

kubernetes第四篇:手把手打镜像并运行到k8s容器上(亲测可用)(代码片段)

文章目录一、前言二、wordpress博客系统2.1开发流程2.2效果演示三、自己写一个springboot项目生成镜像部署到K8S集群中3.1开发流程3.2效果演示四、部署Nacos项目4.1传统方式启动两个服务(user和order)4.1.1开发流程4.1.2效果演示4.2两个服务... 查看详情

juc-共享模型之无锁-第四篇(代码片段)

四、共享模型之无锁1.本章内容CAS与volatile原子整数原子引用原子累加器Unsafe2.问题提出有如下需求,保证account.withdraw取款方法的线程安全packagecn.itcast;importjava.util.ArrayList;importjava.util.List;interfaceAccount//获取余额IntegergetBalance();//取... 查看详情

git从青铜到王者第四篇:git的分支与合并(代码片段)

系列文章目录文章目录系列文章目录前言一、Git分支1.Git分支简介2.Git分支创建3.Git分支切换二、Git分支的新建与合并1.新建分支2.分支的合并3.遇到冲突时的分支合并三、分支管理四、分支开发工作流1.长期分支2.主题分支五、远... 查看详情

第四篇:记录相关操作(代码片段)

一介绍MySQL数据操作:DML========================================================在MySQL管理软件中,可以通过SQL语句中的DML语言来实现数据的操作,包括使用INSERT实现数据的插入UPDATE实现数据的更新使用DELETE实现数据的删除使用SELECT查询数据... 查看详情

abp异常处理第四篇(代码片段)

异常ABP异常分类 ABP的异常基类源代码ABPException的源代码如下///<summary>///BaseexceptiontypeforthosearethrownbyAbpsystemforAbpspecificexceptions.///</summary>[Serializable]publicclassAbpException:Exceptio 查看详情

第四篇io流技术(代码片段)

packagecom.zzp.demo01;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.IOException;importjava.io.InputStream;/****第一个程序理解操作步骤*1、创建源*2、选择流*3、操作*4、释放资源* 查看详情

excel催化剂开源第50波-excel与powerbidesktop互通互联之第四篇(代码片段)

答应过的全盘分享,也必承诺到底,此篇PowerBI功能分享的最后一篇,讲述如何导出数据模型的元数据,笔者定义其为模型的数据字典。此篇对应功能实现出自:第6波-导出PowerbiDesktop模型数据字典https://www.jianshu.com/p/bc26a8dcdfce关... 查看详情

opencv入门指南第四篇图像的二值化(代码片段)

【OpenCV入门指南】第四篇图像的二值化  在上一篇《【OpenCV入门指南】第三篇Canny边缘检测》中介绍了使用Canny算子对图像进行边缘检测。与边缘检测相比,轮廓检测有时能更好的反映图像的内容。而要对图像进行轮廓检... 查看详情

第四篇博客(代码片段)

wcphahaha CSSGrid布局基础grid关键词解释 grid-template-columns: repeat(3,1fr):template:模板;column:纵列;repeat:重复;(3,1fr):将页面分成3纵列、每一列宽度为1fr(fr是自适应长度单位); grid-gap:10px:间隙大小10px;  g... 查看详情

django第四篇(代码片段)

模板的继承:你首先继承一个html页面,继承了意味你拥有父模板所有的东西,你只需要在父模板的基础上修改布局即可第一步;在父模板划分多个区域%block给区域起的名字%父模板需要被重写或者重用的代码%endblock%第二步,在子... 查看详情

第四篇:模块与包

第四篇:模块与包  PYTHON-模块定义搜索路径PYTHON-包相对导入&绝对导入  查看详情

第四篇:docker安装并启动一个http容器

知识背景官方文档:https://docs.docker.com/engine/installation/docker分为社区版(CE)和企业版(EE),他们最大的区别就是:社区版是开源免费的,企业版是收费的。对于想要学习docker容器、或者小型开发团队来说,首选Docker社区版.1.卸... 查看详情

第四篇:路由网关(zuul)(代码片段)

一 Zuul简介Zuul的主要功能是路由转发和过滤器。路由功能是微服务的一部分,比如/user/**转发到到user服务,/api/**转发到到api服务。zuul默认和Ribbon结合实现了负载均衡的功能。二 Zuul的路由功能创建一个Module叫zuul &nbs... 查看详情

第四篇:文件处理(代码片段)

一、文件操作介绍计算机系统分为:计算机硬件,曹祖系统,应用程序三部分。我们用Python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件,众所周知,应用程序是... 查看详情