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同城.新浪微博.趣分 ...
 
随机推荐
- Android属性动画完全解析(中)
			
转载:http://blog.csdn.net/guolin_blog/article/details/43536355 大家好,在上一篇文章当中,我们学习了Android属性动画的基本用法,当然也是 ...
 - ocruntime
			
原作: http://www.jianshu.com/p/25a319aee33d 三种方法的选择 Runtime提供三种方式来将原来的方法实现代替掉,那该怎样选择它们呢? Method Resolu ...
 - 【Java】斐波那契数列(Fibonacci Sequence、兔子数列)的3种计算方法(递归实现、递归值缓存实现、循环实现、尾递归实现)
			
斐波那契数列:0.1.1.2.3.5.8.13………… 他的规律是,第一项是0,第二项是1,第三项开始(含第三项)等于前两项之和. > 递归实现 看到这个规则,第一个想起当然是递归算法去实现了, ...
 - css基本知识
			
WANGJUN59451 css基本知识 1.CSS 简介 CSS 指层叠样式表 (Cascading Style Sheets),是一种用来表现 HTML 文档样式的语言,样式定义如何显示 HT ...
 - CodeForces 34B Sale
			
Sale Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Submit Status ...
 - CodeForces 148B  Escape
			
Escape Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Submit Stat ...
 - c++ stl string char* 向 string 转换的问题
			
请看下面代码 string AddString(const string& a,const string & b) { return a + b; } int _tmain(int a ...
 - Django的Many-to-Many(多对多)模型
			
Django的Many-to-Many(多对多)模型 日期:2012-05-05 | 来源:未知 | 作者:redice | 人围观 | 1 人鼓掌了! 鲲鹏Web数据抓取 - 专业Web ...
 - window--窗口
			
创建窗口 1. 通过标签窗口窗口. <div id="win" class="easyui-window" title="My Window&q ...
 - SQL Group By/Having
			
有时候需要检查DataBase里面是不是存在重复的数据,那么比较常用的就是通过Group By来进行分组,然后Having出来,如下: ))