HashTable与Hashmap的区别:
1、hashtable因为是同步,所以是线程安全的;hashmap因为是异步的,所以并不是线程安全的。
2、hashmap由于是异步的,所以操作起来比hashtable更快
3、hashmap与hashtable中的关键字并不是按常规的比较进行排序的,具体的排序规则未知;
HashTable
public class test_length {
public static void main(String[] args) {
Hashtable<Integer,Integer> a=new Hashtable<>();
a.put(7,0);
a.put(2,3);
a.put(5,1);
for(int key:a.keySet())
System.out.println(key+" "+a.get(key));
//map中entry的用法
Set set=a.entrySet();
Iterator i=set.iterator();
while(i.hasNext()){
Map.Entry c=(Map.Entry)i.next();
System.out.println(c.getKey()+" "+c.getValue());
}
}
}
如下图所示,haspmap中查找是否含有key用的是containsKey
a.remove(key),根据关键字进行删除。
public int lengthOfLongestSubstring(String s) {
HashMap<String, Integer>a=new HashMap<>();
int max=0,count=0,lo=0;
for(int i=0;i<s.length();i++){
String cur=String.valueOf(s.charAt(i));
if(a.containsKey(cur)){
// while(a.get(cur)!=null)
for(;lo<a.get(cur);lo++){
a.remove(String.valueOf(s.charAt(lo)));
// System.out.println(" "+a.size());
}
lo++;
}
a.put(cur,i);
// System.out.println(a.size());
if(max<a.size())max=a.size();
}
return max;
}
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
优雅的将坐标值(x,y)放入hashmap
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
由于hashmap的key不能是int[],因此我们无法使用hashmap.put(int [],1)这样来保证key在hashmap中
因此得尝试另一种思路,使用hashset!!!
hashset a=hashmap.getordefault(int[0],new hashset<>());
a.add(int [1]);
hashmap.put(int [0],a);
这样就将坐标放入hashmap中了
如果要查询(x,y)是否存在
hashmap.get(x).contains(y)