不同数据结构判断元素是否相同的比较原理arraylist equalshashset hashCode equalstreeset 自定义比较器的compare的return 0 或是元素自身的compareTo的rutren 0treeset的看下面的例子class TreeSetDemo3 {public static void main(String[] args) {TreeSet ts = new TreeSet(new StudentComparatorByName());//比较器 //TreeSet ts = new TreeSet();//元素自身ts.add(new Student("lisi0",30));ts.add(new Student("lisixx",29));ts.add(new Student("lisi9",29));ts.add(new Student("lisi8",38));ts.add(new Student("lisixx",29));ts.add(new Student("lisi4",14));//ts.add(new Student(39));ts.add(new Student("lisi7",27));System.out.println(ts);}}class StudentComparatorByName implements Comparator{public int compare(Object o1,Object o2){Student s1 = (Student)o1;Student s2 = (Student)o2;int num = s1.getName().compareTo(s2.getName());return num==0?new Integer(s1.getAge()).compareTo(new Integer(s2.getAge())):num;}}//同姓名同年龄的学生视为同一个学生。按照学生的年龄排序。class Student implements Comparable{private int age;private String name;Student(String name,int age){this.age = age;this.name = name;}public int compareTo(Object obj){Student stu = (Student)obj;int num = new Integer(this.age).compareTo(new Integer(stu.age));return num==0?this.name.compareTo(stu.name):num;/*if(this.age>stu.age)return 1;if(this.age==stu.age)return this.name.compareTo(stu.name);return -1;*//**/}public int getAge(){return age;}public String getName(){return name;}public String toString(){return name+"::"+age;}}1:对象不能被多个线程同时操作,那么此对象线程不安全。 hashMap线程不安全,hashTable对象线程安全,但多个线程分别调用hashTable的iterator()方法,得到Iterator对象后, 不再支持其他线程更改Iterator对象结构。2:ArrayList不是线程安全的,如果想在并发中实现线程安全,可以使用CopyOnWriteArrayList类。