㈠ 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做成一定有规律的,到时候取的时候按这个来取