当前位置: 首页 > news >正文

哪个网站可以做付费推广搜索引擎优化步骤

哪个网站可以做付费推广,搜索引擎优化步骤,怎样创建app,微商怎么做推广一、HashMap的数据结构 数组的特点是#xff1a;寻址容易#xff0c;插入和删除困难#xff1b;而链表的特点是#xff1a;寻址困难#xff0c;插入和删除容易。那么我们能不能综合两者的特性#xff0c;做出一种寻址容易#xff0c;插入删除也容易的数据结构#xff1…一、HashMap的数据结构   数组的特点是寻址容易插入和删除困难而链表的特点是寻址困难插入和删除容易。那么我们能不能综合两者的特性做出一种寻址容易插入删除也容易的数据结构答案是肯定的这就是我们要提起的哈希表哈希表有多种不同的实现方法我接下来解释的是最常用的一种方法—— 拉链法我们可以理解为“链表的数组” 如图 从上图我们可以发现哈希表是由数组链表组成的一个长度为16的数组中每个元素存储的是一个链表的头结点。那么这些元素是按照什么样的规则存储到数组中呢。一般情况是通过hash(key)%len获得也就是元素的key的哈希值对数组长度取模得到。比如上述哈希表中12%1612,28%1612,108%1612,140%1612。所以12、28、108以及140都存储在数组下标为12的位置。   HashMap其实也是一个线性的数组实现的,所以可以理解为其存储数据的容器就是一个线性数组。这可能让我们很不解一个线性的数组怎么实现按键值对来存取数据呢这里HashMap有做一些处理。   1.首先HashMap里面实现一个静态内部类Entry其重要的属性有 key , value, next从属性key,value我们就能很明显的看出来Entry就是HashMap键值对实现的一个基础bean我们上面说到HashMap的基础就是一个线性数组这个数组就是Entry[]Map里面的内容都保存在Entry[]里面。 二、HashMap的存取实现      既然是线性数组为什么能随机存取这里HashMap用了一个小算法大致是这样实现 //存储时: int hash key.hashCode();// 这个hashCode方法这里不详述,只要理解每个key的hash是一个固定的int值 int index hash % Entry[].length; Entry[index] value;//取值时: int hash key.hashCode(); int index hash % Entry[].length; return Entry[index]; 到这里我们轻松的理解了HashMap通过键值对实现存取的基本原理     3.疑问如果两个key通过hash%Entry[].length得到的index相同会不会有覆盖的危险   这里HashMap里面用到链式数据结构的一个概念。上面我们提到过Entry类里面有一个next属性作用是指向下一个Entry。打个比方 第一个键值对A进来通过计算其key的hash得到的index0记做:Entry[0] A。一会后又进来一个键值对B通过计算其index也等于0现在怎么办HashMap会这样做:B.next A,Entry[0] B,如果又进来C,index也等于0,那么C.next B,Entry[0] C这样我们发现index0的地方其实存取了A,B,C三个键值对,他们通过next这个属性链接在一起。所以疑问不用担心。也就是说数组中存储的是最后插入的元素。到这里为止HashMap的大致实现我们应该已经清楚了。   当然HashMap里面也包含一些优化方面的实现这里也说一下。比如Entry[]的长度一定后随着map里面数据的越来越长这样同一个index的链就会很长会不会影响性能HashMap里面设置一个因素也称为因子随着map的size越来越大Entry[]会以一定的规则加长长度。 三、解决hash冲突的办法 开放定址法线性探测再散列二次探测再散列伪随机探测再散列再哈希法链地址法建立一个公共溢出区Java中hashmap的解决办法就是采用的链地址法。 四、实现自己的HashMap Entry.java package edu.sjtu.erplab.hash;public class EntryK,V{final K key;V value;EntryK,V next;//下一个结点//构造函数public Entry(K k, V v, EntryK,V n) {key k;value v;next n;}public final K getKey() {return key;}public final V getValue() {return value;}public final V setValue(V newValue) {V oldValue value;value newValue;return oldValue;}public final boolean equals(Object o) {if (!(o instanceof Entry))return false;Entry e (Entry)o;Object k1 getKey();Object k2 e.getKey();if (k1 k2 || (k1 ! null k1.equals(k2))) {Object v1 getValue();Object v2 e.getValue();if (v1 v2 || (v1 ! null v1.equals(v2)))return true;}return false;}public final int hashCode() {return (keynull ? 0 : key.hashCode()) ^ (valuenull ? 0 : value.hashCode());}public final String toString() {return getKey() getValue();}} View Code MyHashMap.java package edu.sjtu.erplab.hash;//保证key与value不为空 public class MyHashMapK, V {private Entry[] table;//Entry数组表static final int DEFAULT_INITIAL_CAPACITY 16;//默认数组长度private int size;// 构造函数public MyHashMap() {table new Entry[DEFAULT_INITIAL_CAPACITY];size DEFAULT_INITIAL_CAPACITY;}//获取数组长度public int getSize() {return size;}// 求indexstatic int indexFor(int h, int length) {return h % (length - 1);}//获取元素public V get(Object key) {if (key null)return null;int hash key.hashCode();// key的哈希值int index indexFor(hash, table.length);// 求key在数组中的下标for (EntryK, V e table[index]; e ! null; e e.next) {Object k e.key;if (e.key.hashCode() hash (k key || key.equals(k)))return e.value;}return null;}// 添加元素public V put(K key, V value) {if (key null)return null;int hash key.hashCode();int index indexFor(hash, table.length);// 如果添加的key已经存在那么只需要修改value值即可for (EntryK, V e table[index]; e ! null; e e.next) {Object k e.key;if (e.key.hashCode() hash (k key || key.equals(k))) {V oldValue e.value;e.value value;return oldValue;// 原来的value值}}// 如果key值不存在那么需要添加EntryK, V e table[index];// 获取当前数组中的etable[index] new EntryK, V(key, value, e);// 新建一个Entry并将其指向原先的ereturn null;}} View Code MyHashMapTest.java package edu.sjtu.erplab.hash;public class MyHashMapTest {public static void main(String[] args) {MyHashMapInteger, Integer map new MyHashMapInteger, Integer();map.put(1, 90);map.put(2, 95);map.put(17, 85);System.out.println(map.get(1));System.out.println(map.get(2));System.out.println(map.get(17));System.out.println(map.get(null));} } View Code转载于:https://www.cnblogs.com/doubiwan/p/7246137.html
http://www.yutouwan.com/news/24830/

