import java.util.*;
public class Test {
public static void main(String[] args) {
Set<Integer> set = new TreeSet<Integer>();
List<Integer> list = new ArrayList<Integer>();
for(int i=-3; i<3; i++) {
set.add(i);
list.add(i);
}
System.out.println(set);
System.out.println(list);
for(int i=0; i<3; i++) {
set.remove(i);
list.remove(i);
}
System.out.println(set);
System.out.println(list);
}
}
上面是原程序,我运行后。
结果是:
[-3, -2, -1, 0, 1, 2]
[-3, -2, -1, 0, 1, 2]
[-3, -2, -1]
[-2, 0, 2]
TreeSet和ArrayList有什么区别啊?   set中是remove掉了“i"这个对象; 而list中是remove掉了i为索引的那个值这个我清楚,可List和Set这方面区别是啥?  多谢。

解决方案 »

  1.   

    set应该没有问题吧?
    TreeSet    public boolean remove(Object o) {
    return m.remove(o)==PRESENT;
        }ArrayList:    public E remove(int index) {
    RangeCheck(index); modCount++;
    E oldValue = elementData[index]; int numMoved = size - index - 1;
    if (numMoved > 0)
        System.arraycopy(elementData, index+1, elementData, index,
         numMoved);
    elementData[--size] = null; // Let gc do its work return oldValue;
        }
        public boolean remove(Object o) {
    if (o == null) {
                for (int index = 0; index < size; index++)
    if (elementData[index] == null) {
        fastRemove(index);
        return true;
    }
    } else {
        for (int index = 0; index < size; index++)
    if (o.equals(elementData[index])) {
        fastRemove(index);
        return true;
    }
            }
    return false;
        }
    你看看这里是用了哪个方法就明白了。
    list remove掉索引0,原来的索引为1的变成索引0,然后再remove掉现在索引1(原来的索引2)
    ……
      

  2.   

    这个贴里有答案
    http://topic.csdn.net/u/20081022/22/41182840-384f-471b-a8fe-c784bd6c4f82.html
      

  3.   

    set只有remove(Object o)方法 而list又remove(int  index)和remove(Object o)两个方法,所以set只能对i进行自动装箱后和set中得元素比较符合条件后则删除,而list则执行了remove(int index)方法 是两个完全不同得方法 至于为什么执行这个方法而没有执行remove(Object o)方法是因为你传得参数是int类型,java有符合条件得方法所以不会自动将其进行装箱成Object对象 
      

  4.   

    List 有序可重复
    Set 无序不可重复
    注:重复可能需要重写equal和hashcode方法
      

  5.   

    set指向treeset所以它保存的数据是有序的并且没有重复数据;
    list保存的元素是可以重复的并且是无序的
      

  6.   

    List和Set这方面区别:Set:不能包含重复的元素。SortedSet是一个按照升序排列元素的Set。List:是一个有序的集合,可以包含重复的元素。提供了按索引访问的方式。TreeSet:底层结构为tree的一种有序(ordered)Set。这么一来你便可以自Set中萃取出一个带次序性的序列(ordered squence)ArrayList:底层采用数组完成,我们可以将其看作是能够自动增长容量的数组。
      

  7.   

    set里的remove(Object o) 方法,如果 set 中存在指定的元素,即o这个元素,则将其移除。而Arraylist里面有两个remove方法,根据根据匹配原则它会选择第一个,所以它移除的并不是整型对象0,1,2,而是将0,1,2位置上的元素移除。
    remove(int index) ,移除此列表中指定位置上的元素。
    remove(Object o) 从此列表中移除指定元素的单个实例(如果存在),此操作是可选的。希望我说清楚了!
      

  8.   

    什么公司出的题目啊
    完全考api
    没什么技术含量
      

  9.   

    public class Test {
    public static void main(String[] args) {
    Set<Integer> set = new TreeSet<Integer>();
    List<Integer> list = new ArrayList<Integer>();
    for (int i = -3; i < 3; i++) {
    set.add(i);
    list.add(i);
    System.out.println("i=" + i + "时   set添加为" + set);
    System.out.println("i=" + i + "时  list添加为" + list);
    }
    System.out.println("==================");
    System.out.println("set最后结果是 :" + set);
    System.out.println("list最后结果是 :" + list);
    System.out.println("==================");
    for (int i = 0; i < 3; i++) {
    set.remove(i);
    list.remove(i);
    System.out.println("i为 " + i + "时 set中删除的元素为 :" + i);
    System.out.println("i为 " + i + "时 list中要删除元素的索引为 :" + i);
    }
    System.out.println("==================");
    System.out.println("set的最后结果是" + set);
    System.out.println("list的最后结果是" + list);
    System.out.println("==================");
    }
    }
    i=-3时   set添加为[-3]
    i=-3时  list添加为[-3]
    i=-2时   set添加为[-3, -2]
    i=-2时  list添加为[-3, -2]
    i=-1时   set添加为[-3, -2, -1]
    i=-1时  list添加为[-3, -2, -1]
    i=0时   set添加为[-3, -2, -1, 0]
    i=0时  list添加为[-3, -2, -1, 0]
    i=1时   set添加为[-3, -2, -1, 0, 1]
    i=1时  list添加为[-3, -2, -1, 0, 1]
    i=2时   set添加为[-3, -2, -1, 0, 1, 2]
    i=2时  list添加为[-3, -2, -1, 0, 1, 2]
    ==================
    set最后结果是 :[-3, -2, -1, 0, 1, 2]
    list最后结果是 :[-3, -2, -1, 0, 1, 2]
    ==================
    i为 0时 set中删除的元素为 :0
    i为 0时 list中要删除元素的索引为 :0  //[-3, -2, -1, 0, 1, 2]索引为0的数是-3 剩下结果为[-2, -1, 0, 1, 2]
    i为 1时 set中删除的元素为 :1
    i为 1时 list中要删除元素的索引为 :1  //[-2, -1, 0, 1, 2]索引为1的数是-1 剩下结果为[-2, 0, 1, 2]
    i为 2时 set中删除的元素为 :2
    i为 2时 list中要删除元素的索引为 :2  //[-2, 0, 1, 2]索引为2的数是1 剩下结果为[-2, 0, 2]
    ==================
    set的最后结果是[-3, -2, -1]
    list的最后结果是[-2, 0, 2]
    ==================
      

  10.   

     原以为我把集合类都搞懂了
     今天一看,靠……我TMD还是半桶水!!!!!
     谢谢此贴,要是碰上了这题面试,我肯定做错!!! 哦弥陀哦佛!!!!!、
    工作,工作工作,工作工作,工作工作,工作工作,工作工作,工作工作,工作工作,工作工作,工作工作,工作工作,工作工作,工作工作,工作工作,工作工作,工作工作,工作工作,工作工作,工作工作,工作工作,工作
      

  11.   

    TreeSet 内部是用Red-Black Tree实现的
    ArrayList 内部是用数组实现的
      

  12.   

    这个看的最清楚了!!!我再总结两句:
    例如我们现在remove掉i=0时的数据
    set remove的是值.也就是说,会在结合里找到"0",并将其删除.
    list remove的是索引对应的值,就是会将索引为0的那个元素删除.
      

  13.   

    也是set与list的区别吧
    不过没什么劲啊
      

  14.   

    set 是根据object remove
    list 是根据 index remove
      

  15.   

    Set是无序的,不可以重复的,
    而List是有序的,可以重复的