java 集合(Set2)

时间:2021-12-24 04:01:51

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)的更多相关文章

  1. JAVA 集合List&comma;数组,Set&comma;Map&comma;直接的相互转换

    Java集合转换[List<-->数组.List<-->Set.数组<-->Set.Map-->Set.Map-->List] //List--> ...

  2. java集合框架1

    1.综述 所有集合类都位于java.util包下.集合中只能保存对象(保存对象的引用变量).(数组既可以保存基本类型的数据也可以保存对象). 当我们把一个对象放入集合中后,系统会把所有集合元素都当成O ...

  3. java集合简介

    java集合主要包括以下几点 Java 集合概述 Collection 接口 Iterator 接口 Set List Map Collections 工具类 Enumeration 1.java集合 ...

  4. java集合分析(转载)

    参考文章:浅谈Java中的Set.List.Map的区别 Java 7 Collections详解 java中集合分为三类: Set(集) List(列表) Map(映射) Set和List继承自Co ...

  5. Java集合框架之四大接口、常用实现类

    Java集合框架 <Java集合框架的四大接口> Collection:存储无序的.不唯一的数据:其下有List和Set两大接口. List:存储有序的.不唯一的数据: Set:存储无序的 ...

  6. Java集合排序及java集合类详解--&lpar;Collection&comma; List&comma; Set&comma; Map&rpar;

    1         集合框架 1.1         集合框架概述 1.1.1         容器简介 到目前为止,我们已经学习了如何创建多个不同的对象,定义了这些对象以后,我们就可以利用它们来做一 ...

  7. 死磕 java集合之CopyOnWriteArraySet源码分析——内含巧妙设计

    问题 (1)CopyOnWriteArraySet是用Map实现的吗? (2)CopyOnWriteArraySet是有序的吗? (3)CopyOnWriteArraySet是并发安全的吗? (4)C ...

  8. 032&period;&lbrack;转&rsqb; Java集合框架

    Java集合框架和各实现类性能测试 pphh发布于2017年11月17日 Java语言集合框架提供一系列集合接口类 (collection interface)和实现类,满足对集合中元素对象的各种集合 ...

  9. java集合的简单用法

    typora-root-url: iamge [TOC] 1.集合接口 1.1将集合的接口与实现分离 ​ 与现代的数据结构类库的常见情况一样,Java集合类库也将接口(interface)与实现(im ...

  10. Java集合专题总结(1):HashMap 和 HashTable 源码学习和面试总结

    2017年的秋招彻底结束了,感觉Java上面的最常见的集合相关的问题就是hash--系列和一些常用并发集合和队列,堆等结合算法一起考察,不完全统计,本人经历:先后百度.唯品会.58同城.新浪微博.趣分 ...

随机推荐

  1. http请求,普通的get和post方法

    在http://www.cnblogs.com/ITtangtang/p/3968093.html的基础上封装了一下get和post请求的常用方法, 虽然很简单,也晒晒 import org.apac ...

  2. ThreadLocal详解(实现多线程同步访问变量)

    ThreadLocal翻译成中文比较准确的叫法应该是:线程局部变量. 这个玩意有什么用处,或者说为什么要有这么一个东东?先解释一下,在并发编程的时候,成员变量如果不做任何处理其实是线程不安全的,各个线 ...

  3. 《AngularJS》5个实例详解Directive(指令)机制

    本文整理并扩展了<AngularJS>这本书第六章里面的内容,此书近期即将由电子工业出版社出版,敬请期待口令:Angular 1.一点小说明 指令的作用:实现语义化标签 我们常用的HTML ...

  4. 【bzoj1853】 Scoi2010—幸运数字

    http://www.lydsy.com/JudgeOnline/problem.php?id=1853 (题目链接) 今天考试考了容斥,结果空知道结论却不会写→_→ 题意 求区间中不含6,8两个数字 ...

  5. hdoj 2222

    http://acm.hdu.edu.cn/showproblem.php?pid=2222 第一道 AC自动机.....trie树的建立 和 AC自动机的查询,,可作模版... 解题思路:AC的应用 ...

  6. 201521123050 《Java程序设计》第11周学习总结

    1. 本周学习总结 2. 书面作业 本次PTA作业题集多线程 1.互斥访问与同步访问完成题集4-4(互斥访问)与4-5(同步访问) 1.1 除了使用synchronized修饰方法实现互斥同步访问,还 ...

  7. centos7之zabbix服务器的常规优化

    一.硬件需求分析 1.首先我们来分析一个硬件需求,这里我以400个agent计算,CPU建议是4核,内存不要少于8GB,硬盘只要不是用了很久的主机就行,容量的话建议300GB基本就够使用好一段时间了, ...

  8. 移动端页面:viewport与分辨率的坑

    <meta name="viewport" content="width=device-width, user-scalable=no"> < ...

  9. IntelliJ IDEA 2017版 Spring5 的RunnableFactoryBean配置

    1.新建RunnableFactoryBean package com.spring4.pojo; import org.springframework.beans.factory.FactoryBe ...

  10. MYSQL学习笔记 (五)常用的聚合函数

    1.COUNT(e1) 语法:COUNT(e1) 参数:e1为一个表达式,可以是任意的数据类型 返回:返回数值型数据 作用:返回e1指定列不为空的记录总数 例子: 1)单独使用