java 集合(Set2)
TreeSet:
1.向TreeSet添加元素时
如果元素具有自然特性,那么就按照元素的自然顺序的特点进行排序储存。
如果不具备,就要实现Compareable接口中的compareTo() 方法。
可以直接实现Compareable接口,但最好自己定义比较器类。
2.TreeSet的底层实现是红黑树,也叫二叉树,集合中的元素一个个进行比较时
当把拿出来的第一个元素当成树根,依次拿其它元素进行比较如果大于树根
就放在其右支,小于则放在其左支,如此迭代,直到所有元素被比较完,安放完。
注意:在二叉树中出现3个元素,还未形成二叉结构时,就要重新排列,就是把
根和支的位置改变了。
(1, 2,3,4) (a, b, c, d )自然顺序
import java.util.*;
import java.util.ListIterator;
public class ex12 {
public static void main(String[] args) { TreeSet set = new TreeSet();
set.add(new Emp(100, "Tom", 100));
set.add(new Emp(101, "Tom", 400));
set.add(new Emp(109, "Tom", 100));//Ctrl + d
set.add(new Emp(109, "Tom", 99));//Ctrl + d
set.add(new Emp(209, "Tom", 130));//Ctrl + d
System.out.println(set); }
} class Emp implements Comparable{
int id;
String name;
int money; public Emp(int id, String name, int money) {
this.id = id;
this.name = name;
this.money = money;
} @Override
public String toString() {
return "{ id = " + this.id + " ,name = " + this.name + " ,money = " + money + " }";
} @Override//Ctrl + O
public int compareTo(Object o) {
Emp e = (Emp)o;
return this.money - e.money ;
}
}
[{ id = 109 ,name = Tom ,money = 99 }, { id = 100 ,name = Tom ,money = 100 }, { id = 209 ,name = Tom ,money = 130 }, { id = 101 ,name = Tom ,money = 400 }]
Process finished with exit code 0
import java.util.*;
import java.util.ListIterator;
public class ex12 {
public static void main(String[] args) { MyCompare my = new MyCompare();
TreeSet set = new TreeSet(my);//创建构造器时传入构造器***********
set.add(new Emp(100, "Tom", 100));
set.add(new Emp(101, "Tom", 400));
set.add(new Emp(109, "Tom", 100));//Ctrl + d
set.add(new Emp(109, "Tom", 99));
set.add(new Emp(209, "Tom", 130));
System.out.println(set); }
} class Emp {
int id;
String name;
int money; public Emp(int id, String name, int money) {
this.id = id;
this.name = name;
this.money = money;
} @Override
public String toString() {
return "{ id = " + this.id + " ,name = " + this.name + " ,money = " + money + " }";
}
} //自定义构造器
class MyCompare implements Comparator<Emp> {
@Override
public int compare(Emp o1, Emp o2) {
return o1.id - o2.id;
}
}
//按id排序
[{ id = 100 ,name = Tom ,money = 100 }, { id = 101 ,name = Tom ,money = 400 }, { id = 109 ,name = Tom ,money = 100 }, { id = 209 ,name = Tom ,money = 130 }]
Process finished with exit code 0
java 集合(Set2)的更多相关文章
- JAVA 集合List,数组,Set,Map,直接的相互转换
Java集合转换[List<-->数组.List<-->Set.数组<-->Set.Map-->Set.Map-->List] //List--> ...
- java集合框架1
1.综述 所有集合类都位于java.util包下.集合中只能保存对象(保存对象的引用变量).(数组既可以保存基本类型的数据也可以保存对象). 当我们把一个对象放入集合中后,系统会把所有集合元素都当成O ...
- java集合简介
java集合主要包括以下几点 Java 集合概述 Collection 接口 Iterator 接口 Set List Map Collections 工具类 Enumeration 1.java集合 ...
- java集合分析(转载)
参考文章:浅谈Java中的Set.List.Map的区别 Java 7 Collections详解 java中集合分为三类: Set(集) List(列表) Map(映射) Set和List继承自Co ...
- Java集合框架之四大接口、常用实现类
Java集合框架 <Java集合框架的四大接口> Collection:存储无序的.不唯一的数据:其下有List和Set两大接口. List:存储有序的.不唯一的数据: Set:存储无序的 ...
- Java集合排序及java集合类详解--(Collection, List, Set, Map)
1 集合框架 1.1 集合框架概述 1.1.1 容器简介 到目前为止,我们已经学习了如何创建多个不同的对象,定义了这些对象以后,我们就可以利用它们来做一 ...
- 死磕 java集合之CopyOnWriteArraySet源码分析——内含巧妙设计
问题 (1)CopyOnWriteArraySet是用Map实现的吗? (2)CopyOnWriteArraySet是有序的吗? (3)CopyOnWriteArraySet是并发安全的吗? (4)C ...
- 032.[转] Java集合框架
Java集合框架和各实现类性能测试 pphh发布于2017年11月17日 Java语言集合框架提供一系列集合接口类 (collection interface)和实现类,满足对集合中元素对象的各种集合 ...
- java集合的简单用法
typora-root-url: iamge [TOC] 1.集合接口 1.1将集合的接口与实现分离 与现代的数据结构类库的常见情况一样,Java集合类库也将接口(interface)与实现(im ...
- Java集合专题总结(1):HashMap 和 HashTable 源码学习和面试总结
2017年的秋招彻底结束了,感觉Java上面的最常见的集合相关的问题就是hash--系列和一些常用并发集合和队列,堆等结合算法一起考察,不完全统计,本人经历:先后百度.唯品会.58同城.新浪微博.趣分 ...
随机推荐
- 多条件查询(php+mysql) 租房子例子
<body> <?php //多条件 $tiaojian2= " 2=2 "; $attr2 = ""; //判断区域 if(!empty($ ...
- 【Eclipse】安装subclipse的Eclipse插件
下载地址 subclipse subclipse Download and Install 一般来说,有两种方式:在线安装.离线包安装. 离线包安装 这里记录的是离线包的安装方式: 下载好离线包 He ...
- JavaScript的循环语句
JavaScript的循环语句 1.JavaScript的循环语句 (1)for循环语句 - 循环代码块一定的次数: (2)for/in循环语句 - 循环遍历对象的属性: (3)while循环语句 - ...
- SqlSever基础 group by之后,加having 对分组之后的数据在进行处理
镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...
- BZOJ 2584: [Wc2012]memory(扫描线+线段树)
题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=2584 题意:给出平面n个线段,任意两个线段严格不相交,且每个线段不平行于坐标轴.移 ...
- UVA 11552 四 Fewest Flops
Fewest Flops Time Limit:2000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Submit Statu ...
- [Unity3D]开发视图中的标记 - Gizmos
这个类用来做自己的组件很不错,比如下面这个图的路径点,他其实是个Empty Object,可以自己加脚本让他带上标记.官方解释还可以用来做帮助提示的-.- 大游戏场景的制作时候,你可以用这个在地图上写 ...
- 注册dll失败
注册DLL的时候一出现错误: win8下: (右键弹出) 如果再不行, 64位系统下,把DLL移动到C:\Windows\SysWOW64下 更改路径
- Spring MVC无法获取ajax POST的参数和值
一.怎么会这个样子 很简单的一个想法,ajax以POST的方式提交一个表单,Spring MVC解析.然而一次次的打印null折磨了我整整一天…… 最后的解决现在看来是很明显的问题,“只是当时已惘然” ...
- 使用escape编码地址栏中的中文字符
在通过地址栏传递参数的时候,有时候会遇到中文参数,在获取这种中文参数值得时候, 往往会出现乱码, 解决办法如下: 在传递参数的使用 escape 函数进行编码,获取的时候再进行解码即可. 例如: va ...