㈠ 為什麼 java 中的 string 是不可變的
個人理解:因為string在java的編程當中比較普遍,以下的回答比較全面一些:
Java中String為什麼是不可變的
1、在Java中,String類是不可變類,一個不可變類是一個簡單的類,並且這個的實例也不能被修改,
這個類的實例創建的時候初始化所有的信息,並且這些信息不能夠被修改
2、字元串常量池
字元串常量池是方法區中一塊特殊的存儲區域,當創建一個字元串常量的時候,判斷該字元串字在符串字元串常量池中是否已經存在
如果存在,返回已經存在的字元串的引用;如果不存在,則創建一個新的字元串常量,並返回其引用
String string1 = "abcd";
String string2 = "abcd";
變數string1,string2指向常量池中的同一個字元串常量對象;如果String是可變的,給一個變數重新賦值一個引用,將會指向錯誤的值
3、緩存哈希值
在Java中字元串的哈希值會經常被使用到。例如在HashMap中,String的不可變總能保證哈希值總是相等的,並且緩存起來,不用擔心會改變,
那意味著不需要每次都計算哈希值,這樣會提高效率。在String類中有以下的代碼:
private int hash; //用來緩存哈希值
3、促進其他對象的使用
HahSet<String> set = new HashSet<String>();
set.add(new String("a"));
set.add(new String("b"));
set.add(new String("c"));
㈡ Java中比較字元串的內容是否相等內部是如何比較的還有比較字元串與比較它的哈希值哪個快
java中判斷字元串是否相等有兩種方法:1、用「==」運算符,該運算符表示指向字元串的引用是否相同,比如: String a="abc";String b="abc",那麼a==b將返回true。這是因為在java中字元串的值是不可改變的,相同的字元串在內存中只會存一份,所以a和b指向的是同一個對象;再比如:String a=new String("abc"); String b=new String("abc");那麼a==b將返回false,因為a和b指向不同的對象。2、用equals方法,該方法比較的是字元串的內容是否相同,比如:String a=new String("abc"); String b=new String("abc"); a.equals(b);將返回true。所以通常情況下,為了避免出現上述問題,判斷字元串是否相等使用equals方法。
㈢ java中字元串可以用s[i]
可以。s[i]是字元串的第i個字元,n是字元串的長度,^表示求冪。空字元串的哈希值為0。變數i用來存放字元串數組下標,則應填入s[i]
㈣ java中將字元串傳入到HashMap中
packagetest;
importjava.util.HashMap;
importjava.util.Map;
publicclasstest{
publicstaticvoidmain(String[]args){
Stringa[]=newString[]{"1001_張三","1002_李四","1003_王五","1004_趙六"};
Map<String,String>map=newHashMap<>();
for(inti=0;i<4;i++){
Stringnum=a[i].substring(0,a[i].indexOf("_"));
Stringname=a[i].substring(a[i].indexOf("_"+1));
map.put(num,name);
}
}
}
㈤ JAVA中,String類中的hashCode()方法有什麼作用呢
hash從意義上來說應該是實現值的比較。
hashCode值與
對象引用
沒有必然聯系。在java中,值相同的兩個字元串不一定是同個對象。比如你上面的a和b就是兩個不同的對象。
字元串的hash值是根據字元串的值計算的,相同值的字元串對象hash值一定相同,具體的計算方法在jdk的文檔中有描述.
每個java對象都有一個唯一的標識,object類中的hash方法就是直接返回對象的這個內部id號,與string的hash方法是不同的,object的hash方法能夠用來區分不同的對象.因為原始的object對象沒有任何有意義的值可用來計算哈希
㈥ java怎麼通過hash演算法比對對象是否修改
java使用哈希值判斷通過hash演算法比對對象是否修改。根據查詢相關公開信息顯示,使用string.GetHashCode()方法,將用戶對象序列化成字元串,用string.GetHashCode()方法,獲取字元串的哈希值,當用戶點擊保存按鈕保存數據時即可判斷對象是否修改。
㈦ java中什麼是哈希碼值
哈希碼是一種數據結構的演算法。常見的哈希碼的演算法有:
1:Object類的hashCode.返回對象的內存地址經過處理後的結構,由於每個對象的內存地址都不一樣,所以哈希碼也不一樣。
2:String類的hashCode.根據String類包含的字元串的內容,根據一種特殊演算法返回哈希碼,只要字元串內容相同,返回的哈希碼也相同。
3:Integer類,返回的哈希碼就是Integer對象里所包含的那個整數的數值,例如Integer i1=new
Integer(100),i1.hashCode的值就是100 。由此可見,2個一樣大小的Integer對象,返回的哈希碼也一樣。
㈧ JAVA中哈希碼具體是什麼
哈希其實只是一個概念,沒有什麼真實的指向。它的目的是保證數據均勻的分布到一定的范圍內。所以不同數據產生相同的哈希碼是完全可以的。
java中哈希一般是希望自己寫演算法的。隨便返回什麼都可以。如果什麼也不寫的話就會返回地址。如果自己寫,最簡單的做法是把所有欄位拼起一個長串做個hash值。
㈨ java哈希值
兩個內容相同的對象具有相同的hashcode;反之不成立。
HashMap對象是根據其Key的hashCode來獲取對應的Value。
map的實現是數組結合鏈表。hashcode決定存放位置,兩個對象位置一樣時比較equals方法。true的話覆蓋(同一個對象),false的添加(不是同一個對象)。
㈩ java使用HashMap實現,鍵保存字元串,值保存保存出現的次數
恩,給你實現,代碼說話,直接粘貼在ide中就可以運行:
importjava.util.HashMap;
publicclassSaveDatas{
publicstaticvoidmain(String[]args){
String[]names={"chenchao","zhangsan","zhangsan","chenhao","lisi","wangwu","zhaoliu","xiaopqiang","haha","chenchao"};
saveinHashMap(names);
}
publicstaticvoidsaveinHashMap(String[]strs){
HashMap<String,Integer>datas=newHashMap<String,Integer>();
for(inti=0;i<strs.length;i++){
Stringkey=strs[i];
Integervalue=datas.get(key);
if(value==null){
datas.put(key,1);
}else{
datas.put(key,value+1);
}
}
printHashMap(datas);
}
publicstaticvoidprintHashMap(HashMap<String,Integer>hashMap){
for(Stringkey:hashMap.keySet()){
System.out.println("字元串:"+key+"出現的字數為:"+hashMap.get(key));
}
}
}
//運行結果:
字元串:zhaoliu出現的字數為:1
字元串:wangwu出現的字數為:1
字元串:xiaopqiang出現的字數為:1
字元串:lisi出現的字數為:1
字元串:haha出現的字數為:1
字元串:zhangsan出現的字數為:2
字元串:chenhao出現的字數為:1
字元串:chenchao出現的字數為:2