首页 > 试题广场 >

请问运行主要的程序后会打印出的是什么

[单选题]
有这样一段程序:
public class Test{ 
    public static void main(String [] args){ 
        List list=new ArrayList(); 
        list.add("a");
        list.add("b");
        list.add("a");
        Set set=new HashSet(); 
        set.add("a"); 
        set.add("b"); 
        set.add("a"); 
        System.out.println(list.size()+","+set.size()); 
    } 
}
请问运行主要的程序会打印出的是什么()
  • 2,2
  • 2,3
  • 3,2
  • 3,3
推荐

C
题目出错了,可以猜测一下出题的意愿
1、List和Set的区别,set中不能放重复的
2、Set中重复的定义,未定义自己的equels方法的话,调用默认的,也就是直接==

由于此题采用的添加的是字符串,而字符串已经实现了equels方法,所以不会产生2中提到的问题,但是自己定义的类就要注意了。

综上所述,题目应该更改为只是为了检测1中的概念
publicclassTest{ 
    public staticvoidmain(String [] args){ 
        List list=newArrayList(); 
        List.add("a");
        List.add("b");
        List.add("a");
        Set set=newHashSet(); 
        set.add("a"); 
        set.add("b"); 
        set.add("a"); 
        System.out.println(list.size()+","+set.size()); 
    } 
};

编辑于 2015-12-06 17:07:03 回复(9)
这题我怎么想都是1,2.。。list中只有一个元素,set中只有a,b俩元素啊。
发表于 2015-09-16 16:44:49 回复(3)
list有序可重复,set无序不可重复
发表于 2016-09-27 13:19:11 回复(1)
HashSet不能添加重复的元素,当调用add(Object)方法时候,
首先会调用Object的hashCode方法判hashCode是否已经存在,如不存在则直接插入元素;
如果已存在则调用Object对象的equals方法判断是否返回true, 如果为true则说明元素已经存在,如为false则插入元素
发表于 2015-10-07 20:12:28 回复(3)
List不去重,Set去重。
以HashSet为例,底层是用HashMap实现的。所有Entry<K,V>的V都是同一个对象 public static final PRESENT = new Object(),所以Set的add方法其实就是给Map的K赋值。
同时Set中的add方法存在返回值,一旦返回false,说明Set集合中已经存在了要添加的对象。
但是要注意,在HashMap中判定是否是一个对象的时候,先用了hashCode方法,再用了equals方法,一旦add的是我们自己的对象,注意重写这两个方法。
HashMap的定位方法,底层是数据+链表+红黑树(6,8)。
    1. 对象的hashCode得到hash值后,hash值高低16位进行&运算,重新得到对象的hash值。(hash(Object o)
    2. hash值与tab.length-1进行&运算,确定插入对象在桶(数组)中的角标。
    3. 再利用比较形成链表或红黑树(具体不说了)。
发表于 2018-06-27 08:33:12 回复(0)
看源码的话:HashSet底层就是HashMap的键值存储,而HashMap的键值不允许重复,因此HashSet也不允许重复元素:
public HashSet() { map = new HashMap<>();
}
Set无序不重复,而List是有序可重复的。
发表于 2019-07-17 10:52:48 回复(0)
这个题目就是考察List和Set的区别的,List可以放重复值,而Set不能,所以小编出题的时候,,麻烦看一下。
发表于 2015-09-16 18:34:38 回复(0)
list可重复有序,set无序不可重复
发表于 2019-01-21 12:54:39 回复(0)
HashSet不能添加重复的元素,当调用add(Object)方法时候, 首先会调用Object的hashCode方法判hashCode是否已经存在,如不存在则直接插入元素; 如果已存在则调用Object对象的equals方法判断是否返回true, 如果为true则说明元素已经存在,如为false则插入元素
发表于 2018-10-28 08:28:01 回复(0)
答案选C 因为List可以存储多个相同的元素,且允许其为null,Set接口 自动去除重复的值,只允许一个值为null
发表于 2021-10-02 00:02:11 回复(0)
实现set接口的集合是不可重复的,且无序的
发表于 2021-09-29 09:13:15 回复(0)
set不能放重复的,所以set.size长度为2.
发表于 2021-07-07 09:42:06 回复(0)
hashSet去重
发表于 2021-03-27 10:20:34 回复(0)

set中元素不重复

发表于 2020-07-30 11:23:08 回复(0)
记错了,set里不能放重复的
发表于 2019-06-09 18:06:24 回复(0)
此题考查list 与 set 区别  ,list是无序(按照插入顺序),可插入重复数据,set 有序不可插入重复数据,要是添加后一个覆盖前一个

发表于 2017-09-09 11:58:16 回复(4)
set不可以放重复的值,添加第一个值时候a获取到了,添加第二个时候获取到b了,但添加第三个的时候获取到a,但是检测到已经存在了,所以将a覆盖了,如果打印会发现输出结果为b,a

发表于 2015-10-08 10:50:50 回复(1)
List 线性表可以有重复元素,而set集合不可有重复元素
发表于 2015-11-17 15:03:13 回复(0)
为什么都说有问题呢?自己运行了下确实是3,2啊。答案是对的啊。List可以放重复,Set不可以放重复,例如:List:1,2,2,4,。那就是4个,Set:1,2,2,4那就是3个。对的啊
发表于 2015-09-17 13:23:44 回复(0)
list列表,有序可重复;set无序集合,不可重复。
发表于 2022-12-01 15:54:04 回复(0)
set集合无需不可重复,key覆盖了
发表于 2022-11-10 17:14:30 回复(0)