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)