您的位置:首页 > 编程语言 > Java开发

Java list、map、set、vector集合类型中的null值

2016-08-22 12:00 1416 查看
在面向对象语言中,空(Empty)、空值(Null)、不存在(Not Exists)分别具有这不同含义。

举个通俗的例子:

空表示这个位置是用来放这个东西的,但是这个东西的数量现在是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是一个接口,每个集合类都实现了该接口。迭代器删除当前元素后位置并不会移动,且它与下一个元素之间的关系也不会改变(有点类似于链表结构)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  iterator map set list