0 0

新手学J2SE,遇到一个集合问题,搞不懂代码什么意思5

主要有3个类:
public class CompareTable {

public static List list = new ArrayList();
static{
String[]s1 = {"赵","z"};
String[]s2 = {"钱","q"};
String[]s3 = {"孙","s"};
String[]s4 = {"李","l"};
String[]s5 = {"周","z"};
String[]s6 = {"吴","w"};
String[]s7 = {"郑","z"};
String[]s8 = {"王","w"};
list.add(s1);
list.add(s2);
list.add(s3);
list.add(s4);
list.add(s5);
list.add(s6);
list.add(s7);
list.add(s8);

}
}

package Account;

import Object.Person;

public class Account implements Comparable{
private String name;
private int age;
private int money;

public Account(String name,int age,int money) {
this.name = name;
this.age = age;
this.money = money;
}

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 int getMoney() {
return money;
}

public void setMoney(int money) {
this.money = money;
}

public String toString() {
return name+" "+age+" "+money;
}
public boolean eqsuals(Object otherObject) {
//检查otherObject同this是不是同一个对象
if(this ==otherObject)  return true;
//检查otherObject是否为null
if(otherObject ==null)  return false;
//检查otherObject是不是某类的实例
if(!(otherObject instanceof Person)) return false;
//强制类型转换,执行按照业务要比较的2个对象的属性
Account other = (Account)otherObject;
if(age == other.age && name == other.name && money == other.money)  return true;
else
return false;
}
public int hashCode() {
return this.name.hashCode()+this.age+this.money;
}

@Override
public int compareTo(Object object) {
Account account = (Account)object;
String firstName = this.name.substring(0,1);
String otherName = account.name.substring(0,1);
//System.out.println(firstName);
System.out.println(otherName);
char fc = 0;
char oc =0;
for(int i=0;i<CompareTable.list.size();i++) {
String s[] = (String[]) CompareTable.list.get(i);
if(s[0].equals(firstName)) {
fc = s[1].toCharArray()[0];
break;
}
if(s[0].equals(otherName)) {
oc = s[1].toCharArray()[0];
break;
}
}
if(fc>oc)
return -1;
if(fc<oc) return 1;
else
return 0;
}

/*public int compareTo(Object object) {
Account account = (Account)object;
if(age<account.age) return 1;
if(age>account.age) return -1;
else
return 0;
}*/



}
package Account;

import java.util.Set;
import java.util.TreeSet;


public class TreeSetTestMain {
public static void main(String[] args) {
Set set = new TreeSet();
//set.add("1");
//set.add("3");
//set.add("2");
//for (Object o : set) {
// System.out.println(o);
//}
set.add(new Account("赵宁",21,1000));
set.add(new Account("吴宁",1,4000));
set.add(new Account("李宁",2,3000));
set.add(new Account("王宁",3,2000));
set.add(new Account("钱宁",24,6000));
for (Object o : set) {
System.out.println(o);
}

}

}

以及那个比较方法具体是怎么实现的
我最搞不懂的是firstName和otherName输出来的结果。
2012年10月24日 13:05

1个答案 按时间排序 按投票排序

0 0

采纳的答案

TreeSet对象每次add的时候,都会把要add的对象和目前set里的(部分)对象比较,以便让新增的元素放在合适的位置上。但是和哪个先比较,比较几次?我们定不了,只要JVM认为新加入的元素到了合适的位置,就停止比较,所以,firstName和otherName输出来的结果基本没有什么意义,也就无所谓看懂看不懂了。

如果你偏偏想看懂,对你的代码略加修改,你仔细品味其中奥妙吧

package Account;

import java.util.Set;
import java.util.TreeSet;


