码迷,mamicode.com
首页 > 其他好文 > 详细

day18天

时间:2015-08-04 22:22:49      阅读:97      评论:0      收藏:0      [点我收藏+]

标签:

Set集合

Set 接口的特点就是:

1,        不包含重复的元素;

2,        没有索引

3,        无序的集合(存储和取出是无序的)

它的下边有两个小弟:

Hashset 和treeset

哈希值:

说道哈希那就一定要从哈希值开始说起,这个底层是一个算法,他会给每个对象一个十进制的数.就像人的身份证号码一样.

 

1,hashset:

Set的子类HashSet的底层是hashmap

特点:底层是个哈希表结构,依靠对象的哈希值;

线程不安全,运行的速度快.

集合为了保证自己的唯一性,他依靠对象自己的哈希值和equals方法;要求存储到集合中的对象自己必须实现hashcode 和equals方法.

 

哈希表的具体的存储过程:

1,调用存储方法,hashcode 获得对象的哈希值(得到一个十进制的数字)

2,如果这个值没有出现过就把这个值放在十进制的下边,如果这个值出现过那么久吧后来出现的对象调用自己的equals方法把已经有的对象当做参数传递进来,做比较.

那么只有两种结果:equals返回的是true:获得对象的hashcode,判断是同一个对象那么久不存储了.

如果返回来的是个false,就让后来的这个对象记录前一个对象的地址,挂靠在前一个的后边.

Eg:一个person类重写hashcode:

//前提是必须有成员变量,name,age

Public int hashcode(){

return name,hashcode()+age;

}

Eg:重写equals方法:

Public double equals(Object obj){

      //判断是否为空

If(p!=0);

                 Return false;

//判断

If(this==obj);

Return true;

 

//判断是否属于父类

If(obj instendsof Person){

//强转

      Person p = (person)obj;

//本类中的对象和传递进来的对象相比较,并且判断年龄是否相等

Return( this.name).equal (p.name)&& this.age == p.age;

}

Return false;

}

 

 

treeSet:

特点:

1,底层是map

2,可以对线程进行排序

3,线程不安全,运行速度快

排序的方式有两种:   

1,使用元素的自然顺序进行排序,comparable接口(java.ang包下边的)

2,可以使用比较器comprator(java.util包下的)

 

TreeSet的构造方法

TreeSet (compare<?>compare)  根据指定的构造器进行排序

 

他的底层是个红黑树(也称为二叉数组)

每个节点上都有两个元素

正数往右,负数往左  零不往里边存

 

day18天

标签:

原文地址:http://www.cnblogs.com/elevenliu/p/4703092.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!