TreeSet类(唯一并排序)
TreeSet:树集
线程不安全,可以对set集合中的元素进行排序
练习:
设计Person类,有三个成员变量,String name,String id,int age,
用TreeSet存储元素,并根据age进行倒序排序
package
com.oldboyedu.test01;
public
class
Person
implements
Comparable<Person>{
private
String
name
;
private
String
id
;
private
int
age
;
public
String getName() {
return
name
;
}
public
void
setName(String
name
) {
this
.
name
=
name
;
}
public
String getId() {
return
id
;
}
public
void
setId(String
id
) {
this
.
id
=
id
;
}
public
int
getAge() {
return
age
;
}
public
void
setAge(
int
age
) {
this
.
age
=
age
;
}
public
Person(String
name
, String
id
,
int
age
) {
super
();
this
.
name
=
name
;
this
.
id
=
id
;
this
.
age
=
age
;
}
public
Person() {
super
();
//
TODO
Auto-generated constructor stub
}
//
首要条件
:age,
次要条件
:name
的长度
,
第三条件
:id
@Override
public
int
compareTo(Person
o
) {
int
res1
=
o
.getAge() -
this
.
getAge
();
//
int
res2 = (res1 == 0)?this.getName().length() - o.getName().length():res1;
int
res2
= (
res1
== 0)?
this
.getName().compareTo(
o
.getName()) :
res1
;
int
res3
= (
res2
== 0)?
this
.getId().compareTo(
o
.getId()):
res2
;
return
res3
;
}
}
/**********************************************************************************************************/
package
com.oldboyedu.test01;
import
java.util.TreeSet;
/*
*
设计
Person
类
,
有三个成员变量
,String name,String id,
int
age,
用
TreeSet
存储元素
,
并根据
age
进行倒序排序
*/
public
class
TreeSetDemo3 {
public
static
void
main(String[]
args
) {
TreeSet<Person>
ts
=
new
TreeSet<>();
Person
p1
=
new
Person(
"tom1"
,
"001"
, 11);
Person
p2
=
new
Person(
"tom1"
,
"001"
, 11);
Person
p3
=
new
Person(
"tom1"
,
"001"
, 20);
Person
p4
=
new
Person(
"ztom1"
,
"001"
, 21);
Person
p5
=
new
Person(
"tom1"
,
"001"
, 21);
Person
p6
=
new
Person(
"tom1"
,
"001"
, 31);
ts
.add(
p1
);
ts
.add(
p2
);
ts
.add(
p3
);
ts
.add(
p4
);
ts
.add(
p5
);
ts
.add(
p6
);
for
(Person
p
:
ts
) {
System.
out
.println(
p
.getAge() +
"---"
+
p
.getName() +
"---"
+
p
.getId());
}
}
}
设计学生类,按年龄大小排序
package
com.oldboyedu.test01;
public
class
Student
implements
Comparable<Student>{
private
String
name
;
private
int
age
;
public
Student(String
name
,
int
age
) {
super
();
this
.
name
=
name
;
this
.
age
=
age
;
}
public
Student() {
super
();
//
TODO
Auto-generated constructor stub
}
public
String getName() {
return
name
;
}
public
void
setName(String
name
) {
this
.
name
=
name
;
}
public
int
getAge() {
return
age
;
}
public
void
setAge(
int
age
) {
this
.
age
=
age
;
}
@Override
public
String toString() {
return
"Student [name="
+
name
+
", age="
+
age
+
"]"
;
}
@Override
public
int
compareTo(Student
o
) {
// return 0;//
除了第一个元素
,
以后所有的元素此方法的返回值都是
0,
// return -1;//
元素都可以进来
,
都往左放
// return 1;//
元素都可以进来
,
都往右放
//
若年龄相同
,
则认为是同一个对象
/*
int
res = this.getAge() - o.getAge();
if(res == 0){
return 0;
}
return res;
*/
//
年龄相同不一定就是同一个人
,
再比较名字
/*
int
res1 = this.getAge() - o.getAge();
int
res2 = this.getName().compareTo(o.getName());
if(res1 == 0){
return res2;
}
return res1;
*/
//
改进写法
int
res1
= -(
this
.getAge() -
o
.getAge());
int
res2
= (
res1
== 0)?-(
this
.getName().compareTo(
o
.getName())) :
res1
;
return
res2
;
}
}
/********************************************************************************/
package
com.oldboyedu.test01;
import
java.util.TreeSet;
public
class
TreeSetDemo2 {
public
static
void
main(String[]
args
) {
TreeSet<Student>
ts
=
new
TreeSet<>();
Student
s1
=
new
Student(
"tom1"
,11);
Student
s2
=
new
Student(
"ztom2"
,11);
Student
s3
=
new
Student(
"tom3"
,13);
Student
s4
=
new
Student(
"tom4"
,10);
ts
.add(
s1
);