JAVA中map中存储list集合问题。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA中map中存储list集合问题。相关的知识,希望对你有一定的参考价值。
public static void main(String[] args)
Map<String, List<String>> map = new HashMap<String, List<String>>();
List<String> list = new ArrayList<String>(); //01 创建一个list对象
map.put("1", list); //02 放入map中
list.add("java"); // 03 往list中添加元素
List<String> list02 =new ArrayList<String>();
list02=map.get("1"); //04 取出map中的list付给list02
System.out.println(list02.get(0)); // 05 打印出java
02我是先往map中添加空的list, 03再操作list, 04取出来的list为什么是操作之后的?
附:所以list不管是什么时候加东西进去,其他对象有引用到它的都一样有值 参考技术A 因为map添加list是对list的引用,相当于传址!明白传值和传址的区别,你就可以明白
java中ListSet和Map三个接口
三个接口都在java.util包下
List与Set具有相似性,它们都是单列元素的集合,所以,它们有一个共同的父接口,叫Collection,Map没有继承Collection接口
1、List接口:
List表示有先后顺序的集合,一个对象可以被反复存储进List中,每调用一次add方法,这个对象就被插入进集合中一次
其实,并不是把这个对象本身存储进了集合中,而是在集合中用一个索引变量指向这个对象,当这个对象被add多次时,即相当于集合中有多个索引指向了这个对象
List除了可以用Iterator接口取得所有的元素,再逐一遍历各个元素之外,还可以调用get(index i)来明确说明取第几个。
常用方法:add()、remove()等
主要实现类:ArrayList、Vector、LinkedList
- Vector是线程安全的,也就是说是它的方法之间是线程同步的(synchronized)
- ArrayList是线程不安全的,它的方法之间是线程不同步的,因为它不考虑线程安全,效率会高些
- LinkedList也是线程不安全的,LinkedList提供了一些方法,使得LinkedList可以被当作堆栈和队列来使用
ArrayList与Vector都有一个初始的容量大小,当存储进它们里面的元素的个数超过了容量时,就需要增加ArrayList与Vector的存储空间
Vector默认增长为原来两倍,而ArrayList的增长策略在文档中没有明确规定(从源代码看到的是增长为原来的1.5倍)
2、Set接口:
Set里面不允许有重复的元素,即不能有两个相等(通过equals()判断),内部排序
Set取元素时,不能细说要取第几个,只能以Iterator接口取得所有的元素,再逐一遍历各个元素
常用方法:add()、remove()等
3、Map接口:
Map与List和Set不同,它是双列的集合,Map中存储的数据是没有顺序的,其中有put方法,定义如下:put(obj key,obj value),每次存储时,要存储一对key/value
不能存储重复的key,这个重复的规则也是按equals比较相等,取则可以根据key获得相应的value,即get(Object key)返回值为key所对应的value,它的值是可以有重复的
另外,也可以获得所有的key的结合,还可以获得所有的value的结合,还可以获得key和value组合成的Map.Entry对象的集合
常用方法:put()、remove()等
主要实现类:HashMap、Hashtable
- HashMap是Hashtable的轻量级实现,Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的
- HashMap允许将null作为一个entry的key或者value,而Hashtable不允许
- HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解
- Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的
以上是关于JAVA中map中存储list集合问题。的主要内容,如果未能解决你的问题,请参考以下文章