Java list、map、set、vector集合类型中的null值
2016-08-22 12:00
1416 查看
在面向对象语言中,空(Empty)、空值(Null)、不存在(Not Exists)分别具有这不同含义。
举个通俗的例子:
面向对象是不是很神奇!其实和我们平常对事物的理解是一样的。
因此,空(Empty)、空值(Null)也是一个对象,既然是对象自然就都可以加入到Java的集合当中了。
我们来做个实验,并探讨如何删除集合中的Null。
运行截图如下:
结论如下:
(1)list、map、set、vector等集合类型都是可以存放null的。
(2)list是不能简单的用 for() 来删除数据的,因为每次删除一个位,该位后面的数据便会往前移一位。如果非要用 for() 可以考虑逆序删除。
(3)如果要删除集合中的元素可以使用迭代器iterator,iterator是一个接口,每个集合类都实现了该接口。迭代器删除当前元素后位置并不会移动,且它与下一个元素之间的关系也不会改变(有点类似于链表结构)。
举个通俗的例子:
空表示这个位置是用来放这个东西的,但是这个东西的数量现在是0; Null是一个占位符,表示这个地方我占了,现在没空间给你放东西; 不存在表示根本就没有这里地方,更别说放在这里的东西了;
面向对象是不是很神奇!其实和我们平常对事物的理解是一样的。
因此,空(Empty)、空值(Null)也是一个对象,既然是对象自然就都可以加入到Java的集合当中了。
我们来做个实验,并探讨如何删除集合中的Null。
package com.demo.test; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.Map.Entry; import java.util.Set; import java.util.Vector; public class IteratorDemo { private static ArrayList<String> list = new ArrayList<String>(); private static HashMap<Integer, String> map = new HashMap<Integer, String>(); private static HashSet<String> set = new HashSet<String>(); private static Vector<String> vector = new Vector<String>(); static { list.add("a"); list.add(null); list.add(null); list.add("c"); list.add(null); map.put(1, "a"); map.put(2, "b"); map.put(3, null); map.put(4, "d"); map.put(5, "e"); set.add("a"); set.add(null); set.add("c"); set.add(null); vector.add("a"); vector.add(null); vector.add(null); vector.add("d"); } private static void printList() { System.out.println("printList"); for(String str : list) { System.out.println(str); } System.out.println(); } private static void printMap() { System.out.println("printMap"); Set<Entry<Integer, String>> entrySet = map.entrySet(); Iterator<Entry<Integer, String>> iterator = entrySet.iterator(); while(iterator.hasNext()) { Entry<Integer, String> entry = iterator.next(); System.out.println(entry.getKey() + " = " + entry.getValue()); } System.out.println(); } private static void printSet() { System.out.println("printSet"); for(String str : set) { System.out.println(str); } System.out.println(); } private static void printVector() { System.out.println("printVector"); for(String str : vector) { System.out.println(str); } System.out.println(); } private static void removeNullAtList() { printList(); System.out.print("removeNullAtList iterator "); Iterator<String> iterator = list.iterator(); while(iterator.hasNext()) { if(iterator.next() == null) { iterator.remove(); } } printList(); } private static void removeNullAtList2() { printList(); System.out.print("removeNullAtList for() sequence "); for(int i=0;i<list.size();i++) { if(list.get(i) == null) { list.remove(i); } } printList(); } private static void removeNullAtList3() { printList(); System.out.print("removeNullAtList while "); int i = 0; while(i<list.size()) { if(list.get(i) == null) { list.remove(i); } else { i++; } } printList(); } private static void removeNullAtList4() { printList(); System.out.print("removeNullAtList for() reverse "); for(int i=list.size()-1;i>=0;i--) { if(list.get(i) == null) { list.remove(i); } } printList(); } private static void removeNullAtMap() { System.out.print("removeNullAtMap iterator "); Set<Entry<Integer, String>> entrySet = map.entrySet(); Iterator<Entry<Integer, String>> iterator = entrySet.iterator(); while(iterator.hasNext()) { Entry<Integer, String> entry = iterator.next(); if(entry.getValue() == null) { iterator.remove(); } } printMap(); } private static void removeNullAtSet() { printSet(); System.out.print("removeNullAtSet iterator "); Iterator<String> iterator = set.iterator(); while(iterator.hasNext()) { if(iterator.next() == null) { iterator.remove(); } } printSet(); } private static void removeNullAtVector() { printVector(); System.out.print("removeNullAtVector iterator "); Iterator<String> iterator = vector.iterator(); while(iterator.hasNext()) { if(iterator.next() == null) { iterator.remove(); } } printVector(); } private static void removeNullAtVector2() { printVector(); System.out.print("removeNullAtVector for() "); for(int i=0;i<vector.size();i++) { if(vector.get(i) == null) { vector.remove(i); } } printVector(); } public static void main(String[] args) { ArrayList<String> cloneList = (ArrayList<String>) list.clone(); removeNullAtList(); list = (ArrayList<String>) cloneList.clone(); removeNullAtList2(); list = (ArrayList<String>) cloneList.clone(); removeNullAtList3(); list = cloneList; removeNullAtList3(); System.out.println("============="); printMap(); System.out.println(6 + " = " + map.get(6) + "\n"); map.remove(4); printMap(); removeNullAtMap(); System.out.println("============="); removeNullAtSet(); System.out.println("============="); Vector<String> cloneVector = (Vector<String>) vector.clone(); removeNullAtVector(); vector = cloneVector; removeNullAtVector2(); } }
运行截图如下:
结论如下:
(1)list、map、set、vector等集合类型都是可以存放null的。
(2)list是不能简单的用 for() 来删除数据的,因为每次删除一个位,该位后面的数据便会往前移一位。如果非要用 for() 可以考虑逆序删除。
(3)如果要删除集合中的元素可以使用迭代器iterator,iterator是一个接口,每个集合类都实现了该接口。迭代器删除当前元素后位置并不会移动,且它与下一个元素之间的关系也不会改变(有点类似于链表结构)。
相关文章推荐
- Java集合三种类型:Set<集>、List<列表>、Map<映射>
- map,set,list,等JAVA中集合解析
- map,set,list,等JAVA中集合解析
- JAVA中集合map,set,list详解
- java中集合类list set map三者的区别和应用场合
- map,set,list,等JAVA中集合解析(了解)
- java 中 各种集合(List Set Map) 去除重复项
- List,Set,Map--简述JAVA集合知识
- (转)map,set,list,等JAVA中集合解析(了解)
- 【转帖】map,set,list,等JAVA中集合解析 - Java - cjw的资料
- 黑马程序员-java的集合概念:Coleection,List,Map,Set之间的关系
- Java集合List,Set,Map基础
- java中set/map/list/vector 的总结
- java集合map,set,list区别
- Hibernate之映射集合(值类型的set,bag,idbag,list和map)
- java集合 set list map
- java中set/map/list/vector 的总结
- java集合map,set,list区别
- java集合map,set,list区别