java之15天 TreeSet集合 (一)

[size=medium][b]HashSet 和 TreeSet [/b][/size]

TreeSet的第一种排序 元素自身拥有比较功能 哈哈

/**
* Set 无序的,不可以重复元素
* |--HashSet: 底层数据结构是哈希表, 线程不同步
* hashSet是如何保证元素唯一性呢?
* 是通过元素的两个方法, hashCode 和 equals 来完成的
* 如果元素的hashCode值相同,才会判断equals 是否为true
* 如果元素的hashCode值不同,不会调用 equals.
*
* 注意: 对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashCode和equals方法.
*
* |--TreeSet: 可以对Set集合中的元素进行排序
* 底层数据结构式是二叉树
* 保证元素唯一性的依据
* compareTo 方法 return 0 TreeSet 中就只会有一个 元素
*
* TreeSet排序的第一种方式,让元素自身具备比较性,
* 元素需要实现Comparable接口,覆盖compareTo 方法
* 这种方式 也成为元素的自然顺序,或者叫默认顺序.
*
* TreeSet的第二种排序方式.
* 当元素自身不具备比较性时,或者具备的比较性不是所需要的 .
* 这是就需要让集合自身具备比较性.
* 在集合初始化时,就有了比较方式.
*
*
* 需求:
* 往TreeSet集合中存储自定义对象学生
* 想按照学生的年龄进行排序.
*
* 记住:排序时,当主要条件相同时,一定要判断一下次要条件.
*
*/

