java中set和list的区别

如题所述

Collection 的子接口 Set,List

一: Set 不允许重复,List允许重复 

二: Set 无序,List有序 .

这里的无序和有序, 是说的添加顺序和元素顺序的一致性. 

比如添加时是obj1,obj2,obj3 ,那么list存储他们的顺序就是obj1,obj2,obj3

而set集合的存储顺序就不一定了,可能是obj2,obj1,obj3


Set和List的参考代码

import java.util.ArrayList;
import java.util.HashSet;
import java.util.TreeSet;



class Student implements Comparable<Student>{//实现Comparable接口
int number;//学号
String name;//姓名
//重写toString方法
public String toString() {
//return "{number:"+number+",name:"+name+"}";
return name;//为简单明了,只返回姓名
}
//无参数构造器
public Student() {
}
//有参数构造器
public Student(int number,String name) {
this.number=number;
this.name = name;
}
//重写equals方法
@Override
public boolean equals(Object obj) {
if(obj==null||obj instanceof Student) {
return false;
}
Student s = (Student) obj;

return s.number==this.number;//如果学号一样. 就认为是同一个学生
}
@Override
public int compareTo(Student o) {
return this.number-o.number;//根据学号排序
}
}
public class Test{
public static void main(String[] args) {
Student st1 = new Student(2,"Paul");
Student st2 = new Student(3,"Jack");
Student st3 = new Student(1,"Lucy");

ArrayList<Student> list = new ArrayList<Student>();
list.add(st1);
list.add(st2);
list.add(st3);
System.out.println(list);//[Paul, Jack, Lucy] 和添加顺序一致
HashSet<Student> set = new HashSet<Student>();
set.add(st1);
set.add(st2);
set.add(st3);
System.out.println(set);//[Paul, Lucy, Jack]//和添加顺序不一致

TreeSet<Student> set2 = new TreeSet<Student>();//Student实现了Comparable接口的compareTo方法, 可以保证顺序安装指定的顺序排列
set2.add(st1);
set2.add(st2);
set2.add(st3);
System.out.println(set2);//[Lucy, Paul, Jack] 和学号的大小排列一致

}
}

输出

[Paul, Jack, Lucy]
[Paul, Lucy, Jack]
[Lucy, Paul, Jack]

温馨提示:答案为网友推荐,仅供参考
相似回答