使用Hashtable对字符串进行碰撞

1.在一些字符串数组中,常会有重复的记录,比如手机号码,我们可以通过Hashtable来对其进行过滤 public String[] checkArray(String[] str)...{
Hashtable<String, String> hash=new Hashtable<String, String>();

for(int i=0;i<str.length;i++)...{
if(!hash.containsKey(str[i]))
hash.put(str[i], str[i]);
}

Enumeration enumeration=hash.keys();
String[] str_new=new String[hash.size()];
int i=0;

while(enumeration.hasMoreElements())...{
str_new[i]=enumeration.nextElement().toString();
i++;
}
return str_new;
}
示例:
String[] mobile={"13811071500","13811071500","13811071501","13811071503","13811071501"};
mobile=checkArray(mobile);
for(int i=0;i<mobile.length;i++)
System.out.println(mobile[i]);
输出结果为:
13811071503
13811071501
13811071500
2.A,B均为字符串数组,找出在A中存在,而在B中不存在的字符串
public String[] compareArray(String[] A,String[] B){
Hashtable<String, String> hash=new Hashtable<String, String>();
Hashtable<String, String> hash_new=new Hashtable<String, String>();

for(int i=0;i<B.length;i++)
hash.put(B[i], B[i]);

for(int i=0;i<A.length;i++){
if(!hash.containsKey(A[i]))
hash_new.put(A[i], A[i]);
}

String[] C=new String[hash_new.size()];
int i=0;
Enumeration enumeration=hash_new.keys();

while(enumeration.hasMoreElements()){
C[i]=enumeration.nextElement().toString();
i++;
}
return C;
}
示例:
String[] mobile1={"13811071500","13811071501","13811071502","13811071503","13811071504"};
String[] mobile2={"13811071500","13811071505","13811071502","13811071506","13811071504"};
String[] mobile3=compareArray(mobile1,mobile2);
for(int i=0;i<mobile3.length;i++)
System.out.println(mobile[i]);
输出结果:
13811071503
13811071501
存在的问题:
每次都是倒序,可以再对程序稍加改动,变成正序。

3.将一个字符串数组中某一个特定的字符串过滤掉

/** *//**检验一个字符串数组,若包含某一特定的字符串,则将该字符串从数组中删
除,返回剩余的字符串数组
* @param str_array 字符串数组
* @param str_remove 待删除的字符串
* @return 过滤后的字符串
*/
public String[] removeStrFromArray(String[] str_array,String
str_remove)...{
Hashtable<String, String> hash=new Hashtable<String, String>();
for(int i=0;i<str_array.length;i++)...{
if(!str_array[i].equals(str_remove))
hash.put(str_array[i], str_array[i]);
}
//生成一个新的数组
String[] str_new=new String[hash.size()];
int i=0;
Enumeration enumeration=hash.keys();
while(enumeration.hasMoreElements())...{
str_new[i]=enumeration.nextElement().toString();
i++;
}
return str_new;
}

时间: 2024-08-19 22:37:47

使用Hashtable对字符串进行碰撞的相关文章

轻松搞定数据访问层[续2]

访问|数据 ' clsDataAccessOper 该类是所有数据访问类的父类 ' by YuJun ' www.hahaIT.com ' hahasoft@msn.com Public Class clsDataAccessOper ' 当Update,Delete,Add方法操作失败返回 False 时,记录出错的信息 Public Shared ModifyErrorString As String Private Shared Keys As New Hashtable ' 数据库连接字

轻松搞定数据访问层

访问|数据 下面实现的方法,可以把你从SQL的Add,Delete,Update,Select的重复劳动解脱出来 1.实体类2.访问类 现在以下表为例tblPerson(perID,perName,perGender,perOld,perNation) 实体类Person---------IDNameGenderOldNation 访问基类DataOper------------Shared DeleteShared AddShared UpdateShared Select 访问类Person

json字符串转换为hashtable

