java中为什么List、HashSet允许存放空元素,TreeSet就不允许?

java中为什么List、HashSet允许存放空元素,TreeSet就不允许?,第1张

1 List 集合: 被比较的对象要重写equals()方法, 调用List中contains()方法,就是用equals()方法比较的.

List 集合 (允许重复元素,允许空值)

2 HashSet集合(不允许重复元素,允许空值): 被比较的对象要重写hashCode()方法和重写equals()方法, 两个都要.

3 TreeSet集合.(不允许重复元素):

方法一:被比较的对象(如学生类)实现Comparable接口,重写CompareTo()方法.--(不允许空值)

方法二:TreeSet的构造方法,传入Comparator接口的实现类,他是重写了compare()方法.--(允许空值)

4 HashMap集合: 与HashSet情况一样.

5 TreeMap集合: 与TreeSet情况一样.

6 顺便说一下, 对List排序可用Collections类的sort()方法.要用到Comparable或Comparator接口.

===========================================================

list:arraylist,vector,linkedlist,其中vetctor线程同步,linkedlist插删

基本上list都是基于array的;里面的元素都可以重复;

set:hashset,treeset;set不能够重复,set是基于map的;treeset是排序的

list和set是继承collection接口的,map不是

map:hashtable,hashmap,treemap;hashtable是线程同步的,map的key不能够重复,value可以;treemap是排序的

另外,没记错的话,list,set,map都是可以使用collections.sort()排序的

list里面塞4个空值,它的长度是4

import java.util.LinkedList

import java.util.List

public class test{

public static void main(String[] args) {

List<String>li = new LinkedList<String>()

li.add(null)

li.add(null)

li.add(null)

li.add(null)

System.out.println(li.size())

}

这个是Java实现的list代码,这段代码输出的值就是4,你可以使用Java编译工具试一下

List<string>li = new List<string>()

li.Add(null)

li.Add(null)

li.Add(null)

li.Add(null)

Console.WriteLine(li.Count)

Console.ReadLine()

这个是C#实现的,输入结果也是一样的

返回false,因为null不是任何类的实例。null就是空的引用。

List

集合里可以用null作为参数,是因为List默认允许加入空值,所以使用list.add(null)才不会有错。

但是如果对于不接受空值的集合传入null做参数就会报空指针异常了,比如HashTable就不接受null作为键或值。

对于你的补充:

1

结果是

List

doesn't

contain

null

List

contains

null

List

contains

null

这些你自己测试就可以看到;

2

List

是一个有序的集合,它里面存储的每一个元素都是对象,确切来说是对象的引用(就是存放真正对象所在的内存地址);对象的引用指向的是真正的对象,你直接存入null和你定义一个Object对象赋值为null然后再存入都是一样的,它就代表一个引用位置,而这个位置是空也就是并没有指向什么具体的对象,它的值是null,所以你看到的都是null;

3

结果就是上面这样出来的。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11926401.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存