您的位置:首页 > 编程语言 > Java开发

java基础.集合.Set.初识

2017-03-01 13:52 281 查看
set:元素无序(存入与取出的顺序不一定一致),而且元素不可以重复

   

   set集合的功能与collection一致

           常见的子类:

           

           HashSet:底层结构为哈希表//保证元素唯一性的原理是:当哈希值重复时,再判断位置是否一样,(如果一样)再判断是否是同一个对象

           
hashset是通过元素的两个方法,hashcode(先)和equals(如果hash相同的话)来完成的


可以通过定义类时重新类中的以上几个函数,这样得到自己想要的比较方法

class Person{
private String name;
private int age;
Person(String name,int age)
{
this.name = name;
this.age = age;
}
public int hashCode(){
return name.hashCode()+age*27;
}
public boolean equals(Object obj){
if(!(obj instanceof Person)){
return false;
}
Person p = (Person)obj;
return (p.name.equals(this.name) && this.age == p.age);
}
public String getname()
{
return this.name;
}
public int getage()
{
return this.age;
}
TreeSet :底层使用的是二叉树

           

可以对set集合中的元素进行排序(默认是asll表)

           

证明唯一性:comapreTo方法return 0

           

Treeset:

           

排序的第一种方式:让元素自身具有比较性

           

元素需要实现comparable接口,覆盖compareTo方法

           

叫做自然顺序,有叫做默认顺序

           

排序的第二种方式:让集合自身具备比较性,利用比较器比较

           

定义比较器:实现comparator接口

TreeSet构造函数什么都不传, 默认按照类中Comparable的顺序(没有就报错
ClassCastException)


TreeSet如果传入Comparator, 就优先按照Comparator







class Mycom implements Comparator//定义一个比较器
{
public int compare(Object o1,Object o2)
{
Person p1 = (Person)o1;
Person p3 = (Person)o2;
return p1.getname().compareTo(p3.getname());
}
}
class Person implements Comparable//该接口强制让人具备比较性
{
private String name;
private int age;
Person(String name,int age)
{
this.name = name;
this.age = age;
}
public int compareTo(Object obj)
{
if(!(obj instanceof Person))
{
throw new RuntimeException("不是人对象");

}
Person p =(Person)obj;
if(this.age>p.age){

return 1;
}
else if (this.age==p.age){
return (this.name.compareTo(p.name));

}
return -1;
}

public String getname()
{
return this.name;
}
public int getage()
{
return this.age;
}
}
public class Jihe3 {
public static void main(String[] args)
{
TreeSet tr = new TreeSet(new Mycom());//创建一个比较器对象
tr.add(new Person("lisi1", 2));
tr.add(new Person("lisi3", 22));
tr.add(new Person("lisi2", 24));
tr.add(new Person("lisi6", 22));
Iterator it = tr.iterator();
while(it.hasNext())
{
Person p =(Person)it.next();
System.out.println(p.getage()+"……………………"+p.getname());
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: