「java静态map初始化」java 静态map
本篇文章给大家谈谈java静态map初始化,以及java 静态map对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、JAVA中 静态块的作用
- 2、关于JAVA MAP怎么初始化生成
- 3、java语言如何设置Map中一个键值对的生命周期
- 4、java遍历Map的几种方法分析
- 5、java hashmap怎么初始化
- 6、我在JAVA里面写了一个list合集,我想要用map类型初始化list里面的东西
JAVA中 静态块的作用
我先说一下静态块吧,下面就是一个静态块,
static
{
}
静态块的特点是在类加载的时候就执行,先说一下类加载,一个程序要想运行,首先要把代码加载到内存中对吧?然后才能去和CPU交流,这是冯诺依曼计算机规定的。Java也是一样,Java的.class字节码文件要想执行,首先也要加载到内存,由类加载器把字节码文件的代码加载到内存中,这一步就叫类加载,这是首先要进行的。
public
class
Test
{
static
{
System.out.println("我是静态块");
}
}
当创建Test类的一个对象的时候,比如new
Test()
,是这样,首先是类加载,然后才能new对象,静态块在类加载的时候就执行了,这就说明静态块在new对象之前就会执行,而且一个类在第一次被使用的时候会被加载,然后在整个应用程序的生命周期当中不会再次被加载了,就加载这一次,所以这就说明,静态块就执行一次,不会执行第二遍!
public
class
Test
{
public
Test()
{//
构造方法
System.out.println("我是构造方法,创建对象的时候我会执行,我执行完,对象就造出来了");
}
static
{
System.out.println("我是静态块,类加载的时候我就执行了,而且只执行这一次");
}
}
然后这样:
new
Test();
new
Test();
你会发现首先打印出静态块的信息,然后才打印出构造方法信息,然后再次new
Test();的时候,只打印出了构造方法的信息,这个例子证明了我上面说的是对的!
这就是静态块,我说完了,至于你说的
静态块中初始化Map。
初始化这几个字很难讲他的意思,意思包括
把一些内容设为默认状态、把没准备的准备好、在什么什么之前就怎么怎么样、将变量赋为默认值,等等,这个不能精确的说,只能就事说事,下面就可以说是在静态块中初始化Map,
public
class
Test
{
private
static
Map
m;
static
{
m
=
new
HashMap();
}
}
就说道这儿,楼主
看了一个帖子
写的是初始化Map的,
如果还有疑问
不如把地址贴出来,大家也好帮你,就光说初始化Map,这个问的太叫人没法回答了。
关于JAVA MAP怎么初始化生成
首先你要理解 Map的基本结构,key-value
这里最外层的Map,key是String类型,value是ArrayList。ArrayList里面放得又是Map,这个Map的key是String,value也是String。
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
public class Test {
public static void main(String[] args) {
MapString, ArrayListMapString, String topMap = new HashMap();
String key1 = "map_key1"; // topMap 的第一个key
ArrayListMapString, String value1 = new ArrayList(); // topMap 的第一个value
// start
MapString, String strMap = new HashMap();
strMap.put("hello", "你好");
strMap.put("thanks", "谢谢");
value1.add(strMap);
value1.add(new HashMap()); // 添加一个空的 Map
// end
topMap.put(key1, value1); // 放入topMap
// 以上 start 到 end 段的代码是在往value1的ArrayList中填充数据
// 不填充也可以放入到topMap中,就像下面这样
topMap.put("emptyList", new ArrayListMapString, String());
topMap.put("emptyList2", new ArrayList()); // jdk 1.7 及之后推荐这样写,省掉泛型描述。前面的new HashMap()、new ArrayList()也是省掉了
}
}
java语言如何设置Map中一个键值对的生命周期
通常来说,Map是一个由键值对组成的数据结构,且在集合中每个键是唯一的。下面就以K和V来代表键和值,来说明一下java中关于Map的九大问题。
0、将Map转换为List类型
在java中Map接口提供了三种集合获取方式:Key set,,value set, and key-value set.。它们都可以通过构造方法或者addAll()方法来转换为List类型。下面代码就说明了如何从Map中构造ArrayList:
// key list
List keyList = new ArrayList(map.keySet());
// value list
List valueList = new ArrayList(map.valueSet());
// key-value list
List entryList = new ArrayList(map.entrySet());
1、通过Entry 遍历Map
java中这种以键值对存在的方式被称为Map.Entry。Map.entrySet()返回的是一个key-value 集合,这是一种非常高效的遍历方式。
for(Entry entry: map.entrySet()) {
// get key
K key = entry.getKey();
// get value
V value = entry.getValue();
}
Iterator 我们也经常用到,尤其是在JDK1.5以前
Iterator itr = map.entrySet().iterator();
while(itr.hasNext()) {
Entry entry = itr.next();
// get key
K key = entry.getKey();
// get value
V value = entry.getValue();
}
2、通过Key来对Map排序
排序需要对Map的ke进行频繁的操作,一种方式就是通过比较器(comparator )来实现:
List list = new ArrayList(map.entrySet());
Collections.sort(list, new Comparator() {
@Override
public int compare(Entry e1, Entry e2) {
return e1.getKey().compareTo(e2.getKey());
}
});
另外一种方法就是通过SortedMap,但必须要实现Comparable接口。
SortedMap sortedMap = new TreeMap(new Comparator() {
@Override
public int compare(K k1, K k2) {
return k1.compareTo(k2);
}
});
sortedMap.putAll(map);
3、对value对Map进行排序
这与上一点有些类似,代码如下:
List list = new ArrayList(map.entrySet());
Collections.sort(list, new Comparator() {
@Override
public int compare(Entry e1, Entry e2) {
return e1.getValue().compareTo(e2.getValue());
}
});
4、初始化一个static 的常量Map
当你希望创建一个全局静态Map的时候,我们有以下两种方式,而且是线程安全的。
而在Test1中,我们虽然声明了map是静态的,但是在初始化时,我们依然可以改变它的值,就像Test1.map.put(3,”three”);
在Test2中,我们通过一个内部类,将其设置为不可修改,那么当我们运行Test2.map.put(3,”three”)的时候,它就会抛出一个UnsupportedOperationException 异常来禁止你修改。
public class Test1 {
private static final Map map;
static {
map = new HashMap();
map.put(1, “one”);
map.put(2, “two”);
}
}
public class Test2 {
private static final Map map;
static {
Map aMap = new HashMap();
aMap.put(1, “one”);
aMap.put(2, “two”);
map = Collections.unmodifiableMap(aMap);
}
}
5、HashMap, TreeMap, and Hashtable之间的不同
在Map接口中,共有三种实现:HashMap,TreeMap,Hashtable。
它们之间各有不同,详细内容请参考《 HashMap vs. TreeMap vs. Hashtable vs. LinkedHashMap》一文。
6、Map中的反向查询
我们在Map添加一个键值对后,意味着这在Map中键和值是一一对应的,一个键就是对应一个值。但是有时候我们需要反向查询,比如通过某一个值来查找它的键,这种数据结构被称为bidirectional map,遗憾的是JDK并没有对其支持。
Apache和Guava 共同提供了这种bidirectional map实现,它在实现中它规定了键和值都是必须是1:1的关系。
7、对Map的复制
java中提供了很多方法都可以实现对一个Map的复制,但是那些方法不见得会时时同步。简单说,就是一个Map发生的变化,而复制的那个依然保持原样。下面是一个比较高效的实现方法:
Map copiedMap = Collections.synchronizedMap(map);
当然还有另外一个方法,那就是克隆。但是我们的java鼻祖Josh
Bloch却不推荐这种方式,他曾经在一次访谈中说过关于Map克隆的问题:在很多类中都提供了克隆的方法,因为人们确实需要。但是克隆非常有局限性,而
且在很多时候造成了不必要的影响。(原文《Copy constructor versus cloning》)
8、创建一个空的Map
如果这个map被置为不可用,可以通过以下实现
map = Collections.emptyMap();
相反,我们会用到的时候,就可以直接
map = new HashMap();
java遍历Map的几种方法分析
1.先初始化一个map
public class TestMap {
public static MapInteger, Integer map = new HashMapInteger, Integer();
}
2.keySet values
如果只需要map的key或者value,用map的keySet或values方法无疑是最方便的
// KeySet 获取key
public void testKeySet() {
for (Integer key : map.keySet()) {
System.out.println(key);
}
}
// values 获取value
public void testValues() {
for (Integer value : map.values()) {
System.out.println(value);
}
}
3.keySet get(key)
如果需要同时获取key和value,可以先获取key,然后再通过map的get(key)获取value
需要说明的是,该方法不是最优选择,一般不推荐使用
// keySet get(key) 获取key and value
public void testKeySetAndGetKey() {
for (Integer key : map.keySet()) {
System.out.println(key + ":" + map.get(key));
}
}
4.entrySet
通过对map entrySet的遍历,也可以同时拿到key和value,一般情况下,性能上要优于上一种,这一种也是最常用的遍历方法
// entrySet 获取key and value
public void testEntry() {
for (Map.EntryInteger, Integer entry : map.entrySet()) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}
}
5.Iterator
对于上面的几种foreach都可以用Iterator代替,其实foreach在java5中才被支持,foreach的写法看起来更简洁
但Iterator也有其优势:在用foreach遍历map时,如果改变其大小,会报错,但如果只是删除元素,可以使用Iterator的remove方法删除元素
// Iterator entrySet 获取key and value
public void testIterator() {
IteratorMap.EntryInteger, Integer it = map.entrySet().iterator();
while (it.hasNext()) {
Map.EntryInteger, Integer entry = it.next();
System.out.println(entry.getKey() + ":" + entry.getValue());
// it.remove(); 删除元素
}
}
java hashmap怎么初始化
HashMap 是一种常用的数据结构,一般用来做数据字典或者 Hash 查找的容器。普通青年一般会这么初始化:
HashMapString, String map = new HashMapString, String();
map.put("name", "test");
map.put("age", "20");
看完这段代码,很多人都会觉得这么写太啰嗦了,文艺青年一般这么来了:
HashMapString, String map = new HashMapString, String() {
{
map.put("name", "test");
map.put("age", "20");
}
};
我在JAVA里面写了一个list合集,我想要用map类型初始化list里面的东西
Portlet portlet = new Portlet(); //Portlet 你的TestLzp
JSONObject jsonObject = JSONObject.fromObject(portlet); // net.sf.json.JSONObject
Map map = new HashMap();
for (Object objectKey : jsonObject.keySet()){
String value = String.valueOf(jsonObject.get(objectKey));
map.put(objectKey,value);
}
System.out.println(map.toString());
java静态map初始化的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java 静态map、java静态map初始化的信息别忘了在本站进行查找喔。