相关文章:

  • 网站运营与管理的对策直播间挂人气自助网站
  • 网站建设需要的人员网站制作价目表
  • 网站建设这个工作怎么样建网站需成本多少钱
  • 租个国内服务器做网站多少钱wordpress资讯插件
  • 做ui的网站有哪些内容logo图片大全简单
  • 茶叶响应式网站wordpress 整合js
  • 正规的网站制作哪家好网站配置文件在哪里
  • 做网站服务器什么配置个人网站怎么做百度推广
  • 网站工程师是做什么的访问的网页正在升级中
  • 高端网站建设多少钱湖南郴州建设局网站
  • 新手用jsp做网站wordpress底部主题
  • 深圳比较好的设计网站公司吗免费刷赞网站推广免费
  • 外国网站架构网站开发赚钱方向
  • 大型网站开发企业怎么用WordPress搜索别人
  • 怎样用百度做网站优化大连爱得科技网站建设公司怎么样
  • 湘潭市建设局网站三亚网站建设价格
  • 站长工具手机综合查询网络营销的六大功能
  • 建设网站的情况说明书中国建设银行官网网站首页
  • 东台做网站的wordpress自动挣钱
  • 外包公司做的网站免费网站建设 godaddy
  • 甘肃网站备案企业运营方案
  • 做网站和做游戏哪个难济南做设计公司网站
  • 烟台主流网站精准防恶意点击软件
  • 常州网站排名优化wordpress门户
  • wordpress 站点错误ui设计哪里有培训班
  • 嘉定制作企业网站装饰公司简介模板
  • 北京网站制作应用上海网站开发caiyiduo
  • 电子商务网站课程设计总结网站建设研究课题
  • 宁波怎么做网站排名优化怎么样在网上建设网站挣钱
  • 腾讯网静态网站建设闵行区怎么读