------- android培训、java培训、期待与您交流! ---------
Collection
|--List:元素是有序的,元素可以重复,因为该集合体系有索引。
|--ArrayList:底层的数据结构使用数组结构。特点:查询速度很快。但是增删稍慢。线程不同步。
|--LinkedList:底层使用的是链表数据结构。特点:增删的速度很快,查询速度稍慢。
|--Vector:底层是数组数据结构。和ArrayList功能相同,线程同步,被ArrayList替代。
注:ArrayList是可变长度数组默认10个容量,超过时50%延长,而Vector是100%延长
|--Set:元素是无序的,元素不可以重复。set集合的功能和Collection一样。
|--HashSet:底层数据结构是哈希表。线程是非同步的。
HashSet是如何保证元素唯一性的呢?
是通过元素的两个方法,hashCode和equals是否为true。
如果元素的hashcode值不同,不会调用equals
注意:对于判断元素是否存在,以及删除等操作,以来的方法是元素的hashcode和equals方法。
保证元素唯一性的一句:compareTo方法return 0。
TreeSet排序的第一种方式: 让元素自身具备比较性,
元素需要实现Comparable接口,覆盖compareTo方法。
这种方式也成为元素的自然顺序,或者叫做默认顺序。
TreeSet集合的第二种排序方式。
当元素自身不具备比较性时,或者据诶的比较性不是所需要的。
这时需要让集合自身具备比较性。
在集合初始化时,就有了比较方式。
- import java.util.*;
- class HashSetDemo
- {
- public static void main(String[] args)
- {
- HashSet hs = new HashSet();
- hs.add(new Person("a1",11));
- hs.add(new Person("a2",12));
- hs.add(new Person("a3",13));
- hs.add(new Person("a4",14));
- Iterator it = hs.iterator();
- while(it.hasNext())
- {
- Person p = (Person)it.next();
- sop(p.getName()+",,,,"+p.getAge());
- }
- //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- TreeSet ts = new TreeSet();
- ts.add(new Person("lisi01",22));
- ts.add(new Person("lisi02",20));
- ts.add(new Person("lisi03",21));
- ts.add(new Person("lisi04",19));
- ts.add(new Person("lisi06",19));
- Iterator it1 = ts.iterator();
- while(it1.hasNext())
- {
- Person p = (Person)it1.next();
- sop(p.getName()+".."+p.getAge());
- }
- //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- TreeSet ts1 = new TreeSet(new MyCompare());
- ts1.add(new Person("lisi11",22));
- ts1.add(new Person("lisi12",30));
- ts1.add(new Person("lisi13",41));
- ts1.add(new Person("lisi14",39));
- ts1.add(new Person("lisi16",29));
- Iterator it2 = ts1.iterator();
- while(it2.hasNext())
- {
- Person p2 = (Person)it2.next();
- sop(p2.getName()+".."+p2.getAge());
- }
- }
- public static void sop(Object obj)
- {
- System.out.println(obj);
- }
- }
- class Person implements Comparable//该接口强制让人具备比较性。
- {
- private String name;
- private int age;
- Person(String name,int age)
- {
- this.name=name;
- this.age=age;
- }
- public String getName()
- {
- return name;
- }
- public int getAge()
- {
- return age;
- }
- public int compareTo(Object obj)
- {
- if(!(obj instanceof Person))
- throw new RuntimeException();
- Person p = (Person)obj;
- if(this.age>p.age)
- return 1;
- if(this.age==p.age)
- {
- return this.name.compareTo(p.name);
- }
- return -1;
- }
- }
- class MyCompare implements Comparator
- {
- public int compare(Object o1,Object o2)
- {
- Person s1 = (Person)o1;
- Person s2 = (Person)o2;
- int num = s1.getName().compareTo(s2.getName());
- if(num==0)
- {
- return new Integer(s1.getAge()).compareTo(new Integer(s2.getAge()));
- }
- return num;
- }
- }