- 浏览: 221837 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
junzi2013:
df
黑马程序员:MyEclipse9 常用快捷键 中英文对照 及 快速get set方法 -
junzi2013:
dfsdafadsfsd
黑马程序员:MyEclipse9 常用快捷键 中英文对照 及 快速get set方法 -
idealab:
博主说的OpenCSV, JavaCSV, SuperCSV都 ...
csv调研 -
tanxin:
楼主怎么解决这个问题的呢?
坑爹的zookeer -
yy22258867:
:twisted:
黑马程序员19-7:foreach遍历核心源码,遍历HashMap需要用map.keySet()或map.entrySet()
package cn.itcast.p.bean; import java.util.ArrayList; import java.util.Iterator; public class Person /*extends Object*/ implements Comparable { public static void main(String []augs){ // Person p = new Person("p1",3); ArrayList al = new ArrayList(); al.add(new Person("p1",3)); al.add(new Person("p2",2)); al.add(new Person("p3",3)); al.add(new Person("p4",4)); al.add(new Person("p5",5)); Iterator it = al.iterator(); while(it.hasNext()){ Person p = (Person) it.next(); System.out.println(p.getName() + " " + p.getAge()); } } private String name; private int age; public Person() { super(); } public Person(String name, int age) { super(); this.name = name; this.age = age; } @Override public int hashCode() { // System.out.println(this+".......hashCode"); return name.hashCode()+age*37; // return 100; } @Override public boolean equals(Object obj) { if(this == obj) return true; //健壮性判断 if(!(obj instanceof Person)) throw new ClassCastException("类型错误"); // System.out.println(this+"....equals....."+obj); Person p = (Person)obj; return this.name.equals(p.name) && this.age == p.age; } 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; } public String toString(){ return name+":"+age; } //在TreeSet里边进行排序比较,需要重写这个方法 @Override public int compareTo(Object o) { //要做健壮性判断 if(!(o instanceof Person)){ throw new ClassCastException("类型不匹配异常"); } Person p = (Person)o; int temp = this.age-p.age; return temp==0?this.name.compareTo(p.name):temp; // int temp = this.name.compareTo(p.name); // return temp==0?this.age-p.age:temp; /* if(this.age>p.age) return 1; if(this.age<p.age) return -1; else{ return this.name.compareTo(p.name); } */ } }
package cn.itcast.p5.treeset.demo; import java.util.Iterator; import java.util.TreeSet; import cn.itcast.p.bean.Person; import cn.itcast.p5.comparator.ComparatorByName; public class TreeSetDemo { /** * @param args */ public static void main(String[] args) { TreeSet ts = new TreeSet(new ComparatorByName()); /* * ��Person����������д�С��������� * */ ts.add(new Person("zhangsan",28)); ts.add(new Person("lisi",21)); ts.add(new Person("zhouqi",29)); ts.add(new Person("zhaoliu",25)); ts.add(new Person("wangu",24)); Iterator it = ts.iterator(); while(it.hasNext()){ Person p = (Person)it.next(); System.out.println(p.getName()+":"+p.getAge()); } } /** * */ public static void demo1() { TreeSet ts = new TreeSet(); ts.add("abc"); ts.add("zaa"); ts.add("aa"); ts.add("nba"); ts.add("cba"); Iterator it = ts.iterator(); while(it.hasNext()){ System.out.println(it.next()); } } }
package cn.itcast.p5.comparator; import java.util.Comparator; import cn.itcast.p.bean.Person; /** * ������һ�����Person���name��������ıȽ����� */ public class ComparatorByName implements Comparator { @Override public int compare(Object o1, Object o2) { Person p1 = (Person)o1; Person p2 = (Person)o2; //比较姓名(compareTO,就是按字典比较顺序比较字符串大小,也就是比较名字字符串的大小) int temp = p1.getName().compareTo(p2.getName()); //如果名字相同,则继续比较年龄 return temp==0?p1.getAge()-p2.getAge(): temp; // return 1;//���� } }
package cn.itcast.p5.comparator; import java.util.Comparator; public class ComparatorByLength implements Comparator { @Override public int compare(Object o1, Object o2) { String s1 = (String)o1; String s2 = (String)o2; //比较对象(字符串)的长度,也就是有多少个 int temp = s1.length()-s2.length(); System.out.println("s1: " + s1 + " " + "s2: "+ s2 + " "); //当长度相等的时候,再比较内容,也就是哪个大 return temp==0? s1.compareTo(s2): temp; } }
package cn.itcast.p5.treeset.test; import java.util.Iterator; import java.util.TreeSet; import cn.itcast.p5.comparator.ComparatorByLength; /* * ���ַ���г������� * * "20 18 -1 89 2 67" */ public class TreeSetTest { /** * @param args */ public static void main(String[] args) { TreeSet ts = new TreeSet(new ComparatorByLength()); ts.add("aaaaa"); ts.add("zz"); ts.add("nbaq"); ts.add("cba"); ts.add("abc"); Iterator it = ts.iterator(); while(it.hasNext()){ System.out.println(it.next()); } } }
TreeSet是按自定义或者默认比较器进行排序的元素唯一的集合。
使用TreeSet
|--TreeSet:可以对Set集合中的元素进行排序。是不同步的。
判断元素唯一性的方式:就是根据比较方法的返回结果是否是0,是0,就是相同元素,不存。
TreeSet对元素进行排序的方式一:
让元素自身具备比较功能,元就需要实现Comparable接口。覆盖compareTo方法。
如果不要按照对象中具备的自然顺序进行排序。如果对象中不具备自然顺序。怎么办?
可以使用TreeSet集合第二种排序方式二:
让集合自身具备比较功能,定义一个类实现Comparator接口,覆盖compare方法。将该类对象作为参数传递给TreeSet集合的构造函数。
详细请查看:http://edu.csdn.net/heima -------
发表评论
-
Java中的IO整理完整版
2013-02-15 17:23 703http://developer.51cto.com/art/ ... -
Myeclipse中导入zip文件查看源代码
2012-09-21 23:35 1050用Myeclipse的时候,出现无法查看源码的话,导入jdk文 ... -
==与equals
2012-09-13 20:15 648一般基本数据类型的比较用 == 当涉及到对象、字符串的时候,就 ... -
多线程课程002:线程范围内的共享变量
2012-09-13 16:47 950package cn.itcast.heima2; ... -
多线程课程001:线程安全的问题
2012-09-13 14:37 807下面的做法,会发现输出结果被打断了。 package co ... -
多线程课程001:线程安全的问题
2012-09-13 11:14 788package com.lee.thread; pu ... -
内部类的实际应用
2012-09-13 11:01 659public class TraditionalThreadS ... -
Java接口
2012-09-11 12:07 756Java接口的方法只能是抽象的和公开的,Java接口不能有构造 ... -
移位运算符
2012-09-11 09:31 840移位运算符 <<左移 a<<b,a转 ... -
【总结】gridbaglayout布局管理器
2012-08-15 11:19 690http://blog.sina.com.cn/s/blog_ ... -
【练习_00010】java不重复随机数
2012-08-14 01:26 694package com.heima.test; impo ... -
【练习】判断一个字符串中某些字段出现的次数
2012-08-14 01:08 973package com.heima.test; im ... -
选择、冒泡、折半排序查找方法
2012-08-13 15:06 1213import java.util.Arrays; i ... -
自己写的杨辉三角
2012-08-12 16:41 801package com.lee.graphic; p ... -
交换两个数的位置,不用中间变量
2012-08-06 02:28 1110a ^= b; b ^= a; a ^= b; 1 ... -
未解问题,定时器无法自定义切换时间
2012-07-30 18:08 1007package com.heima.test004.enu ... -
黑马程序员:设计模式,享元模式flyweight
2012-07-23 02:13 0如果有很多很小的东西,对象,当他们有很多属性是相同的,就可以把 ... -
黑马程序员:for综合图形整合结晶
2012-07-23 01:16 796package Graph; public clas ... -
JS: js获取字符串长度
2012-07-20 18:01 0<SCRIPT LANGUAGE="Jav ... -
传智27-2: 模拟Tocat浏览器,写网页蜘蛛爬虫,抓取网页信息
2012-07-12 17:03 0package cn.itcast.net.p2.ie_s ...
相关推荐
本课程重点讲解了`TreeSet`如何实现`Comparable`接口以及如何自定义比较规则。 首先,我们来了解`TreeSet`的基本概念。`TreeSet`内部使用红黑树数据结构存储元素,这使得它的插入、删除和查找操作具有较高的效率,...
在Java编程中,`Comparator`接口是一个非常重要的工具,它允许我们自定义对象的排序规则。在"cpu-manager"项目中...通过对这些文件的学习和研究,开发者可以更好地掌握Java中的比较器机制,并将其应用到自己的项目中。
定制排序:在创建TreeSet集合对象时,并提供一个Comparator接口实现类对象与该TreeSet集合关联, 由Comparator实现类对象负责集合元素的排序逻辑。 // 自定义比较器 class MyTreeSetCompartor implements...
`Comparator`不仅可以用于`List`的排序,还可以在其他需要比较元素的场景中发挥作用,如`TreeSet`、`PriorityQueue`以及`Arrays.sort()`等。此外,`Comparator`还支持链式调用,可以同时比较多个属性,比如先比较...
Comparator是一个比较器接口,它提供了一种在类本身不支持排序的情况下控制对象次序的方式。通过实现Comparator接口,你可以创建一个独立于原始类的比较逻辑,这使得排序更灵活。Comparator接口包含两个方法:`...
2. **自定义比较器**:如果我们需要自定义元素的排序规则,可以通过传递一个实现了`Comparator`接口的对象给`TreeSet`的构造函数来实现。`compare()`方法在这个比较器中定义了元素的比较逻辑。 3. **基本操作**:`...
无参构造器创建按元素自然排序的空集合,接受Comparator的构造器创建按指定比较器排序的空集合,接受Collection参数的构造器创建包含给定元素的新集合,并按元素自然排序,以及接受SortedSet参数的构造器创建与输入...
3. **比较器的使用场景**:在集合框架如`Collections.sort()`和`TreeSet`等需要排序的地方,以及自定义排序规则时,我们通常会用到`Comparator`。例如,当我们需要根据年龄而非名字对人员列表进行排序时,可以创建一...
`TreeSet`保证了其元素按照自然顺序或者自定义比较器的顺序进行排序。在`TreeSet`中,元素的唯一性是由`compareTo()`方法决定的,而不是`equals()`。 `equals()`方法是Java对象默认继承自`Object`类的方法,用于...
6. **TreeSet构造函数**:接受Comparator对象,可以根据指定的比较器进行排序。 7. **红黑树**:TreeSet的底层数据结构,一种自平衡的二叉搜索树,保证了操作的时间复杂度。 8. **匿名内部类**:在实际开发中,我们...
在Java编程语言中,排序是常见的操作,而`Comparable`和`Comparator`接口则是实现对象排序的两种主要方式。这篇文章将深入探讨这两种实现方式及其在实际编程中的应用。 首先,`Comparable`接口位于`java.lang`包下...
- **PriorityQueue**:根据元素的自然顺序或提供的比较器来决定优先级。适用于需要按照特定顺序处理元素的情况。 **示例代码**: ```java Queue<String> queue = new LinkedList(); queue.offer("Apple"); queue....
**6. short s1 = 1; s1 = s1 + 1;会怎么样?short s1 = 1; s1 += 1;又会怎么样?** - **s1 = s1 + 1:** 会导致编译错误,因为s1 + 1的结果是int类型。 - **s1 += 1:** 正常运行,+=操作符会自动进行类型转换。 **7....
1. **Iterable接口**:这是所有集合类的顶级接口,它定义了迭代器的获取方法`iterator()`,使得可以通过迭代器遍历集合中的元素。 2. **Collection接口**:这是集合框架的基本接口,它继承自Iterable接口,定义了...
- **TreeSet:** TreeSet是Java集合框架的一部分,实现了SortedSet接口,可以按照元素的自然顺序或自定义比较器排序。 - **Comparable接口:** 实现此接口的类具有自然排序(即按其固有的顺序排序)的概念。为了使一...
所有元素都会按照某种顺序进行排列,可以自然排序,也可以自定义比较器进行排序。 - **排序与去重**:与 `HashSet` 类似,`TreeSet` 同样可以保证集合中元素的唯一性,但它还可以保持元素的排序。对于 `Person` 对象...
- **Comparable**:接口定义了compareTo()方法,用于比较对象之间的大小。 - **Comparator**:接口定义了compare()方法,可以自定义比较规则。 #### 17. HashSet与TreeSet的区别 - **HashSet**:使用哈希表实现,...
通过这种方式,我们可以直接将`Person1`对象添加到`TreeSet`中,而不需要额外的比较器。 ```java public class testit { public static void main(String[] args) { TreeSet<Person1> ts = new TreeSet(); ts....
1. 在创建 TreeSet 对象时,可以传入自定义比较器,自定义比较器需实现 Comparator 接口。 知识点:TreeSet 是一种排序的 Set 集合,可以根据compareTo 方法或自定义的比较器来排序。 2. 使用 Iterator 遍历集合时...
- **Comparator接口**:用于自定义比较规则,可以在不修改原始类的情况下,创建比较器对Map或集合中的元素进行排序。 9. **集合框架面试题** 面试题可能涵盖集合的使用场景、性能比较、遍历方法、并发处理、排序...