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为什么是操作之后的?

这个没什么问题啊,map中放的是list的一个引用,等它取出list再赋给另一个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集合问题。的主要内容,如果未能解决你的问题,请参考以下文章

java中Map,List与Set的区别(转)

浅谈Java中set.map.List的区别

Java集合框架总结

Java中的Set,List,Map的区别

Java集合中List和 Map区别?

JAVA的集合类型都有哪些