map map集合的实现类类有哪些

set,map,list之间有什么区别和共同点 -
- ITeye技术网站
博客分类:
--其中的值允许重复,因为其为有序的数据结构 ,允许空值
set --其中的值不允许重复,无序的数据结构
map--成对的数据结构,健值必须具有唯一性(键不能同,否则值替换)
HashSet集合(不允许重复元素,允许空值): 被比较的对象要重写hashCode()方法和重写equals()方法, 两个都要。
TreeSet集合.(不允许重复元素)
方法一:被比较的对象(如学生类)实现Comparable接口,重写CompareTo()方法.--(不允许空值)
方法二:TreeSet的构造方法,传入Comparator接口的实现类,他是重写了compare()方法.--(允许空值)
HashMap集合: 与HashSet情况一样.
TreeMap集合: 与TreeSet情况一样.
对List排序可用Collections类的sort()方法.要用到Comparable或Comparator接口.
===========================================================
list:arraylist,vector,linkedlist,其中vetctor线程同步,linkedlist插删
基本上list都是基于array的;里面的元素都可以重复;
set:hashset,treeset;set不能够重复,set是基于map的;treeset是排序的
list和set是继承collection接口的,map不是
map:hashtable,hashmap,treemap;hashtable是线程同步的,map的key不能够重复,value可以;treemap是排序的
List和Set都是接口。他们各自有自己的实现类,有无顺序的实现类,也有有顺序的实现类。
最大的不同就是List是可以重复的。而Set是不能重复的。
List适合经常追加数据,插入,删除数据。但随即取数效率比较低。
Set适合经常地随即储存,插入,删除。但是在遍历时效率比较低。
list,set,map都是可以使用collections.sort()排序的
talentluke
浏览: 292207 次
来自: 深圳
core Java中有一段:Vector类对自己的所有可修改方 ...
基本上明白了.但执行顺是否应该是/etc/profile -& ...
各自有各自的场景吧楼主不要太激进了
写的不错,赞一个
楼主善于思考这点是很不错的. 点赞.最近在面试的时候我遇到了让 ...Map接口及其实现类框架结构图 Map的存储形式是采用key-value的形式,key和value可以使任何引用类型的数据。Map的key不允许重复,即同一个Map对象的任何两个key通过equals方法比较总是返回false。Map允许value值的多个重复,如果存在重复的值,新的值会覆盖原来的值,而覆盖的方法会返回旧值。对于Map的key而言,相当于不能有元素重复的Set集合。对于Map的value而言,相当于可以有元素重复的List集合。而在Map的集合中的时候,key和value是一对一的单向关系。package com.collection.import java.util.HashMimport java.util.M/** * Created by Administrator on . */public class MapTest {
public static void main(String[] args) {
Map map = new HashMap();
map.put("疯狂Java讲义",109);
map.put("疯狂Swift讲义",10);
map.put("疯狂Ajax讲义",9);
map.put("疯狂IOS讲义",0);
map.put("疯狂Java EE讲义",100);
* 若放入重复的key时,新的value值会覆盖原来的value
* 如果新的value覆盖了旧的value,该方法返回被覆盖的value值
System.out.println(map.put("疯狂Java EE讲义",1));
System.out.println(map);
System.out.println("是否包含值为 疯狂IOS讲义 KEY"+map.containsKey("疯狂IOS讲义"));
System.out.println("是否包含值为 9 value"+map.containsValue(9));
for(Object key:map.keySet()){
System.out.println(key+"------&"+map.get(key));
map.remove("疯狂Ajax讲义");
System.out.println(map);
}}Java8中对Map的新增方法package com.collection.import java.util.HashMimport java.util.M/** * Created by Administrator on . */public class Map8Test {
public static void main(String[] args) {
Map map = new HashMap();
map.put("疯狂Java讲义",109);
map.put("疯狂Swift讲义",10);
map.put("疯狂Ajax讲义",9);
map.put("疯狂IOS讲义",0);
map.put("疯狂Java EE讲义",100);
* 尝试替换key为"疯狂XML讲义",如果没有,则不替换。
map.replace("疯狂XML讲义",66);
System.out.println(map);
//使用原来key的value值与传入的数值计算的结果覆盖原来的value值
map.merge("疯狂IOS讲义",10,(oldVal, param)-&(Integer)oldVal+(Integer)param);
System.out.println(map);
//当key为Java对应的value为null或不存在时,使用计算的结果作为新的value
puteIfAbsent("Java",(key)-&((String)key).length());
System.out.println(map);
//当key为"Java"对应的value存在时,使用计算的结果作为新的value
puteIfPresent("Java",(key,value)-&(Integer)value * (Integer)value);
System.out.println(map);
}}Map的实现类HashMap和HashtableHashMapHashMap允许使用null作为key和value值,但是不允许出现重复的key为null的情况,因为Map集合不允许出现key相同的情况,可以出现value为多个null的情况。但是HashMap是一个线程不安全的实现,所以在访问的时候HashMap的性能可能比Hashtable的性能好点。package com.collection.import java.util.HashM/** * Created by Administrator on . */public class NullInHashMap {
public static void main(String[] args) {
HashMap hashMap = new HashMap();
hashMap.put(null,null);
//由于key不能重复,所以该key值为null就放不进去
hashMap.put(null,null);
hashMap.put("a",null);
System.out.println(hashMap);
}}HashtableHashtable是一个线程安全的Map实现,同时也是不允许使用null作为key和value,如果试图把null值放入到Hashtable中,将会引发NullPointerException异常。为了成功地在HashMap,Hashtable中存储,获取对象,用作key的对象必须实现hashCode()方法和equals()方法。跟HashSet集合差不多,HashMap和Hashtable也不能保证其中key-value对的顺序,同时判断key相等的标准也是一样的:两个key通过equals方法比较返回true,两个key的hashCode值也相等。但是Map在判断两个value值相等的时候,只要两个对象通过equals()方法比较返回true即可。package com.collection.import java.util.H/** * Created by Administrator on . */class A {
public A(int count){
this.count =
public boolean equals(Object object){
if(object == this){
if(object !=null && object.getClass() == A.class){
return this.count == a.
public int hashCode(){
return this.
}}class B{
public boolean equals(Object object){
}}public class HashtableTest {
public static void main(String[] args) {
Hashtable hashtable = new Hashtable();
hashtable.put(new A(60000),"疯狂Java讲义");
hashtable.put(new A(87563),"疯狂Android讲义");
hashtable.put(new A(1232),new B());
System.out.println(hashtable);
System.out.println(hashtable.containsValue("随便什么字符"));
System.out.println(hashtable.containsKey(new A(87563)));
hashtable.remove(new A(1232));
System.out.println(hashtable);
}}注意:跟HashSet类似的是,如果使用可变对象作为HashMap,Hashtable的key,并且修改了作为key的可变对象,则也可能出现于HashSet类似的情形:程序再也无法准确访问到Map中修改过的key。package com.collection.import java.util.HashMimport java.util.I/** * Created by Administrator on . */public class HashMapErrorTest {
public static void main(String[] args) {
HashMap hashMap = new HashMap();
hashMap.put(new A(23183),"Java");
hashMap.put(new A(5000),"Java SE");
hashMap.put(new A(1654),"Java EE");
Iterator iterator = hashMap.keySet().iterator();
A first = (A)iterator.next();
first.count = 23;
System.out.println(hashMap);
hashMap.remove(new A(1654));
System.out.println(hashMap);
System.out.println(hashMap.get(new A(23183)));
System.out.println(hashMap.get(new A(5000)));
}}LinkedHashMap实现类LinkedHashMap使用双向链表来维护key-value对的次序,该链表负责维护Map的迭代顺序,迭代顺序与key-value对的插入顺序一致。package com.collection.import java.util.LinkedHashM/** * Created by Administrator on . */public class LinkedHashMapTest {
public static void main(String[] args) {
LinkedHashMap linkedHashMap = new LinkedHashMap();
linkedHashMap.put("语文",80);
linkedHashMap.put("数学",90);
linkedHashMap.put("英语",90);
linkedHashMap.forEach((key,value)-& System.out.println(key + "-----&"+value));
}}Properties实现类该类是Hashtable类的子类,这里的key和value都只能是String型的。package com.collection.import java.io.FileInputSimport java.io.FileOutputSimport java.util.P/** * Created by Administrator on . */public class PropertiesTest {
public static void main(String[] args) throws Exception {
Properties properties = new Properties();
properties.setProperty("username","conjane");
properties.setProperty("password","123456");
properties.store(new FileOutputStream("a.int"),"comment line");
Properties properties1 = new Properties();
properties1.setProperty("gender","male");
properties1.load(new FileInputStream("a.int"));
System.out.println(properties1);
}}TreeMap实现类类似于TreeSet,参考http://blog.csdn.net/u/article/details/package com.collection.import java.util.TreeM/** * Created by Administrator on . */class R implements Comparable{
public R(int count){
this.count =
public String toString() {
return "R{" +
"count=" + count +
public boolean equals(Object obj) {
if(this == obj){
if(obj != null && obj.getClass() == R.class){
return r.count == this.
public int compareTo(Object o) {
R r = (R)o;
return count & r.count?1:count WeakHashMap实现类package com.collection.import java.util.WeakHashM/** * Created by Administrator on . */public class WeakHashMapTest {
public static void main(String[] args) {
WeakHashMap weakHashMap = new WeakHashMap();
weakHashMap.put(new String("数学"),new Integer(90));
weakHashMap.put(new String("英语"),new Integer(80));
weakHashMap.put(new String("语文"),new Integer(70));
weakHashMap.put("java",new Integer(90));
System.out.println(weakHashMap);
System.gc();
System.runFinalization();
System.out.println(weakHashMap);
}}如果需要使用WeakHashMap的key来保留对象的弱引用,则不要让该key所引用的对象具有任何强引用,否则将失去使用WeakHashMap的意义。IdentityHashMap实现类该类在处理key相等时比较独特:两个key要完全相等,才算是相等即(key1==key2),而普通的只要equals方法返回true且他们的hashCode返回true就行。package com.collection.import java.util.IdentityHashM/** * Created by Administrator on . */public class IdentityHashMapTest {
public static void main(String[] args) {
IdentityHashMap identityHashMap = new IdentityHashMap();
identityHashMap.put(new String("语文"),89);
identityHashMap.put(new String("语文"),84);
identityHashMap.put("java",89);
identityHashMap.put("java",90);
System.out.println(identityHashMap);
}}EnumMap实现类package com.collection.import java.util.EnumM/** * Created by Administrator on . */enum Season{
SPRING,SUMMER,FALL,WINTER}public class EnumMapTest {
public static void main(String[] args) {
EnumMap enumMap = new EnumMap(Season.class);
enumMap.put(Season.WINTER,"冰天雪地");
enumMap.put(Season.SPRING,"春暖花开");
enumMap.put(Season.SUMMER,"夏日炎炎");
enumMap.put(Season.FALL,"秋高气爽");
System.out.println(enumMap);
}}仅能用于枚举类。
最新教程周点击榜
微信扫一扫看看Java源代码----第二天(类集框架Map及其常用实现类)
一.Map映射接口
Map没有继承Collection接口,他提供key-value的映射;Map中不能包含相同的key,每个key只能映射一个value。
Map接口提供了3种集合的视图,Map的内容可以被当做一组key集合,一组value集合或一组key-value映射
----1.Hashtable哈希表类:实现了一个key-value映射的的哈希表,任何非空(not-null)的对象可作为key或者value
Hashtable是同步无序(属于散列表,所以没有按顺序存储)的,通过initial
capacity和loadfactor两个参数调整性能,通常默认的load factor
0.75较好实现了时间和空间的均衡,增大loadfactor可以节省空间,但相应的查找时间或增大,将影响get和put这样的操作
----2.HashMap哈希映射类:和Hashtable类似也是无序的,但他的存储和查找都很快,远远超过其他类型的集合,不同之处在于HashMap是非同步的,并且允许null作为key/value;同时去掉了Hashtable中的contains(Object
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

参考资料

 

随机推荐