问题描述 请问有什么类库可以将json字符串转换为hashtable吗?例如:publicclasstest{publicstringname{get;set;}publicstringid{get;set;}publicAa{get;set;}}publicclassA{publicstringname{get;set;}publicstringid{get;set;}}testtest=newtest(){id="1",name="hu"};test.a=new

Rolling Hash(Rabin-Karp 算法)匹配字符串与anagram串

该算法常用的场景 字符串中查找子串,字符串中查找anagram形式的子串问题. 关于字符串查找与匹配 字符串可以理解为字符数组.而字符可以被转换为整数,他们具体的值依赖于他们的编码方式(ASCII/Unicode).这意味着我们可以把字符串当成一个整形数组.找到一种方式将一组整形数字转化为一个数字,就能够使得我们借助一个预期的输入值来Hash字符串. 既然字符串被看成是数组而不是单个元素,比较两个字符串是否想到就没有比较两个数值来得简单直接.去检查A和B是否相等,我们不得不通过枚举所有的A和B的

PHP哈希表碰撞攻击原理

最近哈希表碰撞攻击(Hashtable collisions as DOS attack)的话题不断被提起,各种语言纷纷中招.本文结合PHP内核源码,聊一聊这种攻击的原理及实现. 哈希表碰撞攻击的基本原理 哈希表是一种查找效率极高的数据结构,很多语言都在内部实现了哈希表.PHP中的哈希表是一种极为重要的数据结构,不但用于表示Array数据类型,还在Zend虚拟机内部用于存储上下文环境信息(执行上下文的变量及函数均使用哈希表结构存储). 理想情况下哈希表插入和查找操作的时间复杂度均为O(1),任何

PHP内核探索:哈希表碰撞攻击原理_php实例

下面通过图文并茂的方式给大家展示PHP内核探索:哈希表碰撞攻击原理. 最近哈希表碰撞攻击(Hashtable collisions as DOS attack)的话题不断被提起,各种语言纷纷中招.本文结合PHP内核源码,聊一聊这种攻击的原理及实现.  哈希表碰撞攻击的基本原理 哈希表是一种查找效率极高的数据结构,很多语言都在内部实现了哈希表.PHP中的哈希表是一种极为重要的数据结构,不但用于表示Array数据类型,还在Zend虚拟机内部用于存储上下文环境信息(执行上下文的变量及函数均使用哈希表结

字符串笔试题

1.字符串移位包含问题 //普通解法 bool contain_check() { char s[6] = "AABCD"; char d[5] = "CDAA"; int len = strlen(s); for(int i=0; i<len; ++i) { char temp = s[0]; for(int j=0; j<len-1; ++j) s[j] = s[j+1]; s[len-1] = temp; if(strstr(s,d) != 0)

PHP内核探索之变量- 不平凡的字符串

切,一个字符串有什么好研究的.   别这么说,看过<平凡的世界>么,平凡的字符串也可以有不平凡的故事.试看:   (1)       在C语言中,strlen计算字符串的时间复杂度是?PHP中呢?   (2)       在PHP中,怎样处理多字节字符串?PHP对unicode的支持如何?   同样是字符串,为什么c语言与C++/PHP/Java的均不相同?   数据结构决定算法,这句话一点不假.   那么我们今天就来掰一掰,PHP中的字符串结构,以及相关字符串函数的实现.   一.  字符串

浅谈Hashtable与Dictionary的异同

以前对于这两个集合类的认识只是停留在是否支持泛型上,这几天趁着看算法导论的机会,把两个类的内部的实现机制好好的了解了一下. Hashtable和Dictionary从数据结构上来说都属于Hashtable,都是对关键字(键值)进行散列操作,将关键字散列到Hashtable的某一个槽位中去,不同的是处理碰撞的方法.散列函数有可能将不同的关键字散列到Hashtable中的同一个槽中去,这个时候我们称发生了碰撞,为了将数据插入进去,我们需要另外的方法来解决这个问题. 链接法(chaining) 在链接