㈠ List、Map、Set按存儲方式說說都是怎麼存儲的
1.collection:集合層次中的根介面,jdk沒有提供這個介面直接實現的類。
2.set是一個無序的集合,不能包含重復的元素。
3.list:是一個有序的集合可以包含重復的元素,提供了按索引訪問的方式。
4.map:包含了key-value對,map中key必須唯一,value可以重復。
二、針對每一種集合進行進一步的介紹
List介面對Collection進行了簡單的擴充,它的具體實現類常用的有ArrayList和LinkedList。你可以將任何東西放到一個List容器中,並在需要時從中取出。ArrayList從其命名中可以看出它是一種類似數組的形式進行存儲,因此它的隨機訪問速度極快,而LinkedList的內部實現是鏈表,它適合於在鏈表中間需要頻繁進行插入和刪除操作。在具體應用時可以根據需要自由選擇。前面說的Iterator只能對容器進行向前遍歷,而ListIterator則繼承了Iterator的思想,並提供了對List進行雙向遍歷的方法。
Set介面也是Collection的一種擴展,而與List不同的時,在Set中的對象元素不能重復,也就是說你不能把同樣的東西兩次放入同一個Set容器中。它的常用具體實現有HashSet和TreeSet類。HashSet能快速定位一個元素,但是你放到HashSet中的對象需要實現hashCode()方法,它使用了前面說過的哈希碼的演算法。而TreeSet則將放入其中的元素按序存放,這就要求你放入其中的對象是可排序的,這就用到了集合框架提供的另外兩個實用類Comparable和Comparator。一個類是可排序的,它就應該實現Comparable介面。有時多個類具有相同的排序演算法,那就不需要在每分別重復定義相同的排序演算法,只要實現Comparator介面即可。集合框架中還有兩個很實用的公用類:Collections和Arrays。Collections提供了對一個Collection容器進行諸如排序、復制、查找和填充等一些非常有用的方法,Arrays則是對一個數組進行類似的操作。
Map是一種把鍵對象和值對象進行關聯的容器,而一個值對象又可以是一個Map,依次類推,這樣就可形成一個多級映射。對於鍵對象來說,像Set一樣,一個Map容器中的鍵對象不允許重復,這是為了保持查找結果的一致性;如果有兩個鍵對象一樣,那你想得到那個鍵對象所對應的值對象時就有問題了,可能你得到的並不是你想的那個值對象,結果會造成混亂,所以鍵的唯一性很重要,也是符合集合的性質的。當然在使用過程中,某個鍵所對應的值對象可能會發生變化,這時會按照最後一次修改的值對象與鍵對應。對於值對象則沒有唯一性的要求。你可以將任意多個鍵都映射到一個值對象上,這不會發生任何問題(不過對你的使用卻可能會造成不便,你不知道你得到的到底是那一個鍵所對應的值對象)。Map有兩種比較常用的實現:HashMap和TreeMap。HashMap也用到了哈希碼的演算法,以便快速查找一個鍵,TreeMap則是對鍵按序存放,因此它便有一些擴展的方法,比如firstKey(),lastKey()等,你還可以從TreeMap中指定一個范圍以取得其子Map。鍵和值的關聯很簡單,用pub(Object key,Object value)方法即可將一個鍵與一個值對象相關聯。
㈡ C++ Map中的數據存儲方式是什麼Map和HashMap有什麼區別
你要先去了解一下HASH演算法
相對MAP來說,HASHMAP具有更高的查詢速度。
舉個簡單的例子來說
MAP中儲存為順序儲存,也就是一個接著一個的儲存
如一個MAP中存儲
1
3
4
三個元素
則,MAP中第一個元素為1,第二個為3,第三個為4
如果想從MAP中查找元素4,則必須從開始進行便利,則必須比較三次。
而HASHMAP中,開始儲存的時候,就將即將儲存的元素用一個自定義函數將他轉變後,存到相應位置
㈢ map的存儲小技巧
Map中是可以直接存放map的,只需要把想要存放的map放到對應map的value中即可,舉個栗子:
這樣的到的數據就是一個有著層級關系的map
取數據的時候可以直接根據key來取值: map.get("sort.a");
㈣ Java Map有沒有按存儲順序存儲的子類
不知道樓主指的順序是什麼。使用Map的,向來只關心鍵值,只要有key,就能取出value;如果沒有key,也無法取出value,從來不會關心順序問題,也根本沒有意義。
如果樓主想通過循環取值,建議不要用map了,這和map的初衷不符。樓主可以用List來實現。
㈤ java map,怎麼保證順序
java map 是一個介面,其有個子介面是SortedMap,進一步提供關於鍵的總體排序 的 Map。該映射是根據其鍵的自然順序進行排序的,或者根據通常在創建有序映射時提供的 Comparator 進行排序。對有序映射的 collection 視圖(由 entrySet、keySet 和 values 方法返回)進行迭代時,此順序就會反映出來。要採用此排序方式,還需要提供一些其他操作(此介面是 SortedSet 的對應映射)。
LinkedHashMap 維護著一個運行於所有條目的雙重鏈接列表。此鏈接列表定義了迭代順序,該迭代順序通常就是將鍵插入到映射中的順序(插入順序)。
㈥ List中存放了多個Map,想將List中的Map存放順序重新排序
package com.compare.test;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Main {
public static void main(String[] args) {
Main mainTest=new Main();
mainTest.sortMap();
}
public void sortMap(){
List<Map<Integer, Double>> maps=new ArrayList<Map<Integer, Double>>();
for(int i=0;i<10;i++){
HashMap<Integer, Double> map=new HashMap<Integer, Double>();
for(int j=0;j<2;j++){
map.put(j, Math.random());
}
maps.add(map);
}
for(Map<Integer, Double> map:maps){
System.out.println(getValue(map));
}
System.out.println("************************");
Map<Integer, Double> currentMap;
for(int i=0;i<maps.size()-1;i++){
for(int j=0;j<maps.size()-i-1;j++){
if(getValue(maps.get(j))>getValue(maps.get(j+1))){
currentMap=maps.get(j+1);
maps.set(j+1, maps.get(j));
maps.set(j,currentMap);
}
}
}
for(Map<Integer, Double> map:maps){
System.out.println(getValue(map));
}
}
public Double getValue(Map<Integer, Double> currentMap){
return currentMap.get(0)+currentMap.get(1);
}
}
㈦ 不藉助別的數據結構怎麼讓hashmap的value有序
一種是不對要排序對象類做任何改動,創建Comparator介面的實現類C;然後 把對象放入list;然後調用Collections.sort(list, C);
例如:------------------------------
import java.util.Comparator;
public class ComparatorImpl implements Comparator<User>{
@Override
public int compare(User o1, User o2) { if(null!=o1 && null!=o2){
if(o1.getAge() >o2.getAge()){
return 1;
}else if(o1.getAge() ==o2.getAge()){ return 0;
}
}
return -1;
}
}
-----------------------------------main
List<User> ulist = new ArrayList<User>();
ulist.add(new User("wangbo",29,1,"長沙"));
ulist.add(new User("wumei",44,1,"株洲"));
ulist.add(new User("zhangjie",19,1,"岳陽"));
ulist.add(new User("lihua",36,1,"長沙"));
ulist.add(new User("zhangchangzhe",19,1,"衡陽"));
Collections.sort(ulist, new ComparatorImpl());
for(User u:ulist){
System.out.println(u.getName()+"\t"+u.getAge()+"\t"+u.getAddress()); }
㈧ map存數據是無序的,怎麼有序輸出
Map本身是無序的,如果你非想要按順序輸出,你只能在放入的時候把key做成一定有規律的,到時候取的時候按這個來取