java集合Set的应用(HashSet、Tree…
2013-09-18 14:22
465 查看
集合存放的都是对象的引用。
Collection:
|——List
|--Set
|--HashSet:无序、无角标、不能存重复的元素;底层采用哈希表数据结构,通过哈希值来确定元素的位置,保证元素的唯一性是通过hashCoode方法
和equals方法来完成的。当哈希值不相同时,不需要判断equals方法,只要当哈希值相同的,菜判断equals方法,equals放回false,则在哈希表顺延存贮.
|--TreeSet:可以对集合中的元素进行排序.采用二叉树数据结构,大的放到树的右边,小的放左边.
排序方式一:让元素自己身具备比较性。实现Comparable的compareTo方法来排序,如果该方法始终返回正数,则输出的顺序跟存入的顺序一致;
如果始终返回负数,则为倒序;如果始终返回0,则只能存一个对象(保证元素的唯一性).一般而言,在此方法中,
都需要先判断主要条件,在判断次要条件进行排序。
当元素自身不具备比较性或者元素自身具备的比较性并不是所需要的,这是就需要第二种排序方式.
排序方式二:让容器一初始化就具备比较性.这时就要用到比较器:Comparator接口,只要声明一个类来实现这个接口,并覆盖它的compare方法,我们就
可以利用TreeSet的构造函数 TreeSet(Comparator<? super
E> comparator) 让其一初始化就有了比较性.
注意:当TreeSet中的对象具备了可比性(实现了Comparable接口,方式一),而集合本身也具备可比性(方式二),则以方式二为主.
|--...
import java.util.*;
class HashSetDemo
{
public static void main(String[] args)
{
//****HashSet Demo****
HashSet hs = new
HashSet();
hs.add(new Student("zhangsan",
20));
hs.add(new Student("lisi",
25));
hs.add(new Student("lisi",
25));
for (Iterator it =
hs.iterator(); it.hasNext(); )
{
System.out.println(it.next());
}
//****TreeSet
Demo排序方式一****
TreeSet ts = new
TreeSet();
ts.add(new Person("zhangsan",
20));
ts.add(new Person("lisi",
25));
ts.add(new Person("wangwu",
22));
ts.add(new Person("zhouliu",
15));
ts.add(new Person("zhaoqi",
25));
for (Iterator it =
ts.iterator(); it.hasNext(); )
{
System.out.println(it.next());
}
****TreeSet
Demo排序方式二****
TreeSet ts1 = new TreeSet(new
PsCompare());
ts1.add(new Person1("zhangsan",
20));
ts1.add(new Person1("lisi",
25));
ts1.add(new Person1("wangwu",
22));
ts1.add(new Person1("zhouliu",
15));
ts1.add(new Person1("zhaoqi",
25));
for (Iterator it =
ts1.iterator(); it.hasNext(); )
{
System.out.println(it.next());
}
}
}
//*****************HashSet*********************
class Student
{
private String name;
private int age;
Student(String name, int age)
{
this.name = name;
this.age = age;
}
public int hashCode()
{
System.out.println(this.name+"...hashCode
run");
return name.hashCode() +
age*28;
}
public boolean equals(Object obj)
{
System.out.println(this.name+"...equals
run");
Student p = (Student)obj;
return this.name.equals(p.name)
&& this.age == p.age;
}
//public String toString()
//{
//return
"name="+this.name+",age="+this.age;
//}
}
//*****************TreeSet 排序方式一***********************
class Person implements Comparable
{
private String name;
private int age;
Person(String name, int age)
{
this.name = name;
this.age = age;
}
public String toString()
{
return
"name="+this.name+",age="+this.age;
}
public int compareTo(Object
obj)
//实现Comparable的compareTo方法.通常需要判断条件的主次,
//先判断主要条件,在判断次要条件.
{
//return 2;
//有序的输出,顺序跟录入的顺序一致.
//return -2; //倒序输出.
//return 0; //只能存贮一个对象.
Person p = (Person)obj;
if (this.age >
p.age) //正数————主要条件.
return
1;
if (this.age ==
p.age) //零 ____:怎么实现年龄相同就按照姓名来进行排序呢?
{
int num =
this.name.compareTo(p.name); //————次要条件
if (num
> 0)
return
1;
if (num ==
0)
return
0;
return
-1;
//或者优化写成:
//return
this.name.compareTo(s.name);
}
return -1;
}
}
//*****************TreeSet 排序方式二***********************
class PsCompare implements Comparator
{
public int compare(Object ob1, Object
ob2)
{
Person1 ps1 =
(Person1)ob1;
Person1 ps2 =
(Person1)ob2;
if (ps1.getAge()
> ps2.getAge())
return
1;
else if (ps1.getAge() ==
ps2.getAge())
return
ps1.getName().compareTo(ps2.getName());
return -1;
}
}
class Person1
{
private String name;
private int age;
Person1(String name, int age)
{
this.name = name;
this.age = age;
}
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
public String toString()
{
return
"name="+this.name+",age="+this.age;
}
}
Collection:
|——List
|--Set
|--HashSet:无序、无角标、不能存重复的元素;底层采用哈希表数据结构,通过哈希值来确定元素的位置,保证元素的唯一性是通过hashCoode方法
和equals方法来完成的。当哈希值不相同时,不需要判断equals方法,只要当哈希值相同的,菜判断equals方法,equals放回false,则在哈希表顺延存贮.
|--TreeSet:可以对集合中的元素进行排序.采用二叉树数据结构,大的放到树的右边,小的放左边.
排序方式一:让元素自己身具备比较性。实现Comparable的compareTo方法来排序,如果该方法始终返回正数,则输出的顺序跟存入的顺序一致;
如果始终返回负数,则为倒序;如果始终返回0,则只能存一个对象(保证元素的唯一性).一般而言,在此方法中,
都需要先判断主要条件,在判断次要条件进行排序。
当元素自身不具备比较性或者元素自身具备的比较性并不是所需要的,这是就需要第二种排序方式.
排序方式二:让容器一初始化就具备比较性.这时就要用到比较器:Comparator接口,只要声明一个类来实现这个接口,并覆盖它的compare方法,我们就
可以利用TreeSet的构造函数 TreeSet(Comparator<? super
E> comparator) 让其一初始化就有了比较性.
注意:当TreeSet中的对象具备了可比性(实现了Comparable接口,方式一),而集合本身也具备可比性(方式二),则以方式二为主.
|--...
import java.util.*;
class HashSetDemo
{
public static void main(String[] args)
{
//****HashSet Demo****
HashSet hs = new
HashSet();
hs.add(new Student("zhangsan",
20));
hs.add(new Student("lisi",
25));
hs.add(new Student("lisi",
25));
for (Iterator it =
hs.iterator(); it.hasNext(); )
{
System.out.println(it.next());
}
//****TreeSet
Demo排序方式一****
TreeSet ts = new
TreeSet();
ts.add(new Person("zhangsan",
20));
ts.add(new Person("lisi",
25));
ts.add(new Person("wangwu",
22));
ts.add(new Person("zhouliu",
15));
ts.add(new Person("zhaoqi",
25));
for (Iterator it =
ts.iterator(); it.hasNext(); )
{
System.out.println(it.next());
}
****TreeSet
Demo排序方式二****
TreeSet ts1 = new TreeSet(new
PsCompare());
ts1.add(new Person1("zhangsan",
20));
ts1.add(new Person1("lisi",
25));
ts1.add(new Person1("wangwu",
22));
ts1.add(new Person1("zhouliu",
15));
ts1.add(new Person1("zhaoqi",
25));
for (Iterator it =
ts1.iterator(); it.hasNext(); )
{
System.out.println(it.next());
}
}
}
//*****************HashSet*********************
class Student
{
private String name;
private int age;
Student(String name, int age)
{
this.name = name;
this.age = age;
}
public int hashCode()
{
System.out.println(this.name+"...hashCode
run");
return name.hashCode() +
age*28;
}
public boolean equals(Object obj)
{
System.out.println(this.name+"...equals
run");
Student p = (Student)obj;
return this.name.equals(p.name)
&& this.age == p.age;
}
//public String toString()
//{
//return
"name="+this.name+",age="+this.age;
//}
}
//*****************TreeSet 排序方式一***********************
class Person implements Comparable
{
private String name;
private int age;
Person(String name, int age)
{
this.name = name;
this.age = age;
}
public String toString()
{
return
"name="+this.name+",age="+this.age;
}
public int compareTo(Object
obj)
//实现Comparable的compareTo方法.通常需要判断条件的主次,
//先判断主要条件,在判断次要条件.
{
//return 2;
//有序的输出,顺序跟录入的顺序一致.
//return -2; //倒序输出.
//return 0; //只能存贮一个对象.
Person p = (Person)obj;
if (this.age >
p.age) //正数————主要条件.
return
1;
if (this.age ==
p.age) //零 ____:怎么实现年龄相同就按照姓名来进行排序呢?
{
int num =
this.name.compareTo(p.name); //————次要条件
if (num
> 0)
return
1;
if (num ==
0)
return
0;
return
-1;
//或者优化写成:
//return
this.name.compareTo(s.name);
}
return -1;
}
}
//*****************TreeSet 排序方式二***********************
class PsCompare implements Comparator
{
public int compare(Object ob1, Object
ob2)
{
Person1 ps1 =
(Person1)ob1;
Person1 ps2 =
(Person1)ob2;
if (ps1.getAge()
> ps2.getAge())
return
1;
else if (ps1.getAge() ==
ps2.getAge())
return
ps1.getName().compareTo(ps2.getName());
return -1;
}
}
class Person1
{
private String name;
private int age;
Person1(String name, int age)
{
this.name = name;
this.age = age;
}
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
public String toString()
{
return
"name="+this.name+",age="+this.age;
}
}
相关文章推荐
- java基础33 Set集合下的HashSet集合和TreeSet集合
- java--集合框架的Hashset和Treeset
- Java常见集合框架(十):Set之TreeSet、HashSet
- 小小的总结一下java异常处理和List、ArrayList、Vector、Set、HashSet、TreeSet集合的简单应用
- Java中HashSet和TreeSet集合的本质
- Java数据结构与算法之数据结构-逻辑结构-集合(七)------集合之Set接口和HashSet和TreeSet、LinkedHashSet实现类总结
- java基础—自定义一个比较器,对TreeSet 集合中的元素按指定方法来排序(java集合六)
- Java集合之TreeSet
- 【Java_集合框架Set】HashSet、LinkedHashSet、TreeSet使用区别
- Java框架集合-Set(HashSet)
- Java核心API -- 6(Collection集合List、Set、ArrayList、HashSet)
- java 集合学习笔记3-HashSet TreeSet
- JAVA学习第三十六课(经常使用对象API)— Set集合:HashSet集合演示
- 理解Java集合(二)Set : HashSet/TreeSet
- java基础集合之TreeSet练习2(带答案)
- Java Set集合之Treeset
- Java基础知识强化之集合框架笔记44:Set集合之TreeSet保证元素唯一性和自然排序的原理和图解
- Java--集合(Set:HashSet,TreeSet)
- java学习笔记:集合框架之TreeSet
- java集合——树集(TreeSet)+对象的比较