public class TreeSetTestMain {
public static void main(String[] args) {
Set set = new TreeSet();
//set.add("1");
//set.add("3");
//set.add("2");
//for (Object o : set) {
// System.out.println(o);
//}
System.out.println(" add 赵宁 开始");
set.add(new Account("赵宁",21,1000));
System.out.println(" add 赵宁 结束");
System.out.println();
System.out.println();

System.out.println(" add 吴宁 开始");
set.add(new Account("吴宁",1,4000));
System.out.println(" add 吴宁 结束");
System.out.println();
System.out.println();

System.out.println(" add 李宁 开始");
set.add(new Account("李宁",2,3000));
System.out.println(" add 李宁 结束");
System.out.println();
System.out.println();

System.out.println(" add 王宁 开始");
set.add(new Account("王宁",3,2000));
System.out.println(" add 王宁 结束");
System.out.println();
System.out.println();

System.out.println(" add 钱宁 开始");
set.add(new Account("钱宁",24,6000));
System.out.println(" add 钱宁 结束");
for (Object o : set) {
	System.out.println(o);
}

}

} 


Account.java中部分代码
@Override
	public int compareTo(Object object) {
		Account account = (Account) object;
		String firstName = this.name.substring(0, 1);
		String otherName = account.name.substring(0, 1);
//		System.out.println(firstName);
//		System.out.println(otherName);
		System.out.println("------------------");
		System.out.println("我是"+this.name+",和我比较的是:"+account.name);
		System.out.println("-------------------");
		char fc = 0;
		char oc = 0;
		for (int i = 0; i < CompareTable.list.size(); i++) {
			String s[] = (String[]) CompareTable.list.get(i);
			if (s[0].equals(firstName)) {
				fc = s[1].toCharArray()[0];
				break;
			}
			if (s[0].equals(otherName)) {
				oc = s[1].toCharArray()[0];
				break;
			}
		}
		if (fc > oc)
			return -1;
		if (fc < oc)
			return 1;
		else
			return 0;
	}

2012年10月24日 17:11

