map常用的两个实现类,map的几种实现
是一个map键值对的集合接口,其实现类主要有:HashMap、TreeMap、Hashtable、LinkedHashMap等。这四者之间的区别如下(简要介绍):
如何解决写爬虫IP受阻的问题?立即使用。
HashMap:我们最常用的Map,HashMap,没有值的顺序。它是根据key的HashCode实现的,即根据key的HashCode值存储数据,根据key可以直接得到它的值。同时具有较快的访问速度。HashMap最多只允许一条记录的键值为Null(多条记录会被覆盖);多条记录的值允许为空。异步。
TreeMap: 可以按key对其保存的记录进行排序。默认情况下,记录按升序排序。您也可以指定排序的比较器。当迭代器用于遍历TreeMap时,获得的记录是排序的。TreeMap不允许key的值为null。异步。
Hashtable: 类似于HashMap,只是key和value的值不允许为null它支持线程的同步,即任何时候只有一个线程可以写hashtable,这也导致了Hashtable写的很慢。只有Hashtable继承自Dictionary抽象类,hashMap和treeMap都继承自AbstractMap抽象类,LinkedhashMap继承自hashMap。
LinkedHashMap: 保存记录的插入顺序。当迭代器用于遍历LinkedHashMap时,必须首先插入第一条记录。遍历的时候会比HashMap慢。和keyvalue允许为空且不同步。
常识:
CollectionMap集合是从Object继承的吗?
不,两者都是接口,Object是类。它如何从Object继承?详见java.util下的具体接口。
第二,地图排序
树形图
默认情况下,TreeMap按升序排列。如果我们需要改变排序模式,我们需要使用Comparator: comparator。
Comparator是一个比较器接口,可以对集合对象或数组进行排序。这个接口的public compare(T o1,To2)方法可以实现排序。该方法主要根据第一个参数o1返回负整数、0或正整数,分别小于、等于或大于o2。如下所示:
公共类TreeMapTest {
公共静态void main(String[] args) {
MapString,String map=new TreeMapString,String(
新比较字符串(){
public int compare(String obj1,String obj2) {
//按降序排序
返回obj 2 . compare to(obj 1);
}
});
map.put(c , ccccc );
map.put(a , aaaaa );
map.put(b , bbbbb );
map.put(d , ddddd );
SetString keySet=map . keySet();
iterator string ITER=keyset . iterator();
while (iter.hasNext()) {
string key=ITER . next();
system . out . println(key): map . get(key));
}
}
}上面的例子是按照TreeMap的键值排序,但是有时候我们需要按照TreeMap的值排序。要对值进行排序,我们需要使用sort(ListT list,Comparator?Super c)方法,该方法根据指定比较器生成的顺序对指定列表进行排序。但是有一个前提条件,即所有元素必须能够根据所提供的比较器进行比较。如下所示:
公共类TreeMapTest {
公共静态void main(String[] args) {
MapString,String map=new TreeMapString,String();
map.put(d , ddddd );
map.put(b , bbbbb );
map.put(a , aaaaa );
map.put(c , ccccc );
//在这里,map.entrySet()被转换成一个列表
列表地图。EntryString,String list=new ArrayListMap。EntryString,String(map . entry set());
//然后按比较器排序。
Collections.sort(list,new ComparatorMap。EntryString,String() {
//按升序排序
public int compare(EntryString,String o1,
EntryString,String o2) {
返回o1.getValue()。compare to(O2 . getvalue());
}
});
对于(图。EntryString,字符串映射:list){
系统。出去。println(映射。getkey():映射。getvalue());
}
}
}我们都是模拟的值是没有顺序的,他是按照键的散列码来实现的。对于这个无序的模拟我们要怎么来实现排序呢?参照树形图的价值排序,我们一样的也可以实现模拟的排序。
公共类HashMapTest {
公共静态void main(String[] args) {
MapString,String map=new HashMapString,String();
map.put(c , ccccc );
map.put(a , aaaaa );
map.put(b , bbbbb );
map.put(d , ddddd );
列表地图EntryString,String list=new ArrayListMap .EntryString,String(map。entry set());
Collections.sort(list,new ComparatorMap .EntryString,String() {
//升序排序
public int compare(EntryString,String o1,
EntryString,String o2) {
返回o1.getValue().与O2相比。getvalue());
}
});
对于(图EntryString,字符串映射:列表){
系统。出去。println(映射。getkey():映射。getvalue());
}
}
}以上就是四个主要的地图实现类的详细内容,更多请关注我们其它相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。