「java静态map初始化」java 静态map

博主:adminadmin 2023-01-03 11:06:07 888

本篇文章给大家谈谈java静态map初始化,以及java 静态map对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

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初始化的信息别忘了在本站进行查找喔。