相关推荐

    j2se全部学习代码

    "j2se全部学习代码"这个标题表明这是一个包含了一系列用于学习J2SE的编程实践项目。描述中提到,这个压缩包包含了从初学者阶段到全面掌握J2SE的学习过程中的所有练习代码,这意味着我们可以期待看到从基础语法到高级...

    学习j2se的30个问题

    ### 学习J2SE的30个关键知识点解析 #### J2SE的特性与应用场景 J2SE(Java 2 Platform, Standard Edition)是Java技术标准版的一部分,主要用于开发桌面应用程序、网络应用以及简单的服务器端应用。它包含了运行...

    J2SE学习代码

    Java标准版(J2SE,Java 2 Platform Standard Edition)是Java开发平台的一个核心组件,主要面向桌面应用和服务器端应用程序开发。它包含了Java运行环境、基础类库以及开发工具,是Java程序员进行编程的基础。在J2SE...

    j2se代码.zip

    这个压缩包"j2se代码.zip"显然包含了与 Java 编程相关的源代码,非常适合那些刚开始学习 Java 的初学者。这里我们将深入探讨 Java 编程的一些关键知识点,帮助你更好地理解和掌握这门强大的编程语言。 1. **Java ...

    完整的J2SE所有代码

    这个压缩包包含的“完整的J2SE所有代码”显然是一个全面的Java基础学习资源,涵盖了从基本语法到高级特性的各种示例。下面,我们将深入探讨这些知识点。 首先,J2SE的基础部分包括Java编程语言的基本语法,如变量、...

    J2SE复习源代码

    本复习源代码涵盖了多个关键知识点,旨在帮助开发者巩固和提升在J2SE中的技能。 1. **常用类**: Java提供了丰富的内置类,如`String`、`ArrayList`、`HashMap`等。`String`类处理文本字符串,具有不可变性;`...

    J2SE基础源代码

    在"J2SE基础源代码"这个主题中,我们可以深入探讨以下几个关键知识点: 1. **Java语法**:Java是一种面向对象的编程语言,它的语法结构严谨,包括类、对象、继承、封装、多态等核心概念。源代码中可能会包含这些...

    j2se_俄罗斯方块源代码

    总结,J2SE版俄罗斯方块源代码是一个极好的学习资源,它展示了如何用Java编写一个简单的游戏,涵盖了图形绘制、事件处理、状态管理等多个核心概念。对于想要踏入游戏编程领域的初学者,这个500行的源代码是一个绝佳...

    J2SE学习入门教程

    这个“J2SE学习入门教程”的上半部分可能涵盖了以上部分内容,也可能深入讲解了其中某一领域的细节。通过学习,你应该能够建立起坚实的Java基础,为进一步深入学习Java EE、Android开发或其他基于Java的技术铺平道路...

    j2se 小程序源代码

    这个"j2se小程序源代码"很可能是包含了使用Java SE编写的一些小型程序的源码集合,供学习者研究和参考。这些源代码可以帮助开发者理解和掌握Java编程语言的基本语法、面向对象编程的概念以及Java SE API的使用。 在...

    J2SE 核心类库源代码

    Java 2 Platform, Standard Edition (J2SE) 是 Java 平台的核心部分,它提供了用于开发和运行桌面应用、服务器应用以及嵌入式系统...因此,深入研究J2SE核心类库的源代码对任何Java开发者来说都是一个宝贵的学习过程。

    j2se学习代码

    Java 2 Standard Edition (J2SE)...虽然作者认为代码可能有不足之处,但正所谓“学而时习之”,通过分析别人的代码,找出问题并改进,本身就是学习的一部分。所以,不要担心代码的完美程度,更重要的是从中学习和成长。

    J2SE学习笔记(学习源码)

    J2SE学习实例 1、Java的基础知识 2、Java面向对象 3、集合Collection的使用 4、IO使用 5、Socket编程 6、Thread线程技术 7、Subject反射技术 8、GUI图形编程

    j2se基础学习源代码

    各实例目录下会有一个关于实例运行的简单说明文件:readme.txt。有些目录没有这个文件, 是说明在运行这实例时不需要配置任何的环境。即只要JDK安装正确即可使用java命令正确运行 的实例。无论有无说明文件,请读者...

    java基础(j2se代码)

    在这个压缩包文件中,我们很可能是找到了一系列关于Java编程的基本概念、语法和示例代码。以下是Java基础的一些关键知识点: 1. **Java语言特性**:Java是一种面向对象的语言,其特性包括封装、继承、多态和抽象。...

    j2se实现计算器,界面优美

    在本项目中,我们关注的是一个使用Java标准版(J2SE)实现的计算器应用程序。这个计算器项目不仅提供了基本的计算功能,而且它的图形用户界面(GUI)设计得相当优美,使得用户交互体验良好。这对于那些正在学习Java ...

    j2se练习小程序

    Java 2 Platform, ...每个子文件可能对应一个特定的主题,例如,一个文件可能是关于集合框架的实现,另一个可能是多线程的示例。实践是检验理论的最好方式,希望这个项目能帮助你扎实地掌握Java的J2SE核心知识。

    一些J2SE小代码

    这个压缩包文件名为"J2SE",很可能包含了多个Java源代码文件,这些文件是你在学习J2SE基础知识时编写的,并且经过了调试,对初学者来说是很好的参考资料。 Java编程语言以其跨平台性、面向对象的特性以及丰富的类库...

    j2se练习代码 Java学习资料

    通过这个压缩包中的练习代码,你可以逐步熟悉和掌握Java SE的各项核心特性,并且能够将所学应用到实际项目中。不断实践和调试代码是提升编程技能的关键,所以不要怕犯错,勇敢去尝试和解决问题。同时,结合理论学习...

    J2SE.rar_j2se

    总的来说,"J2SE.rar_j2se"这个压缩包提供了一个全面的J2SE学习路径,无论是新手还是有经验的开发者,都能从中受益。通过系统的学习和实践,我们可以深入理解Java SE的精髓,提升自己的编程能力,为后续的Java EE或...

Global site tag (gtag.js) - Google Analytics