hashmap

计算一个字符串中各个字符出现的次数

╄→尐↘猪︶ㄣ 提交于 2020-03-04 12:16:57
在开源中国中看到有一篇关于这个的,所以一时兴起,可能不如他写的好,不过也是另一种思路。 package 六二; import java.util.HashMap; import java.util.Iterator; import java.util.Map; public class 计算一个字符串中各个字符出现的次数 { public static void main(String[] args) { String str = "abcdeaaaa"; HashMap<Character, Integer> strhash = new HashMap<Character, Integer>(); int num = 0; int count = 0; for (int i = 0; i <= str.length() - 1; i++) { char c = str.charAt(i); int temp = 0; for (int j = 0; j <= str.length() - 1; j++) { num = str.indexOf(c, temp); if (num != -1) { count++; temp = num + 1; continue; } else { strhash.put(c, count); count = 0; break; } } } //

collection集合框架

只谈情不闲聊 提交于 2020-03-04 11:41:17
Java类集框架的优势: 1) 这种框架是高性能的。对基本类集(动态数组,链接表,树和散列表)的实现是高效率的。一般很少需要人工去对这些“数据引擎”编写代码。 2) 框架允许不同类型的类集以相同的方式和高度互操作方式工作。 3) 类集是容易扩展和/或修改的。为了实现这一目标,类集框架被设计成包含一组标准的接口。对这些接口,提供了几个标准的实现工具(例如LinkedList,    HashSet和TreeSet),通常就是这样使用的。如果你愿意的话,也可以实现你自己的类集。为了方便起见,创建用于各种特殊目的的实现工具。一部分工具可 以使你自己的类集实现更加容易。 4) 增加了允许将标准数组融合到类集框架中的机制。 常用的方法:      boolean add( E e) :向集合中增加元素,如果该类型集合允许有重复元素(如:ArrayList、LinkedList等)或者不允许有重复元素但新添加的元素不在集合中则返回true,如果该类型集合不允许有重复元素并且新添加的元素已经在集合中则返回false。 boolean addAll( Collection <? extends E > c) :将一个类集c中的所有元素添加到另一个类集(本类集)。 void clear() :清除本类集中所有元素,调用完该方法后本类集将为空。 boolean contains(Object o)

collection 框架

喜夏-厌秋 提交于 2020-03-04 11:31:04
集合框架(Collection Framework)泛指java.util包的若干个类和接口.如Collection,List,ArrayList,LinkedList,Vector(自动增长数组),HashSet,HashMap等. 集合框架中的类主要封装的是典型的数据结构,如动态数组,链表,堆栈,集合,哈希表等. 集合框架类似编程中经常用到的工具类,使得编码这专注于业务层的实现,不需要从底层实现相关细节—“数据结构的封装”和”典型算法的实现”. 1. Collection框架中实现比较要实现什么接口? Comparable/comparator 2. ArrayList和Vector的区别? 这两个类都实现了List接口,List接口继承了Collection接口,他们都是有序集合.即存储在这两个集合中的元素的位置都是由顺序的,相当于一种动态的数组,我们以后可以按位置索引号来取出某个元素,并且其中的数据是允许重复的.这是HashSet之类的集合的最大不同处,HashSet之类的集合不可以按索引号去检索其中的元素.也不允许有重复的元素.本题目本与hashset没有任何关系,但为了说清楚ArrayList和Vector的功能,我们使用对比方式,有利于说明问题. 接着才说ArrayList与Vector的区别,主要包括两个方面: (1)同步性 Vector是线程安全的

android的上下文菜单

风格不统一 提交于 2020-03-04 09:55:50
android的菜单有三种: Options Menu 当用户按下menu button按钮时显示的菜单 Context Menu 当用户长久按住屏幕,即被注册显示上下文菜单的视图时显示的菜单 Submenu 当用户按下一个菜单的某个选项时弹出的子菜单 现在演示一个上下文菜单。 main.xml布局文件:此布局文件定义了listview,用来显示一组列表,稍后上下文菜单将被注册到该listview,并且响应该listview。 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/layout" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ListView android:id="@+id/lv_list" android:layout_width="wrap_content" android:layout_height="fill_parent"> </ListView> </RelativeLayout> item.xml布局文件,用来显示listview中的一个单独的控件

