关于集合SET的一个问题。 set集合 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你的写法等同于下面的 Set<Integer> set = new HashSet<Integer>();// Integer i1 = 45;// Integer i2 = 46; set.add(45); set.add(46); System.out.println(set.size());// set.remove(45); System.out.println(set.size());// for (Integer integer : set) { System.out.println("i2 = " + integer); // }// i2 = 47; set.remove(47); for (Integer integer : set) { System.out.println("i2 = " + integer); } System.out.println(set.size());// 嗯,同上。主要问题在后面的i2= 47,Integer 是基本数据类型。是值传递,所以变量改变,值是不会变的。removed也是removed的值 你虽然给i2变量重新赋值47,但是你没有add到set集合中,set集合是面的值还是46,你remove(47),但set中没有这个值,所以两次for循环输出的都是46 你的i2 = 47;不会改变原先的值,而是new了一个新的Integer。LZ可以自定义一个数值类:class MyInteger{ public int value;}然后再i2.value = 47;应该可以实现你的效果。 public static void main(String[] args) { Set<Integer> set = new HashSet<Integer>(); Integer i1 = 45; Integer i2 = 46; set.add(i1);//加入45 set.add(i2);//加入46 System.out.println(set.size());//集合中有45,46 size = 2 set.remove(i1);//移除46 System.out.println(set.size());//集合中只有46了 size =1 for (Integer integer : set) {// System.out.println("i2 = " + integer); // } i2 = 47;//变量赋值47 set.remove(i2);//移除47 ,集合中不存在, for (Integer integer : set) {//由于新的i2变量值没有加入集合,所以集合还是 46 System.out.println("i2 = " + integer); } System.out.println(set.size());//集合中还是46 size =1 } 简而言之,基本类型和其对应的引用类型外加字符串String 这17种在Java中是值传递的而非引用传递 只是把值47传给了i2 并没有修改set中的值(引用)。 详细看这篇文章就可以了:http://blog.csdn.net/enson16855/article/details/8753639 你要明白HashSet的底层其实是HashTable实现的。。还有hashcode和equals方法,文章说的比较详细,看源码就知道了的~ 一个简单的jsp验证问题 字符数组去空格不抱异常怎么解决? [请斑竹进来一下]好好的回复为什么不允许? 问个问题啊 JAVA多线程问题 急救:在java中如何通过制作的按钮按下的时候还原最下化的窗口?? 如何读取XML中节点的属性值,高手帮忙,谢谢大家了,工作中,急用啊,多谢了。 求将"d:\file.txt"转成"d:/file.txt"最好的方法! 我到底该怎样才可以将显示在html页面中的表格的一行数据取出来呢? 紧急求救,关于Properties,如何改变一个key的值! 很想知道jvm如何解决java循环引用的问题。 关于java“求一个月有几天”的demo,但实现不了。求解释
// Integer i1 = 45;
// Integer i2 = 46;
set.add(45);
set.add(46);
System.out.println(set.size());//
set.remove(45);
System.out.println(set.size());//
for (Integer integer : set) {
System.out.println("i2 = " + integer); //
}
// i2 = 47;
set.remove(47);
for (Integer integer : set) {
System.out.println("i2 = " + integer);
}
System.out.println(set.size());//
主要问题在后面的i2= 47,Integer 是基本数据类型。是值传递,所以变量改变,值是不会变的。removed也是removed的值
class MyInteger{
public int value;
}然后再i2.value = 47;
应该可以实现你的效果。
Set<Integer> set = new HashSet<Integer>();
Integer i1 = 45;
Integer i2 = 46;
set.add(i1);//加入45
set.add(i2);//加入46
System.out.println(set.size());//集合中有45,46 size = 2
set.remove(i1);//移除46
System.out.println(set.size());//集合中只有46了 size =1
for (Integer integer : set) {//
System.out.println("i2 = " + integer); //
}
i2 = 47;//变量赋值47
set.remove(i2);//移除47 ,集合中不存在,
for (Integer integer : set) {//由于新的i2变量值没有加入集合,所以集合还是 46
System.out.println("i2 = " + integer);
}
System.out.println(set.size());//集合中还是46 size =1
}