- 浏览: 596765 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (154)
- java (31)
- Struts (3)
- Hibernate (8)
- Spring (6)
- JS (14)
- DWR (1)
- Oracle (1)
- SQL Server (0)
- JSF (0)
- JPA (0)
- Grails (3)
- Ajax (1)
- Extjs (0)
- jQuery (4)
- MySQL (2)
- 正则表达式 (2)
- 其他 (6)
- 计算机应用 (7)
- Groovy (8)
- Google (1)
- Web (2)
- MongoDB Java Driver (1)
- mongodb (1)
- Linux (3)
- HTML (1)
- Tomcat (3)
- Eclipse (2)
- JSP (1)
- 缓存 (1)
- 动态 (1)
- 问题与解决 (3)
- HY (1)
- Android (35)
- LBS (1)
最新评论
-
u012136165:
list 方法:纠正:[2,5].add(1,9) ...
Groovy的list和map -
bruce.yuan:
误人子弟的文章。已经看到N个人转了这个帖子,这要贻害多少新人啊 ...
理解并解决GBK转UTF-8奇数中文乱码 -
思念-悲伤:
特意登录上来,感谢下!
理解String的compareTo()方法返回值 -
bo_hai:
总结的好,有效。
理解String的compareTo()方法返回值 -
u012678420:
在onCreate方法中获取某个View的宽度和高度
Set存放不同元素,TreeSet存放不同元素,并且对元素进行排序。
Set<Object> set = new TreeSet<Object>();
set.add(new Integer(18));
set.add(new String("Bruce")); //Error
上面代码有错吗?
以上代码会抛出以下异常
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
当add()一个元素时,需要对元素进行排序,因此会强制转换类型进行比较。
结论:add()相同的类型
class User {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
public String toString() {
return this.name + " " + this.age;
}
}
Set<Object> set = new TreeSet<Object>();
set.add(new User("David", 25));
set.add(new User("Bruce", 26)); //Error
以上代码会抛出以下异常
Exception in thread "main" java.lang.ClassCastException: src.User cannot be cast to
java.lang.Comparable
结论:需要实现Comparable接口
JDK中实现了Comparable接口的类有:
BigDecimal、BigInteger、Byte、Double、Float、Integer、Long、Short
Character
String
class User implements Comparable {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
public String toString() {
return this.name + " " + this.age;
}
public int compareTo(Object o) {
User other = (User)o;
if (this.name.compareTo(other.name) > 0) return 1;
if (this.name.compareTo(other.name) < 0) return -1;
return 0;
}
}
public class Test {
public static void main(String[] args){
Set<Object> set = new TreeSet<Object>();
//创建5个不同对象
set.add(new User("Phil", 25));
set.add(new User("Admin", 25));
set.add(new User("Bruce", 26));
set.add(new User("Phil", 43));
set.add(new User("Bruce", 37));
for (Iterator it = set.iterator(); it.hasNext();) {
System.out.println(it.next());
}
}
}
/**Output:
Admin 25
Bruce 26
Phil 25
*/
排序成功了,但是却少了2个对象。因为当compareTo()方法返回0时(即排序相等),TreeSet的add()方法会认为已经存在该对象,于是不加到集合当中。
Set<Object> set = new TreeSet<Object>();
set.add(new Integer(18));
set.add(new String("Bruce")); //Error
上面代码有错吗?
以上代码会抛出以下异常
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
当add()一个元素时,需要对元素进行排序,因此会强制转换类型进行比较。
结论:add()相同的类型
class User {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
public String toString() {
return this.name + " " + this.age;
}
}
Set<Object> set = new TreeSet<Object>();
set.add(new User("David", 25));
set.add(new User("Bruce", 26)); //Error
以上代码会抛出以下异常
Exception in thread "main" java.lang.ClassCastException: src.User cannot be cast to
java.lang.Comparable
结论:需要实现Comparable接口
JDK中实现了Comparable接口的类有:
BigDecimal、BigInteger、Byte、Double、Float、Integer、Long、Short
Character
String
class User implements Comparable {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
public String toString() {
return this.name + " " + this.age;
}
public int compareTo(Object o) {
User other = (User)o;
if (this.name.compareTo(other.name) > 0) return 1;
if (this.name.compareTo(other.name) < 0) return -1;
return 0;
}
}
public class Test {
public static void main(String[] args){
Set<Object> set = new TreeSet<Object>();
//创建5个不同对象
set.add(new User("Phil", 25));
set.add(new User("Admin", 25));
set.add(new User("Bruce", 26));
set.add(new User("Phil", 43));
set.add(new User("Bruce", 37));
for (Iterator it = set.iterator(); it.hasNext();) {
System.out.println(it.next());
}
}
}
/**Output:
Admin 25
Bruce 26
Phil 25
*/
排序成功了,但是却少了2个对象。因为当compareTo()方法返回0时(即排序相等),TreeSet的add()方法会认为已经存在该对象,于是不加到集合当中。
评论
1 楼
thekll
2013-09-22
class User implements Comparable<User> {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
public String toString() {
return name + " " + age;
}
public int compareTo(User o) {
// User other = o;
// if (this.name.compareTo(other.name) > 0)
// return 1;
// if (this.name.compareTo(other.name) < 0)
// return -1;
// return 0;
return (name+age).compareToIgnoreCase(o.getName()+o.getAge());
}
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;
}
}
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
public String toString() {
return name + " " + age;
}
public int compareTo(User o) {
// User other = o;
// if (this.name.compareTo(other.name) > 0)
// return 1;
// if (this.name.compareTo(other.name) < 0)
// return -1;
// return 0;
return (name+age).compareToIgnoreCase(o.getName()+o.getAge());
}
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;
}
}
发表评论
-
理解并解决GBK转UTF-8奇数中文乱码
2011-06-18 21:29 27214最近在做一个反馈功能,把数据反馈到对方公司网站,我公司是GBK ... -
Java创建对象的四种方法
2010-12-24 15:10 1261package test; import java ... -
文件上传
2010-12-16 09:42 1091我用Excel数据导入来说明文件上传问题 <form ... -
GBK编码转成UTF-8编码
2010-12-03 15:49 1513从GBK编码转成UTF-8编码 private String ... -
HttpClient请求
2010-11-24 18:22 1624一个apache的httpclient简单范本,常用在WebS ... -
接收任意个字符串的方法
2010-11-10 11:32 1134public class MutilStringParamsD ... -
有状态会话Bean(SLSB)和无状态会话Bean(SFSB)的区别(转)
2010-09-26 10:01 1915Session Bean:分有状态 ... -
ThreadLocal解决线程安全问题
2010-09-25 16:55 3308//以下代码存在问题 pub ... -
AOP之Hello World
2010-09-14 23:41 1141目标 package com.aop.joinpoint; ... -
理解Socket
2010-09-03 00:31 1299服务器端代码: import java.io.Buffered ... -
一道Java面试题
2010-08-25 15:40 1320有两组字符串,A组["A","B ... -
理解+=操作符
2010-08-23 14:52 990今天看到一篇文章(下面给出原文链接),对作者的错误理解予以纠正 ... -
更深入地理解自增自减运算符
2010-08-20 17:27 1189public class DeepTest { public ... -
理解重载与重写
2010-08-20 15:51 1115今天有个朋友问我重载与覆盖的区别,所以我就写好了发给他。在这贴 ... -
暴露属性不安全?
2010-08-17 20:19 1243我们在看书的时候常常看到书上说暴露属性不安全,那么请问下哪里不 ... -
理解继承
2010-08-10 11:52 989这个例子涉及到继承与 ... -
获取properties配置文件信息
2010-08-10 11:32 1729import java.io.IOException; imp ... -
中文字符按拼音排序
2010-06-01 13:12 1644java.util.Comparator cmp = java ... -
线程并发
2010-05-25 21:01 1219进程:表示一个任务。 线程:一种比进程更小的执行单位,依附在进 ... -
了解枚举
2010-05-23 19:05 1535为了了解枚举,先利用反射分析一下它 import java.l ...
相关推荐
treeSet.add(3); treeSet.add(1); treeSet.add(2); // 自动排序 TreeMap, Integer> treeMap = new TreeMap(); treeMap.put("A", 1); treeMap.put("B", 2); ``` 9. **优先队列(PriorityQueue)**:优先队列按...
尽管我们通常不直接使用`TreeNode`,但了解它的存在可以帮助我们理解`TreeMap`和`TreeSet`的工作原理。 除了基本的实现,Java中还有`java.awt.Tree`和`javax.swing.JTree`,这两个类主要用于图形用户界面(GUI)中...
首先,我们需要理解`TreeSet`的工作原理。`TreeSet`内部基于红黑树(Red-Black Tree)数据结构,这是一种自平衡的二叉查找树,能够保证插入、删除和查找操作的时间复杂度为O(log n)。由于红黑树的特性,`TreeSet`...
总之,`TreeSet`是Java集合框架中一个强大且实用的工具,理解和熟练运用`TreeSet`不仅可以提高代码的可读性和维护性,还能在性能上带来显著提升。通过深入学习和实践,开发者可以更好地解决涉及排序和去重的问题。
treeSet.add("Element3"); treeSet.add("Element1"); ``` 在这个例子中,"Element1"会出现在"Element3"之前,因为它们按照自然顺序排序。 总结来说,选择哪种集合类取决于具体的需求,如是否需要保持元素顺序、是否...
此外,对于HashSet和TreeSet,它们都继承自Set接口,而HashMap和TreeMap则继承自Map接口,这意味着它们需要遵循接口定义的方法和行为。 在实际开发中,我们还需要考虑线程安全问题。如果多个线程同时访问这些集合,...
Java TreeSet类的简单理解和使用 Java TreeSet类是Set接口的一个实现类,主要作用是用于对对象的排序以及确定存入对象的唯一性。TreeSet类可以自动地对存入的对象进行排序,并且保证存入的对象的唯一性。 在使用...
对于`HashSet`和`TreeSet`而言,实现它们的关键在于理解它们背后的数据结构: - **HashSet**:为了保证元素的唯一性,`HashSet`使用哈希表作为底层数据结构。当一个对象被添加到`HashSet`时,会调用该对象的`...
理解各种排序算法的原理,如冒泡排序、插入排序、选择排序、归并排序、快速排序等,有助于在特定场景下选择最合适的排序方法。 13. 内存与空间复杂度 在考虑排序效率的同时,也要关注其内存占用,特别是在处理大...
treeSet.add(3); treeSet.add(1); treeSet.add(2); int min = treeSet.first(); TreeMap, Integer> treeMap = new TreeMap(); treeMap.put("Apple", 1); treeMap.put("Banana", 2); String keyWithMinValue = ...
首先,我们深入理解Java集合框架中的Set接口及其具体实现。 1. **Set接口**:Set接口继承自Collection接口,它保证集合内的元素不重复,同时支持数学上的集合操作,例如交集、并集等。Set接口有两个重要的实现类:...
在Java编程中,生成不重复随机数是一项常见的需求,特别是在模拟抽奖、随机选取...ArrayList和LinkedList方法相对较慢,但易于理解和实现;TreeSet方法则可以生成有序的不重复随机数。根据具体应用场景选择合适的方法。
1. add 方法:将元素添加到集合中。 2. remove 方法:将元素从集合中移除。 3. contains 方法:检查元素是否存在于集合中。 4. iterator 方法:返回一个迭代器对象,用于遍历集合中的元素。 5. sort 方法:对集合中...
本章主要介绍了Java中Collections类的常用方法,包括shuffle()、sort()等,以及Set集合的基本概念,特别是HashSet和TreeSet的区别。同时,讲解了如何对自定义类型进行排序,即实现Comparable接口或使用Comparator。...
Java中的集合框架是编程中非常重要的部分,它提供了一种高效、灵活的方式来存储和操作对象。集合主要包括三种类型的接口:Set、List和Map。...理解它们的特性和使用场景,有助于在编程中选择合适的集合类型。
使用toArray()方法将集合转换为数组,使用Arrays.asList()方法将数组转换为列表。 ```java public class CollectionArrayConversion { public static void main(String[] args) { String[] array = {"a", "b", "c...
除了以上提到的,Java还提供了许多其他数据结构,如`TreeSet`、`TreeMap`等,它们都有各自的添加元素的方法。在实际开发中,根据具体需求选择合适的数据结构进行元素的添加操作,可以有效提高代码的效率和可读性。 ...
此外,`HashSet`利用对象的`hashCode()`和`equals()`方法来判断元素是否重复。 #### 四、SortedSet接口 **特点:** 按照某种特定排序规则存放元素。 **常用实现类:** - `TreeSet`: 基于红黑树实现,能够自动按照...
要增加日期,可以使用`Calendar`类的`add()`方法,如增加230天: ```java c1.add(Calendar.DAY_OF_YEAR, 230); ``` 日期格式的转换通常通过`SimpleDateFormat`类来完成。例如,将日期从一种格式转换为另一种: ``...
在Java编程中,`List`接口是集合框架的重要组成部分,提供了有序的元素存储。...通过阅读和理解`Collections.sort()`的源码,开发者可以进一步提升自己的技能,同时也能更好地理解和运用其他Java集合框架的方法。