Java集合学习笔记(通过比较器对集合元素排序)
来源:互联网 发布:科比本赛季数据 编辑:程序博客网 时间:2024/05/17 08:02
/**
* 1.add方法的参数类型为对象,并且是对象的引用
* 2.List元素是有序的,元素可以重复,因为该体系有索引
* list特有的方法都是和索引相关的操作
* List的子类对象有:
* ArrayList--数组结构--JDK1.2开始--查询速度快--默认为10的长度--50%延长
* LinkedList--链表结构--插入删除快、
* Vector--数组结构--JDK1.0开始--线程同步,被ArrayList替代了--默认为10的长度--100%延长
* 3.set元素是无序(存入和取出的顺序不一定一致)的,元素不可以重复
* HashSet--底层结构为hash表,hashset是通过hashcode和equals来保证元素唯一性
* 如果元素的hashcode值相同,才会判断equals是否为true
* 如果元素的hashcode值不同,才会调用equals
* 注意:对于判断元素是否存在和删除操作,依赖的方法是元素的hashcode和equals方法
* ArrayList是通过equals来判断
* TreeSet--可以对set集合中的元素进行排序--底层是二叉树
* 排序方式一:让元素自身具有比较性--保证元素唯一性--compareTo方法 return 0
* 排序方式二:让集合具有比较性
* 4.泛型--JDK1.5之后出现泛型--解决安全问题--类型安全机制
* 好处:将运行时期出现的问题出现在编译时期
* @author qiuzhiwen
*
*/
class Student //implements Comparable
{
private String name;
private int age;
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
/*@Override
public int compareTo(Object o) {
Student s=(Student) o;
if(this.age>s.age)//主要条件
return 1;
if(this.age==s.age)
return this.name.compareTo(s.name);//次要条件
return -1;
}*/
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;
}
}
//比较器--常用方法
class MyCompartor implements Comparator<Student>{
@Override
public int compare(Student s1, Student s2) {
int num= s1.getName().compareTo(s2.getName());//按姓名排序--主要条件
if(num==0){
if(s1.getAge()>s2.getAge())//按年龄排序--次要条件
return 1;
if(s1.getAge()==s2.getAge())
return 0;
return -1;
}
return num;
}
}
public class CollectionDemo2 {
public static void main(String[] args) {
//排序方式一:让元素具有比较性
// TreeSet<Student> ts=new TreeSet<Student>();
// ts.add(new Student("yuhao", 20));
// ts.add(new Student("xiayu", 21));
// ts.add(new Student("kang", 22));
// ts.add(new Student("mon", 22));
//排序方式二:让集合具有比较性
TreeSet<Student> ts=new TreeSet(new MyCompartor());//
ts.add(new Student("yuhao", 20));
ts.add(new Student("xiayu", 21));
ts.add(new Student("kang", 22));
ts.add(new Student("mon", 22));
ts.add(new Student("mon", 21));
for(Iterator<Student> it=ts.iterator();it.hasNext();){
Student s=it.next();
System.out.println(s.getName()+"--"+s.getAge());
}
}
}
* 1.add方法的参数类型为对象,并且是对象的引用
* 2.List元素是有序的,元素可以重复,因为该体系有索引
* list特有的方法都是和索引相关的操作
* List的子类对象有:
* ArrayList--数组结构--JDK1.2开始--查询速度快--默认为10的长度--50%延长
* LinkedList--链表结构--插入删除快、
* Vector--数组结构--JDK1.0开始--线程同步,被ArrayList替代了--默认为10的长度--100%延长
* 3.set元素是无序(存入和取出的顺序不一定一致)的,元素不可以重复
* HashSet--底层结构为hash表,hashset是通过hashcode和equals来保证元素唯一性
* 如果元素的hashcode值相同,才会判断equals是否为true
* 如果元素的hashcode值不同,才会调用equals
* 注意:对于判断元素是否存在和删除操作,依赖的方法是元素的hashcode和equals方法
* ArrayList是通过equals来判断
* TreeSet--可以对set集合中的元素进行排序--底层是二叉树
* 排序方式一:让元素自身具有比较性--保证元素唯一性--compareTo方法 return 0
* 排序方式二:让集合具有比较性
* 4.泛型--JDK1.5之后出现泛型--解决安全问题--类型安全机制
* 好处:将运行时期出现的问题出现在编译时期
* @author qiuzhiwen
*
*/
class Student //implements Comparable
{
private String name;
private int age;
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
/*@Override
public int compareTo(Object o) {
Student s=(Student) o;
if(this.age>s.age)//主要条件
return 1;
if(this.age==s.age)
return this.name.compareTo(s.name);//次要条件
return -1;
}*/
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;
}
}
//比较器--常用方法
class MyCompartor implements Comparator<Student>{
@Override
public int compare(Student s1, Student s2) {
int num= s1.getName().compareTo(s2.getName());//按姓名排序--主要条件
if(num==0){
if(s1.getAge()>s2.getAge())//按年龄排序--次要条件
return 1;
if(s1.getAge()==s2.getAge())
return 0;
return -1;
}
return num;
}
}
public class CollectionDemo2 {
public static void main(String[] args) {
//排序方式一:让元素具有比较性
// TreeSet<Student> ts=new TreeSet<Student>();
// ts.add(new Student("yuhao", 20));
// ts.add(new Student("xiayu", 21));
// ts.add(new Student("kang", 22));
// ts.add(new Student("mon", 22));
//排序方式二:让集合具有比较性
TreeSet<Student> ts=new TreeSet(new MyCompartor());//
ts.add(new Student("yuhao", 20));
ts.add(new Student("xiayu", 21));
ts.add(new Student("kang", 22));
ts.add(new Student("mon", 22));
ts.add(new Student("mon", 21));
for(Iterator<Student> it=ts.iterator();it.hasNext();){
Student s=it.next();
System.out.println(s.getName()+"--"+s.getAge());
}
}
}
阅读全文
0 0
- Java集合学习笔记(通过比较器对集合元素排序)
- Java比较器对数组,集合排序
- java基础—自定义一个比较器,对TreeSet 集合中的元素按指定方法来排序(java集合六)
- java对集合元素的特定排序
- Java学习笔记--- Java对List集合的排序
- Java比较器对数组,集合排序一
- Java比较器对数组,集合排序二
- java 集合比较 排序
- java对list集合使用comparator方法比较排序
- 对List集合中的元素进行排序
- 对List集合中的元素进行排序
- 对List集合中的元素进行排序
- 对List集合中的元素进行排序
- 对List集合中的元素进行排序
- 对List集合中的元素进行排序
- 对ArrayList集合中的元素进行排序
- 对List集合中的元素进行排序
- Java学习笔记(集合)
- Lucene提高搜索排名(文档域加权)
- studio 快捷键和一些啥啥啥的
- 基于函数加密的.so加固学习笔记
- 从现在开始 还是下一秒开始
- 第一章:windows下 python 的安装和使用
- Java集合学习笔记(通过比较器对集合元素排序)
- 集合框架中有哪类是线程安全的
- 【几行代码】在VRTK中合并Teleport和Rotate操作
- github
- 树的前序遍历、中序遍历与后序遍历的互相求解
- Unity中接入原生广告(UnityAds)和 GoogleAdmob 和 Vungle
- CMake学习(一)
- Linux下搭建gre隧道
- UDP协议的发送端的基本代码