java 中List包含List,如何添加多个list,Map中包含多个list,如何添加?
2017-11-08 10:10
375 查看
1、List中添加list public class TestList { public static void main(String[] args) { List<List<Integer>> vecvecRes = new ArrayList<List<Integer>>(); for (int i = 0; i < 10; i++) { List<Integer> list = new ArrayList<Integer>(); for (int j = 0; j <= 5; j++) { list.add(j); } vecvecRes.add(list); } for(List<Integer> subList : vecvecRes){ System.out.println(subList); } } }
结果如下:
[0, 1, 2, 3, 4, 5] [0, 1, 2, 3, 4, 5] [0, 1, 2, 3, 4, 5] [0, 1, 2, 3, 4, 5] [0, 1, 2, 3, 4, 5] [0, 1, 2, 3, 4, 5] [0, 1, 2, 3, 4, 5] [0, 1, 2, 3, 4, 5] [0, 1, 2, 3, 4, 5] [0, 1, 2, 3, 4, 5]
2、Map中添加list
public static void main(String[] args) { Map<Integer , List<Integer>> map = new HashMap<Integer , List<Integer>>(); for(int i = 0; i < 10; i++){ List<Integer> list = new ArrayList<Integer>(); for(int j = 0; j < 10; j++){ list.add(j); } map.put(i, list); } for(Integer it : map.keySet()){ System.out.println(it + ":" + map.get(it)); } }
结果如下:
0:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 1:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 2:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 3:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 4:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 5:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 6:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 7:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 8:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 9:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
也许,您会有这样的疑问,每次都声明了List类型的list,那最后添加的不是指向的最后一个list的内容吗?
这种说法乍一听上去是对的,但仔细想想是错误的,因为每次循环声明的局部变量List<Integer> list 在每次循环完之后会被内存释放,为该循环变量分配的内存会被回收,因此,每次拿到的list都是一个新声明的list。我们可以打印哈希值来看。
9ebadac6
9ebadac6
9ebadac6
9ebadac6
9ebadac6
9ebadac6
9ebadac6
9ebadac6
9ebadac6
9ebadac6
一样的,这是为什么?????
看这篇博客吧,讲得很好:blog.csdn.net/tmdlife/article/details/51970897
至此,解决了困扰我很久的问题了。。。哈哈哈。。。
附:java中List的遍历方式:
对List的遍历有三种方式
List<String> list = new ArrayList<String>();
list.add("testone");
list.add(“testtwo”);
...
第一种:
for(Iterator<String> it = list.iterator(); it.hasNext(); ) {
....
}
这种方式在循环执行过程中会进行数据锁定, 性能稍差, 同时,如果你想在寻欢过程中去掉某个元素,只能调用it.remove方法, 不能使用list.remove方法, 否则一定出现并发访问的错误.
第二种:
for(String data : list) {
.....
}
内部调用第一种, 换汤不换药, 因此比Iterator 慢,这种循环方式还有其他限制, 不建议使用它。
第三种:
for(int i=0; i<list.size(); i++) {
A a = list.get(i);
...
}
内部不锁定, 效率最高, 但是当写多线程时要考虑并发操作的问题。
相关文章推荐
- 如何选择 Java中的Map List Set等集合类
- 如何在Java中选择Map/List/Set
- Java中常见数据结构:list与map -底层如何实现
- java 中如何声明线程安全的集合 set, map 和list【转】
- 如何在Java中选择Map/List/Set
- java开发中如何选择Set、List、Map、数组
- 有关如何在java代码中使用json来互转对象、List、Map等
- Java中的map集合顺序如何与添加顺序一样
- list的add方法 ,foreach循环添加map---List.add(map)(通过一个java爬虫案例说明)
- java开发中如何选择Set、List、Map、数组
- Java对List<Map<String,Object>>中的参数中文排序 包含特殊符号
- 如何在Java中选择Map/List/Set
- Java中常见数据结构:list与map -底层如何实现
- Java如何在List或Map遍历过程中删除元素
- Java 通过反射原理,通过Map转为Java POJO对象,适用于对象包含List,Map,数组等
- fastJson如何序列化一个包含list对象的Map对象,如Map<String,List<T>>类型的对象
- java开发中如何选择Set、List、Map、数组
- Java中常见数据结构:list与map -底层如何实现
- Java开发中如何选择Set、List、Map、数组
- List<Map<String,Object>>如何使用Java代码遍历以获取String,Object的值