HashMap常见面试题

感情迁移 提交于 2020-03-03 23:37:14
常见问题: 1、“你知道HashMap的工作原理吗?” “你知道HashMap的get()方法的工作原理吗?”   HashMap是基于hashing的原理,我们使用put(key, value)存储对象到HashMap中,使用get(key)从HashMap中获取对象。当我们给put()方法传递键和值时,我们先对键调用hashCode()方法,返回的hashCode用于找到bucket位置来储存Entry对象。”这里关键点在于指出,HashMap是在bucket中储存键对象和值对象,作为Map.Entry。 2、“当两个对象的hashcode相同会发生什么?”   因为hashcode相同,所以它们的bucket位置相同,‘碰撞’会发生。因为HashMap使用LinkedList存储对象,这个Entry(包含有键值对的Map.Entry对象)会存储在LinkedList中。(当向 HashMap 中添加 key-value 对,由其 key 的 hashCode() 返回值决定该 key-value 对(就是 Entry 对象)的存储位置。当两个 Entry 对象的 key 的 hashCode() 返回值相同时,将由 key 通过 eqauls() 比较值决定是采用覆盖行为(返回 true),还是产生 Entry 链(返回 false)。) 3、

HashMap分析

眉间皱痕 提交于 2020-03-03 16:51:36
目录 存储结构 初始化 put resize 树化 get 为什么HashMap中equals()和hashCode()要同时重写? 为何HashMap的数组长度一定是2的次幂? 线程安全 参考 存储结构 JDK1.8前是数组+链表,JDK1.8之后是数组+链表+红黑树。本文分析基于JDK1.8源代码。 HashMap的基础结构是Node ,它存着hash、键值对,Node类型的指针next。 主干是桶数组,链表bin用于解决hash冲突,当链表的Node超过阈值(8),执行树化操作,将该链表改造成红黑树。 图片来源:Java核心技术36讲 初始化 HashMap有4个构造器,其他构造器如果用户没有传入initialCapacity (容量)和loadFactor(负载因子)这两个参数, 会使用默认值 ,initialCapacity默认为16,loadFactory默认为0.75。 基于lazy-load原则,主干数组table的内存空间分配不在初始化中,而是在put中。 public HashMap(int initialCapacity, float loadFactor) { if (initialCapacity < 0) throw new IllegalArgumentException("Illegal initial capacity: " +

集合——HashMap的工作原理

我只是一个虾纸丫 提交于 2020-03-03 16:19:27
http://www.importnew.com/16301.html 好的链接 HashMap的工作原理? 1. HashMap的底层结构是 数组加链表 ; a.HashMap包含一个Entry(key,value,next,hash)的内部类,key/value放入HashMap 的时候都会被包装成Entry的 对象 b.HashMap成员就有Entry数组,该数组的大小默认是16,永远都是2的次方数,如果自己给出的不是 2的次方数会转换成大 于并接近自己给的2 的次方数。 put(key,value)就是转换成Entry对象并放入数组中。 2.put方法的实现; c.1 根据key的HashCode进行Hash运算,得到hash值 c.2 根据hash值去确定数组的位置, hash&(table.length-1)等价于hash%(table.length) length是2的次方数该 公式成立, 正获取数组的位置 <bucket>。 c.3 如果这个位置没有元素存在,直接包装成Entry实例,给元素数组附值; 如果计算出的位置有元素已经存在,就会判断key是否相同,如果相同就会覆盖,并且遍历整个链表 如果都不覆盖插入到链表的头部 。 for (Entry<K,V> e = table [ i ]; e != null ; e = e . next ) 注意1

Hessian 反序列化及相关利用链

久未见 提交于 2020-03-03 07:58:44
作者:Longofo@知道创宇404实验室 时间:2020年2月20日 原文地址: https://paper.seebug.org/1131/#_2 前不久有一个关于Apache Dubbo Http反序列化的漏洞,本来是一个正常功能(通过正常调用抓包即可验证确实是正常功能而不是非预期的Post),通过Post传输序列化数据进行远程调用,但是如果Post传递恶意的序列化数据就能进行恶意利用。Apache Dubbo还支持很多协议,例如Dubbo(Dubbo Hessian2)、Hessian(包括Hessian与Hessian2,这里的Hessian2与Dubbo Hessian2不是同一个)、Rmi、Http等。Apache Dubbo是远程调用框架,既然Http方式的远程调用传输了序列化的数据,那么其他协议也可能存在类似问题,例如Rmi、Hessian等。@pyn3rd师傅之前在twiter发了关于Apache Dubbo Hessian协议的反序列化利用,Apache Dubbo Hessian反序列化问题之前也被提到过, 这篇文章 里面讲到了Apache Dubbo Hessian存在反序列化被利用的问题,类似的还有Apache Dubbo Rmi反序列化问题。之前也没比较完整的去分析过一个反序列化组件处理流程,刚好趁这个机会看看Hessian序列化、反序列化过程,以及

(算法学习)兵乓球比赛的分制

拟墨画扇 提交于 2020-03-03 05:08:51
乒乓球比赛分为11分制和21分制,(得分达到了11分或者21分为赢一局)下面输入比赛的获胜情况,分别输出11分制和21分制的比赛结果 其中输入数据中W代表甲得分,L代表乙得分,E代表输入结束,可以多行输入,并忽视E以后的内容。 例如: 输入: WWWWWWWWWWWWWWWWWWWW WWWWWLEEE 输出:11分制 第1局: 11:0 第2局:11:0 第3局:3:1 21分制 第1局: 21:0 第2局:4:0 输入: WWWWWWWLWLWWWWWWWWWWL LWWWWWWLEEE 输出: 11分制 第1局:9:2 第2局:9:2 第3局:6:1 21分制 第1局:18:3 第2局:6:2 思路: 1)检验输入,当遇到E就停止; 2)将E以后所有的及其E都删除; 3)11分制:将字符串划分成11,11,这样,然后开始计数,最后输出; 4)同样21分制---- 代码分享: package StringDemo; //乒乓球比赛 //乒乓球比赛分为11分制和21分制,(得分达到了11分或者21分为赢一局)下面输入比赛的获胜情况,分别输出11分制和21分制的比赛结果 //其中输入数据中W代表甲得分,L代表乙得分,E代表输入结束,可以多行输入,并忽视E以后的内容。 //例如: //输入: // WWWWWWWWWWWWWWWWWWWW // WWWWWLEEE //输出:11分制

面试必问的HashMap改变了啥?

心不动则不痛 提交于 2020-03-03 01:25:57
微信公众号: Java修炼手册 关注可领取3T编程资料及面试题解。问题或建议,请公众号留言; 希望我的分享对你有所帮助 HashMap HashMap是面试必问的知识点之一,也是java开发最常用的一种数据模型,HashMap属于复合结构,以key-value形式存储数据,其中key是不允许重复的但是允许为空,value是可以重复或为空的,在jdk1.8前,它的结构为数组+链表,在jdk1.8后变成了数组+单向链表+红黑树 当JVM存储HashMap的K-V时,首先计算key的hash值,以此来确定插入的数组位置,但是这一hash值的位置可能已经存在有值,这时就顺延到同一hash值的元素的后面形成了单向链表,同一个链表上的Hash值是相同的,所以说数组存放的是链表!他的结构图: 红黑树的阈值是8,当链表大于等于8时链表变成了红黑树结构,大大减少了查找的时间。 这是源码的解释: 1 /** 2 * The bin count threshold for using a tree rather than list for a 3 * bin. Bins are converted to trees when adding an element to a 4 * bin with at least this many nodes. The value must be greater 5