当前位置: 代码迷 >> J2SE >> 一段有趣的满载代码
  详细解决方案

一段有趣的满载代码

热度:96   发布时间:2016-04-23 20:22:44.0
一段有趣的重载代码
集合有 0 1 2 3 4 5 ,  本来的意图是去除0 1  2 ;
		Set<Integer> set = new HashSet<Integer>();
List<Integer> list = new ArrayList<Integer>();

for (int i = 0; i < 6; i++) {
set.add(i);
list.add(i);
}

for (int i = 0; i < 3; i++) {
set.remove(i);
list.remove(i);
}

System.out.println("removed set: "+set.toString());
System.out.println("removed list: "+list.toString());

------解决方案--------------------

for (int i = 0; i < 3; i++) {
set.remove(i);
list.remove(0);  //你指的有意思,是在说此处?
}

------解决方案--------------------

这样输出就很明显了
------解决方案--------------------



做了一些修改,可以了。

如果你要删除set,或者list里面的元素,最好用string座位其类型,这样不容易让JVM搞混淆了。

 list.remove(i);//因为你要删除的是int,而jvm不知道你需要删除的是值.
            在jdk中是这么定义remove方法的:

                \\\\\\\jvm将你的意思理解成了下面这种\\\\\\\\\
                public E remove(int index)
                移除此列表中指定位置上的元素。向左移动所有后续元素(将其索引减 1)。


                **********************实质上你想用的是下面这样的***********************

                public boolean remove(Object o)
                移除此列表中首次出现的指定元素(如果存在)。
                如果列表不包含此元素,则列表不做改动。
                更确切地讲,移除满足 (o==null ? get(i)==null : o.equals(get(i))) 的最低索引的元素(如果存在此类元素)。
                如果列表中包含指定的元素,则返回 true(或者等同于这种情况:如果列表由于调用而发生更改,则返回 true)。




import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * Created by Administrator on 2014/8/13.
 */
public class Test {
    public static void main(String[] args) {
        Set<Integer> set = new HashSet<Integer>();
        List<Integer> list = new ArrayList<Integer>();

        for (int i = 0; i < 6; i++) {
            set.add(i);
            list.add(i);
        }
        System.out.println("removed set: "+set.toString());
        System.out.println("removed list: "+list.toString());
        for (int i = 0; i < 3; i++) {
            System.out.println("----------- set: "+set.toString());
            System.out.println("------------ list: "+list.toString());
            set.remove(i);
            list.remove(new Integer(i));
            /*
            list.remove(i);//因为你要删除的是int,而jvm不知道你需要删除的是值.
            在jdk中是这么定义remove方法的:

                \\\\\\\jvm将你的意思理解成了下面这种\\\\\\\\\
                public E remove(int index)
                移除此列表中指定位置上的元素。向左移动所有后续元素(将其索引减 1)。


                **********************实质上你想用的是下面这样的***********************

                public boolean remove(Object o)
                移除此列表中首次出现的指定元素(如果存在)。
                如果列表不包含此元素,则列表不做改动。
  相关解决方案