java(20130802)Set:HashSet TreeSet、Map(接口):HashTable Hashmap、比较list set map

来源:互联网 发布:大屏幕控制软件 供应商 编辑:程序博客网 时间:2024/04/30 14:13

类 Collections:集合操作(collection接口下的集合)的工具类。

 

Set接口

父接口Collection

:一个不包含重复元素的 collection。更确切地讲,set 不包含满足 e1.equals(e2) 的元素对 e1 和 e2,并且最多包含一个null 元素。

实现类:

HashSet  TreeSet

 

HashSet

:此类实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持。它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用一个null 元素 

 

无序存放,根据散列码保存。

对象存放到集合中执行顺序:

首先hashcode(); 进行判,如果相等就euqals()方法,不等就将对象保存到集合中。

 

TreeSet:

使用元素的自然顺序对元素进行排序,或者根据创建 set时提供的Comparator 进行排序,具体取决于使用的构造方法。

 

对象有比较器:

内部比较器:类实现Comparable<Person>重写compareTo()方法

Eg

publicclass Personimplements Comparable<Person> {

    private String name;

    privateintage;

    private Stringschool;

    public Person(String name,int age,String school) {

       this.namename;

       this.age = age;

    }

    /**

     * 根据age的升序排列

     */

    @Override

    publicint compareTo(Person o) {

       System.out.println("compareTo:"+this.name+":"+(this.age-o.getAge())+":"+o.getName());

       //return 0;//表示两个对象是同一个对象

       returnthis.age-o.getAge();//表示两个对象

    }

    public String getName() {

       returnname;

    }

    publicvoid setName(String name) {

       this.name = name;

    }

    publicint getAge() {

       returnage;

    }

    publicvoid setAge(int age) {

       this.age = age;

    }

}

 

外部比较器:

Eg:

publicclass MyCompareimplements Comparator<Dog> {

    /**

     * 按age的升序排列

     */

    @Override

    publicint compare(Dog p1, Dog p2) {

    System.out.println("out :compareTo:"+p1.getName()+":"+(p1.getAge()-p2.getAge())+":"+p2.getName());

       return (p1.getAge()-p2.getAge());

    }

}

 

 

publicclass Dog {

    private Stringname;

    privateintage;

    public Dog(String name,int age) {

       this.name = name;

       this.age = age;

    }

    public String getName() {

       returnname;

    }

    publicvoid setName(String name) {

       this.name = name;

    }

    publicint getAge() {

       returnage;

    }

    publicvoid setAge(int age) {

        this.age = age;

    }

}

 

 

 

    publicstaticvoid main(String[] args) {

       Set<Dog> ds = new TreeSet<Dog>(new MyCompare());

       Dog d1 = new Dog("xiaohua", 9);

       Dog d2 = new Dog("xiaohei", 8);

       Dog d3 = new Dog("xiaobai", 7);

       Dog d4 = new Dog("xiaohuauang", 6);

       ds.add(d1);

       ds.add(d2);

       ds.add(d3);

       ds.add(d4);

       for(Dog d:ds){

           System.out.println(d.getName()+":"+d.getAge());

       }

    }

 

 

 


Map(接口)

HashTable

Hashmap

将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。

 

HashTable:

Hashtable 一个键值对应集合,存入相同键后边存入元素会覆盖之前元素,它是一个线程安全且无序。不允许null键和null值。

 

HashMap:

HashMap一个键值对应集合,存入相同键后边存入元素会覆盖之前元素,它是一个非线程安全且无序。允许一个null键和多个null值。

 


比较list set map

1. list set都是实现collection接口,map是一个根接口

2. list有序 set无序 map无序

3. list(arraylist,linkedlist,vector)可以存放重复元素

arraylist:顺序存储非线程安全的

linkedlist:双向链表非线程安全的

vector:顺序存储线程安全的

4. set(hashset,treeset)不能存放重复元素

hashset:先执行对象的hashcode方法,如果hashcode相等就执行equals方法,equals返回false存入,反之不存。Hashcode不相等就直接存入。

Treeset:需要内部比较器或者外部比较器

内部比较器:对象类型必须实现comparable接口实现compareto方法

外部比较器:自定义比较器:实现comparator接口实现compare方法

Set<Dog> ds = new TreeSet<Dog>(new 自定义比较器());

5. map(hashtable,hashmap):键值对应的

hashtable: 一个键值对应集合,存入相同键后边存入元素会覆盖之前元素,它是一个线程安全且无序。不允许null键和null值。

HashMap:一个键值对应集合,存入相同键后边存入元素会覆盖之前元素,它是一个非线程安全且无序。允许一个null键和多个null值。

 

 

原创粉丝点击