「javamap实现」javamap实现类
本篇文章给大家谈谈javamap实现,以及javamap实现类对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、java 怎么实现这样一个Map集合
- 2、java 中 Map 内部是怎么实现的
- 3、java中如何使用map存取数据
- 4、java 怎么实现并发hashmap
- 5、java中如何在map中实现一对多的关系?
- 6、工作中你是如何用Java 遍历 Map的呢
java 怎么实现这样一个Map集合
java实现Map集合的方式如下:
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import org.junit.Test;
//Map集合取数据的四种方法
public class MapFetch {
// 第一种方法(传统方法)
@Test
public void funOne() {
Map map = new HashMap();
map.put("1", "第一个数");
map.put("2", "第二个数");
map.put("3", "第三个数");
Set set = map.keySet();
Iterator it = set.iterator();
while (it.hasNext()) {
String key = (String) it.next();
String value = (String) map.get(key);
System.out.println(key + "=" + value);
}
}
}
}
java 中 Map 内部是怎么实现的
Map只是一个接口,只定义了具体的方法,没有去实现任何功能的
Map的源码如下:
public abstract interface MapK, V
{
public abstract int size();
public abstract boolean isEmpty();
public abstract boolean containsKey(Object paramObject);
public abstract boolean containsValue(Object paramObject);
public abstract V get(Object paramObject);
public abstract V put(K paramK, V paramV);
public abstract V remove(Object paramObject);
public abstract void putAll(Map? extends K, ? extends V paramMap);
public abstract void clear();
public abstract SetK keySet();
public abstract CollectionV values();
public abstract SetEntryK, V entrySet();
public abstract boolean equals(Object paramObject);
public abstract int hashCode();
public static abstract interface EntryK, V
{
public abstract K getKey();
public abstract V getValue();
public abstract V setValue(V paramV);
public abstract boolean equals(Object paramObject);
public abstract int hashCode();
}
}
java中如何使用map存取数据
java中使用map存取数据的方法如下:
1、需要指定其中的K,V;k=keyv=value。
2、指定其中K、V的类型。
3、接下来往map中添加数据。
4、需要注意的是,如果map中已经存在的key,后面添加的会覆盖掉当前值。
接下来对map进行遍历输出。可以看到其中a的值已经被覆盖,此时就已经使用map存储好数据了。
java 怎么实现并发hashmap
如果需要使 Map 线程安全,大致有这么四种方法:
1、使用 synchronized 关键字,代码如下
synchronized(anObject) {
value = map.get(key);
}
2、使用 JDK1.5提供的锁(Java.util.concurrent.locks.Lock)。代码如下
lock.lock();
value = map.get(key);
lock.unlock();
3、使用 JDK1.5 提供的读写锁(java.util.concurrent.locks.ReadWriteLock)。代码如下
rwlock.readLock().lock();
value = map.get(key);
rwlock.readLock().unlock();
这样两个读操作可以同时进行,理论上效率会比方法 2 高。
4、使用 JDK1.5 提供的 java.util.concurrent.ConcurrentHashMap 类。该类将 Map 的存储空间分为若干块,每块拥有自己的锁,大大减少了多个线程争夺同一个锁的情况。代码如下
value = map.get(key); //同步机制内置在 get 方法中
其中ConcurrentHashMap是最好最快的
java中如何在map中实现一对多的关系?
假设这样定义:
Map coll=new HashMap();
coll.put(1,"a");
coll.put(1,"b");
比如说1代表学校,a和b分别代表学院,即一个学校可对应多个学院。
1、可以使用MapInteger, List格式来达到一对多的关系
2、key值可以为一个整型数,作为一个类似ID主键来使用,value值可以用List集合来保存多条数据。
3、这样就达到了一个key,对应多条记录。
工作中你是如何用Java 遍历 Map的呢
在java中遍历Map有不少的方法。我们看一下最常用的方法及其优缺点。
既然java中的所有map都实现了Map接口,以下方法适用于任何map实现(HashMap, TreeMap, LinkedHashMap, Hashtable, 等等)
方法一、 在for-each循环中使用entries来遍历
这是最常见的并且在大多数情况下也是最可取的遍历方式。在键值都需要时使用。
注意:for-each循环在java 5中被引入所以该方法只能应用于java 5或更高的版本中。如果你遍历的是一个空的map对象,for-each循环将抛出NullPointerException,因此在遍历前你总是应该检查空引用。
方法二、在for-each循环中遍历keys或values
如果只需要map中的键或者值,你可以通过keySet或values来实现遍历,而不是用entrySet。
该方法比entrySet遍历在性能上稍好(快了10%),而且代码更加干净。
方法三、使用Iterator遍历
使用泛型:
不使用泛型:
你也可以在keySet和values上应用同样的方法。
该种方式看起来冗余却有其优点所在。首先,在老版本java中这是惟一遍历map的方式。另一个好处是,你可以在遍历时调用iterator.remove()来删除entries,另两个方法则不能。根据javadoc的说明,如果在for-each遍历中尝试使用此方法,结果是不可预测的。
从性能方面看,该方法类同于for-each遍历(即方法二)的性能。
方法四、通过键找值遍历(效率低)
作为方法一的替代,这个代码看上去更加干净;但实际上它相当慢且无效率。因为从键取值是耗时的操作(与方法一相比,在不同的Map实现中该方法慢了20%~200%)。如果你安装了FindBugs,它会做出检查并警告你关于哪些是低效率的遍历。所以尽量避免使用。
总结
如果仅需要键(keys)或值(values)使用方法二。如果你使用的语言版本低于java 5,或是打算在遍历时删除entries,必须使用方法三。否则使用方法一(键值都要)。
javamap实现的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于javamap实现类、javamap实现的信息别忘了在本站进行查找喔。
发布于:2022-12-14,除非注明,否则均为
原创文章,转载请注明出处。