Ⅰ 問個初級問題。。。- -!
不一樣的,Set 和HashSet 是有區別的,區別如下:
1、set中的數據是自動排好序的,不允許放入null值;而中的數據是無序的,可以放入null,但只能放入一個null,兩者中的值都不能重復。
2、HashSet要求放入的對象必須實現HashCode()方法,放入的對象,是以hashcode碼作為標識的,而
3、Set介面
Set不允許包含相同的元素,如果試圖把兩個相同元素加入同一個集合中,add方法返回false。
Set判斷兩個對象相同不是使用==運算符,而是根據equals方法。也就是說,只要兩個對象用equals方法比較返回true,Set就不會接受這兩個對象。
HashSet
HashSet有以下特點
不能保證元素的排列順序,順序有可能發生變化
不是同步的
集合元素可以是null,但只能放入一個null
當向HashSet結合中存入一個元素時,HashSet會調用該對象的hashCode()方法來得到該對象的hashCode值,然後根據hashCode值來決定該對象在HashSet中存儲位置。
簡單的說,HashSet集合判斷兩個元素相等的標準是兩個對象通過equals方法比較相等,並且兩個對象的hashCode()方法返回值相等
注意,如果要把一個對象放入HashSet中,重寫該對象對應類的equals方法,也應該重寫其hashCode()方法。其規則是如果兩個對象通過equals方法比較返回true時,其hashCode也應該相同。另外,對象中用作equals比較標準的屬性,都應該用來計算hashCode的值。
不知道你滿不滿意,我QQ:347948138
Ⅱ c#怎麼改變list集合里數據的類型
改變不了,只能改變集合里的數量。
要改變數據類型只能重新定義一個想要的數據類型的List數組
Ⅲ 在java的Map集合中,怎樣更改value的值
map集合沒有專門更改value的方法,更改value的方法就是map.put(key,value),更改就是直接替換,比如想改變key是"1",value是"一"的組合,就是map.put("1","壹"),直接替換就行。
import java.util.HashMap;
import java.util.Map;
public class Demo {
public static void main(String[] args) {
Map<Integer,Integer> m = new HashMap<Integer,Integer>();
m.put(1, 1);
print(m);
m.put(1, 2);
print(m);
}
private static void print(Map<Integer, Integer> m) {
for(Map.Entry<Integer, Integer> mm : m.entrySet())
System.out.println("K: "+mm.getKey()+",V: "+mm.getValue());
}
}
(3)如何改變hashset中的數據擴展閱讀
集合類有一個共同特點,就是它們只容納對象(實際上是對象名,即指向地址的指針)。這一點和數組不同,數組可以容納對象和簡單數據。如果在集合類中既想使用簡單數據類型,又想利用集合類的靈活性,就可以把簡單數據類型數據變成該數據類型類的對象,然後放入集合中處理,但這樣執行效率會降低。
集合類容納的對象都是Object類的實例,一旦把一個對象置入集合類中,它的類信息將丟失,也就是說,集合類中容納的都是指向Object類對象的指針。
這樣的設計是為了使集合類具有通用性,因為Object類是所有類的祖先,所以可以在這些集合中存放任何類而不受限制。當然這也帶來了不便,這令使用集合成員之前必須對它重新造型。
集合類是Java數據結構的實現。在編寫程序時,經常需要和各種數據打交道,為了處理這些數據而選用數據結構對於程序的運行效率是非常重要的。
Ⅳ 在java的Map集合中,怎樣更改value的值
使用put(key,value) 就可以更改value的值.
如果key是不存在的, 那麼put(key,value) 就會添加一條數據.
參考代碼
importjava.util.HashMap;
publicclassDemo{
publicstaticvoidmain(String[]args){
HashMap<String,Integer>map=newHashMap<String,Integer>();
map.put("張三",89);
map.put("趙四",100);
System.out.println(map);
if(map.containsKey("張三")){//判斷如果存在key,就修改value
map.put("張三",98);//修改
}
System.out.println("------分割線------");
System.out.println(map);
}
}
運行結果
{張三=89,趙四=100}
------分割線------
{張三=98,趙四=100}
Ⅳ java怎麼修改Set里的值
通過remove和add方法,set集合中的對象屬性為private final
Set介面
集合里的多個對象沒有明顯順序。Set集合和Collection基本一樣,沒有
提供額外方法,只是和Collection行為不同
Set集合不允許包含相同的元素,如果add的是兩個相同元素會返回false
Set不實用==運算符,根據equals方法
HashSet類
HashSet類是Set介面的典型實現,大多數時候使用Set集合都是用這個類實現
HashSet按Hash演算法來存儲集合中的元素
HashSet特點:
1.不能保證元素的排列順序,順序可能變化
2.HashSet不是同步的,多個線程同時訪問一個Set集合,必須用代碼
保證同步
3.集合元素值可以是null
當向HashSet集合中存入一個元素,HashSet會調用該對象的HashCode()
得到對象的hashCode,根據HashCode來決定對象在HashSet中的位置
如果兩個元素equal方法比較返回true但是hashCode()方法返回值不同,
HashSet會把兩個元素存儲在不同位置
HashSet判斷兩個元素相同需要equal和hashCode都相同
因此重寫類的equals方法和hashCode()方法要保證兩個對象通過equals
返回true時hashCode也相等
Hash演算法保證通過一個對象快速找到另一個對象。可以很快的執行,當需要
查找集合中的某個元素時,hash演算法可以直接根據該元素的值找到該元素
從而讓程序快速找到元素。
在數組中通過數組元素索引尋找元素,HashSet通過hashcode索引
重寫hashCode()方法的基本步驟
當兩個對象通過equals方法返回true時,兩個對象的hashCode相等
對象中用作equals比較標準的屬性,應該用來計算hashCode
向HashSet中添加可變對象時,如果修改HashSet集合中對象,有可能導致
該對象與集合中其他對象相等,從而導致HashSet無法正確訪問對象
HashSet有一個子類 LinkedHashSet,LinkedHashSet集合也是根據HashCode來決定
元素的存儲位置,同時使用鏈表維護元素次序,這樣是的元素看起來是以
插入順序保存,便利集合時會按插入順序來訪問。
Linked需要維護元素的插入順序,性能略低於HashSet,但在迭代時性能更好
TreeSet是SortedSet介面的唯一實現
TreeSet可以確保元素處於排序狀態。提供了幾個額外方法:
1.Comparator
comparator():返回當前Set使用的Comparator,或者null,表示
自然的方式排序
2.Object first():返回集合中的第一個元素
3.Object last():返回集合中最後一個元素
4.Object lower(Object
e):返回集合中位於指定元素之前的元素
5.Object higher(Object
e):返回集合中位於制定元素之後的元素
6.SortedSet
subSet(fromElement,toElement):返回set的子集,范圍從from到to
7.SortedSet headSet(toElement)返回set子集,小於toElement
8.SortedSet
tailSet(fromElement)返回set子集,由大於等於fromElement元素組成
TreeSet是根據元素值來進行排序而不是根據插入順序
TreeSet採用紅黑樹的數據結構對元素排序 :支持自然排序(默認)和定製排序
自然排序:
TreeSet會調用集合元素的compareTo方法來比較元素之間的大小關系,
然後將集合元素按升序排列。
Java提供了一個Comparable介面,該介面定義了一個compareTo(Object obj)方法
該方法返回一個整數值,實現該介面的類必須實現該方法,實現了該介面的類的對象
可以比較大小。obj1.compareTo(obj2),如果方法返回0,表明兩個對象相等。如果
返回正整數,表明obj1大於obj2;如果返回負整數,表明obj1小於obj2
如果要將對象添加如TreeSet該對象必須實現Comparable介面
當想TreeSet中添加對象時,會先將要添加的對象與TreeSet中的對象用compareTo比較
如果找不到compareTo則引發ClassCastException異常
因為只有同一個類型才能比較大小 所以TreeSet中添加的應該是同一個類型的對象
TreeSet和HashSet集合中的對象如果是可變對象,對象屬性改變時,會導致集合處理
對象復雜化,易出錯。所以應該盡量在集合中添加不可變對象
不可變對象是
1.屬性為private final
2.含有帶參數構造器,為對象初始化
3.屬性有get方法沒有set方法
定製排序:
TreeSet的自然排序是根據集合元素大小,TreeSet將它們以升序排列。使用定製
排序,如降序,使用Comparator介面的幫助。介面中包含一個int compare(T o1,T o2)
用於比較o1和o2的大小:重寫該方法可以改變排序規則
Ⅵ java中使用ArrayList如何修改裡面的內容.
java里增強for循環【for(String a: arrayList)】裡面可以修改數據,但是不能刪除數據,如下例子:
<pre t="code" l="java">修改集合:
import java.util.ArrayList;
import java.util.List;
public class TestA {
public static void main(String[] args){
//集合
List<String> arrayList=new ArrayList<String>();
//存放元素
arrayList.add("hello");
arrayList.add("ninghao");
arrayList.add("bye");
//集合標量
int index=0;
//遍歷集合
for(String a:arrayList){
//輸出集合對象
System.out.println(a);
//修改集合對象
arrayList.set(index, "hi");
//標量加一
index++;
}
//輸出集合
System.out.println(arrayList);
}
}
結果:
hello
ninghao
bye
[hi, hi, hi]
刪除集合元素:
import java.util.ArrayList;
import java.util.List;
public class TestA {
public static void main(String[] args){
//集合
List<String> arrayList=new ArrayList<String>();
//存放元素
arrayList.add("hello");
arrayList.add("ninghao");
arrayList.add("bye");
//集合標量
int index=0;
//遍歷集合
for(String a:arrayList){
//輸出集合對象
System.out.println(a);
//刪除元素
arrayList.remove(index);
//標量加一
index++;
}
//輸出集合
System.out.println(arrayList);
}
}
結果:
hello
Exception in thread "main" java.util.
at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
at java.util.AbstractList$Itr.next(AbstractList.java:343)
at app.TestA.main(TestA.java:19)由以上例子可以看出,增強for循環,在循環里可以修改集合元素,但是不能刪除集合元素。
Ⅶ 在java的Map集合中,怎樣更改value的值
map集合沒有專門更改value的方法,更改value的方法就是map.put(key,value),更改就是直接替換,比如想改變key是"1",value是"一"的組合,就是map.put("1","壹"),直接替換就行。
import java.util.HashMap;
public class Demo {
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("張三", 89);
map.put("趙四", 100);
System.out.println(map);
if (map.containsKey("張三")) {//判斷如果存在 key ,就修改value
map.put("張三", 98);//修改
}
System.out.println("------分割線------");
System.out.println(map);
}
avaMap集合
Map集合沒有繼承Collection介面,,Map中不能包含相同的key值,每個key只能影射一個相同的value。key值還決定了存儲對象在映射中的存儲位置。
但不是key對象本身決定的,而是通過散列技術進行處理,可產生一個散列碼的整數值,散列碼通常用作一個偏移量,該偏移量對應分配給映射的內存區域的起始位置,從而確定存儲對象在映射中的存儲位置。Map集合包括Map介面以及Map介面所實現的類。
以上內容參考:網路-JavaMap集合
Ⅷ java中的set集合,有直接修改其中的數據的方法嗎
編寫一個工具方法吧,Object 修改為你Set中真正存儲對象的類型就可以了.
public Set<Object> updateSetValue(Set<Object> oldSet) {
Set<Object> newSet = new HashSet<Object>();
for (Object s : oldSet) {
if (s != "你要修改前的值") {
newSet.add(s);
} else {
newSet.add("你要修改後的值");
}
}
return newSet;
}
Ⅸ 5.redis集合的創建和修改
集合的數據是唯一的,插入之後再次插入時不會執行
(1)查詢集合裡面元素的數量
(2)從集合中獲取數據
--如果count省略則隨機獲取一條數據
--如果count為其他大於1的整數,則獲取對應條數據
--如果count對應的證書大於集合總數據的條數,則獲取集合所有數據
(3)獲取集合中的所有數據
(4)判斷集合中是否存在某個元素
--如果數據存在,則返回1,如果數據不存在,則返回0
既屬於A集合又屬於B/其他集合,集合數量可以是多個,多個代表對應所有集合的交集
A集合與B/其他集合所包含的所有數據,如果數據一樣則去重,集合數量可以是多個,多個代表對應所有集合的並集
只屬於A(key1)集合,不屬於其他集合的數據
Ⅹ 如何將多組數據存放到不同的hashset中,然後遍歷出這些hashset中的值
HashSet<String> set=new HashSet<String>();
set.add("1");
set.add("2");
set.add("3");
Iterator<String> iterator=set.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
控制台輸出:
3
2
1
對於集合這塊的類都可以這樣寫的,比如你把第一行換成:
ArrayList<String> set=new ArrayList<String>();
後面的程序不動,一樣可以遍歷輸出的。
不太懂的話可以網路Iterator的用法和原理