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;
}
}
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()); } } }
相关文章推荐
- java基础-- 集合框架 之 Set集合
- Java基础<十一>--->集合之List、Set
- 黑马程序员——JAVA基础之set集合
- Java集合List,Set,Map基础
- 黑马程序员 java基础之set集合
- Java基础之TreeSet集合使用泛型、比较器排序示例:
- 黑马程序员——java基础拾遗之集合框架(一) List 和 Set
- 黑马程序员————java基础--------集合之set接口的特点及应用
- 黑马程序员——Java基础—集合(Set、List)
- 十六、Java基础---------集合框架之Set
- 黑马程序员 java基础之TreeSet集合
- Java集合源码学习(9)_Set接口的基础实现AbstractSet
- JAVA基础学习之 Map集合、集合框架工具类Collections,Arrays、可变参数、List和Set集合框架什么时候使用等(4)
- 黑马程序员 java基础 集合框架之Set
- Java基础第十四天学习日记_集合、List集合、Set集合
- 黑马程序员_毕向东JAVA基础_集合(2)Collection&&List&&Set&&泛型
- 复习java基础第三天(集合:Collection、Set、HashSet、LinkedHashSet、TreeSet)
- java基础之集合Set
- Java基础视频教程第15天_集合之TreeSet、泛型
- 黑马程序员--java基础--集合框架Set,集合框架map