public class TreeSetDemo {
public static void main(String[] args) {
method_1();
System.out.println("=======================");
method_2();
}

//保存自定义对象
public static void method_2(){
TreeSet ts=new TreeSet();
ts.add(new Student("lisi01",22));
ts.add(new Student("lisi007",20));
ts.add(new Student("lisi09",19));
ts.add(new Student("lisi01",19));
ts.add(new Student("lisi01",40));
ts.add(new Student("lisi007",30));
ts.add(new Student("lisi09",36));
ts.add(new Student("lisi01",29));
ts.add(new Student("lisi01",90));

Iterator it=ts.iterator();
while(it.hasNext()){
Student stu=(Student)it.next();
System.out.println(stu.getName()+"...."+stu.getAge());
}

}

//保存普通对象
public static void method_1(){
TreeSet ts= new TreeSet();
ts.add("cba");
ts.add("abcd");
ts.add("aaa");
ts.add("bca");

Iterator it =ts.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}
//使用TreeSet来保存自定义对象

class Student implements Comparable{
private String name;
private int age;
Student(String name,int age){
this.name=name;
this.age=age;
}

public String getName(){
return name;
}

public int getAge(){
return age;
}

@Override
public int compareTo(Object obj) {
// TODO Auto-generated method stub
if(!(obj instanceof Student))
throw new RuntimeException("不是学生对象");
Student stu=(Student)obj;
if(this.age>stu.age)
return 1;
else if(this.age==stu.age){
//return 0;
//如果年龄相同的时候 就需要按照姓名排序
return this.name.compareTo(stu.name);
}
return -1;
}
}


[size=medium][b]TreeSet 的第二种比较方式(当元素自身不具备比较方法的时候)[/b][/size]

/**
* TreeSet的第二种排序方式.
*
* 当元素自身不具备比较性时,或者具备的比较性不是所需要的 .
* 这是就需要让集合自身具备比较性.
* 在集合初始化时,就有了比较方式.
* 步骤
* 1.定义比较器 (定义一个类,实现Comparator,覆盖compare方法.)
* 2.传递给 TreeSet比较器
*
* 注意:
* 当两种排序都存在时候,以比较器为主.
*
*
* 需求变了:
* 要改成 name排序 这样我们为了 不需改 Student 的原比较方法 我们定义一个比较器 采用 name进行比较
*/
public class TreeSetDemo1 {

public static void main(String[] args) {
//之前才使用 age比较
method_1();
//需求变了 要改成 name排序 这样我们为了 不需改 Student 的原比较方法 我们定义一个比较器 采用 name进行比较
System.out.println("==========================");
//改成使用 name比较
method_2();

}
public static void method_2(){
//这样就可以 实现 name比较了哦
TreeSet ts=new TreeSet(new StudentComparator());
ts.add(new Student("lisi01",22));
ts.add(new Student("lisi007",20));
ts.add(new Student("lisi09",19));
ts.add(new Student("lisi01",19));


Iterator it=ts.iterator();
while(it.hasNext()){
Student stu=(Student)it.next();
System.out.println(stu.getName()+"...."+stu.getAge());
}
}
public static void method_1(){
TreeSet ts=new TreeSet();
ts.add(new Student("lisi01",22));
ts.add(new Student("lisi007",20));
ts.add(new Student("lisi09",19));
ts.add(new Student("lisi01",19));

Iterator it=ts.iterator();
while(it.hasNext()){
Student stu=(Student)it.next();
System.out.println(stu.getName()+"...."+stu.getAge());
}
}

}

class Student implements Comparable{
private String name;
private int age;

Student(String name,int age){
this.name=name;
this.age=age;
}
public String getName(){
return name;
}
public int getAge(){
return age;
}

@Override
public int compareTo(Object obj) {
if(!(obj instanceof Student))
throw new RuntimeException("不是学生对象");
Student stu=(Student)obj;
return new Integer(this.age).compareTo(new Integer(stu.getAge()));
}

}

class StudentComparator implements Comparator{

@Override
public int compare(Object o1, Object o2) {
Student t1=(Student)o1;
Student t2=(Student)o2;
int num=t1.getName().compareTo(t2.getName());
if(num==0)
return new Integer(t1.getAge()).compareTo(new Integer(t2.getAge()));
return num;
}

}



[size=medium][b]TreeSet练习[/b][/size]

/**
* 练习 :按照字符串的长度排序
* 字符串本身具备比较性,但是他的比较方式不是所需要的.
*
* 这时就只能使用比较器.
* 注意 : 主要和次要条件的比较
*/

public class TreeSetTest {

public static void main(String[] args) {
TreeSet ts=new TreeSet(new StrLenComparator());
ts.add("abcde");
ts.add("cc");
ts.add("bad"); //长度都相同 内容不同
ts.add("gdg"); //长度都相同 内容不同
ts.add("hahaha");

Iterator it=ts.iterator();

while(it.hasNext())
System.out.println(it.next());

}

}

class StrLenComparator implements Comparator{

@Override
public int compare(Object o1, Object o2) {
String s1=(String)o1;
String s2=(String)o2;

/*
if(s1.length()>s2.length())
return 1;
if(s1.length()==s2.length())
return 0;
return -1;
*/
int num=new Integer(s1.length()).compareTo(new Integer(s2.length()));

//主要条件判断完了 判断次要条件
if(num==0)
return s1.compareTo(s2);

return num;
}

}
潮汐研究作为海洋科学的关键分支,融合了物理海洋学、地理信息系统及水利工程等多领域知识。TMD2.05.zip是套基于MATLAB环境开发的潮汐专用分析工具集,为科研人员与工程实践者提供系统化的潮汐建模与计算支持。该工具箱通过模块化设计实现了两大核心功能: 在交互界面设计方面,工具箱构建了图形化操作环境,有效降低了非专业用户的操作门槛。通过预设参数输入模块(涵盖地理坐标、时间序列、测站数据等),用户可自主配置模型运行条件。界面集成数据加载、参数调整、可视化呈现及流程控制等标准化组件,将复杂的数值运算过程转化为可交互的操作流程。 在潮汐预测模块中,工具箱整合了谐波分解法与潮流要素解析法等数学模型。这些算法能够解构潮汐观测数据,识别关键影响要素(包括K1、O1、M2等核心分潮),并生成不同时间尺度的潮汐预报。基于这些模型,研究者可精准推算特定海域的潮位变化周期与振幅特征,为海洋工程建设、港湾规划设计及海洋生态研究提供定量依据。 该工具集在实践中的应用方向包括: - **潮汐动力解析**:通过多站点观测数据比对,揭示区域主导潮汐成分的时空分布规律 - **数值模型构建**:基于历史观测序列建立潮汐动力学模型,实现潮汐现象的数字化重构与预测 - **工程影响量化**:在海岸开发项目中评估人工构筑物对自然潮汐节律的扰动效应 - **极端事件模拟**:建立风暴潮与文潮耦合模型,提升海洋灾害预警的时空精度 工具箱以"TMD"为主程序包,内含完整的函数库与示例脚本。用户部署后可通过MATLAB平台调用相关模块,参照技术文档完成全流程操作。这套工具集将专业计算能力与人性化操作界面有机结合,形成了从数据输入到成果输出的完整研究链条,显著提升了潮汐研究的工程适用性与科研效率。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值