关于调用List,contains()方法,报空指针异常的问题。
package imooc_java_3_6_1To8; import java.util.Collections; import java.util.List; import java.util.Random; /** * 实现功能: * 1.创建List<String>,并且往其中添加10条随机字符串 * 2.每条字符串长度为10以内的随机整数 * 3.每条字符串的每个字符都为随机生成的字符,字符可以重复 * 4.每条随机字符串不可以重复 */ public class CollectionsTest { // 1.创建List<String>对象stringList,并且往其中添加10条随机字符串 List<String> stringList; public void testStringSort(){ //创建一个Random对象,用于生成随机数 Random random = new Random(); //定义一个字符串,存储所有可能出现的字符 String base = new String("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"); //控制循环10次 for(int i = 0; i < 10; i++){ //得到一个10以内的随机整数,作为循环的次数,控制字符串的长度,数字可以重复 //循环得到一个随机字符(数字or字母【大写/小写】),把字符组合成一个字符串 int stringSize = random.nextInt(10); //定义一个StringBuffer对象,存储随机字符串(因为StringBuffer可以变换其内容,所以比较好) StringBuffer sb = new StringBuffer(); for(int j = 0; j < stringSize; j++){ //随机获得base字符串的一个字符的下标 int index = random.nextInt(base.length()); //把对应下标的字符添加到StringBuffer对象sb中 sb.append(base.charAt(index)); }//for循环结束,得到一条随机的字符串 //判断List中是否有该字符串,若无,则添加到list中,若有,则重新循环得到一个新的字符串 if(stringList.contains(sb)) continue; else{ //将StringBuffer类型转换成String类型并添加到List中 String randomString = sb.toString(); stringList.add(randomString); System.out.println("添加了字符串:" + randomString); } //10次循环结束,输出此时的stringList System.out.println("---------------添加前----------------"); for (String string : stringList) { System.out.println("元素:" + string); } //调用Collections.sort()方法对stringList排序,并输出排序后的stringList Collections.sort(stringList); System.out.println("---------------添加前----------------"); for (String string : stringList) { System.out.println("元素:" + string); } } } public static void main(String[] args) { CollectionsTest ct = new CollectionsTest(); ct.testStringSort(); } }
运行结果:
对应的异常代码(38行):
if(stringList.contains(sb)) continue;
我在这之前调试过,sb是有内容的,内容是一串随机的字符串。
然后我查看了一下contains的API,如下:
这里头也提到了空指针异常。
我怀疑会报错,是因为List对象stringList中没有内容,也就是满足后半句“此列表不允许null元素”。然而这里写着“可选”,我想知道这个“可选”是什么意思,可以让stringList在包含null元素的情况下,调用contains()方法不会报错?那要怎么实现呢?
另外,也想请教大家,API中说的,指定的元素是什么意思呢?是我传入做比较的这个元素,还是List中已有的元素呢?