树集合,树映射

树集合

不安添加顺序排序,按照集合的实例实现的Comparable接口的compareTo方法来排序,左上大,右下小

方法

public boolean add(E e)
public void clear()
public boolean contains(E e)//是否有这个对象
public E first();//得到一个结点
public E first();
public boolean remove(E e)
public int size()public boolean isEmpty()//是否空

测试代码

package cgfg;

import java.util.Iterator;
import java.util.TreeSet;

public class Test{
    public static void main(String args[]){
        TreeSet<Student> tree1=new TreeSet<Student>();
        tree1.add(new Student("huang",3));
        tree1.add(new Student("ga",5));
        tree1.add(new Student("bing",2));
        tree1.add(new Student("koo",1));
        Iterator<Student> iterator1=tree1.iterator();
        for(;iterator1.hasNext();){
            Student a=iterator1.next();
            System.out.print(a.getHeight());
        }
        System.out.println("");
        System.out.println(tree1.first().getHeight());
        System.out.println(tree1.last().getHeight());
    }
}

class Student implements Comparable{
    private String name;
    private int height;
    Student(String a,int b){
        name=a;
        height=b;
    }
    int getHeight(){
        return height;
    }
    String getName(){
        return name;
    }
    public int compareTo(Object b){
        Student b2=(Student)b;
        return height-b2.height;
    }
}



树映射

树和映射一起来,按照映射的Key 来排大小

测试代码(一位学生有数学和英语的成绩,可以调key来按照哪个顺序排序

package cgfg;

import java.util.Collection;
import java.util.Iterator;
import java.util.TreeMap;

public class Test{
    public static void main(String args[]){
        String mingzi[]={"huang","ga","bin","koo"};
        double math[]={32,45,64,34};
        double english[]={43,65,35,54};
        Student[] student=new Student[4];
        for(int i=0;i<4;i++){
            student[i]=new Student(mingzi[i],math[i],english[i]);
        }
        TreeMap<StudentKey,Student> tree1=new TreeMap<StudentKey,Student>();
        for(int i=0;i<4;i++){
            tree1.put(new StudentKey(student[i].english), student[i]);
        }
        Collection<Student> a=tree1.values();
        Iterator<Student> iterator1=a.iterator();
        for(;iterator1.hasNext();){
            Student b=iterator1.next();
            System.out.println(b.name+" "+b.english);
        }
        tree1.clear();
        for(int i=0;i<4;i++){
            tree1.put(new StudentKey(student[i].math), student[i]);
        }
        a=tree1.values();
        iterator1=a.iterator();
        for(;iterator1.hasNext();){
            Student b=iterator1.next();
            System.out.println(b.name+" "+b.math);
        }
    }
}

class StudentKey implements Comparable{
    double num;
    StudentKey(double a){
        num=a;
    }
    public int compareTo(Object a){
        StudentKey b=(StudentKey)a;
        return (int)(num-b.num);
    }
}

class Student{
    String name;
    double english,math;
    Student(String a,double b,double c){
        name=a;
        english=b;
        math=c;
    }
}

时间: 2024-12-15 04:53:39

树集合,树映射的相关文章

数据结构第三部分:树与树的表示、二叉树及其遍历、二叉搜索树、平衡二叉树、堆、哈夫曼树、集合及其运算

参考:浙大数据结构(陈越.何钦铭)课件 1.树与树的表示 什么是树? 客观世界中许多事物存在层次关系 人类社会家谱 社会组织结构 图书信息管理 分层次组织在管理上具有更高的效率! 数据管理的基本操作之一:查找(根据某个给定关键字K,从集合R 中找出关键字与K 相同的记录).一个自然的问题就是,如何实现有效率的查找? 静态查找:集合中记录是固定的,没有插入和删除操作,只有查找 动态查找:集合中记录是动态变化的,除查找,还可能发生插入和删除 静态查找——方法一:顺序查找(时间复杂度O(n)) int

百练4082:树的镜面映射

总时间限制:  1000ms          内存限制:  65536kB 描述 一棵树的镜面映射指的是对于树中的每个结点,都将其子结点反序.例如,对左边的树,镜面映射后变成右边这棵树 . a a / | \ / | b c f ===> f c b / \ / d e e d 我们在输入输出一棵树的时候,常常会把树转换成对应的二叉树,而且对该二叉树中只有单个子结点的分支结点补充一个虚子结点"$",形成"伪满二叉树". 例如,对下图左边的树,得到下图右边的伪

【数据结构】树与树的表示、二叉树存储结构及其遍历、二叉搜索树、平衡二叉树、堆、哈夫曼树与哈夫曼编码、集合及其运算

1.树与树的表示 什么是树? 客观世界中许多事物存在层次关系 人类社会家谱 社会组织结构 图书信息管理 分层次组织在管理上具有更高的效率! 数据管理的基本操作之一:查找(根据某个给定关键字K,从集合R 中找出关键字与K 相同的记录).一个自然的问题就是,如何实现有效率的查找? 静态查找:集合中记录是固定的,没有插入和删除操作,只有查找 动态查找:集合中记录是动态变化的,除查找,还可能发生插入和删除 静态查找--方法一:顺序查找(时间复杂度O(n)) int SequentialSearch(St

Hash树(散列树)和Trie树(字典树、前缀树)

1.Hash树 理想的情况是希望不经过任何比较,一次存取便能得到所查的记录, 那就必须在记的存储位置和它的关键字之间建立一个确定的对应关系f,使每个关键字和一个唯一的存储位置相对应.因而在查找时,只要根据这个对应关系f找到 给定值K的像f(K).由此,不需要进行比较便可直接取得所查记录.在此,我们称这个对应关系为哈希(Hash)函数,按这个思想建立的表为哈希表. 在哈希表中对于不同的关键字可能得到同一哈希地址,这种现象称做冲突.在一般情况下,冲突只能尽可能地减少,而不能完全避免.因为哈希函数是从

【数据结构】前缀树/字典树/Trie

[前缀树] 用来保存一个映射(通常情况下 key 为字符串  value 为字符串所代表的信息) 例如:一个单词集合 words = {  apple, cat,  water  }   其中 key 为单词      value 代表该单词是否存在 words[ 'apple' ] = 存在     而     word[ ' abc' ] = 不存在 图示:一个保存了8个键的trie结构,"A", "to", "tea", "ted

Tire树(字典树)

from:https://www.cnblogs.com/justinh/p/7716421.html Trie,又经常叫前缀树,字典树等等.它有很多变种,如后缀树,Radix Tree/Trie,PATRICIA tree,以及bitwise版本的crit-bit tree.当然很多名字的意义其实有交叉. 定义 在计算机科学中,trie,又称前缀树或字典树,是一种有序树,用于保存关联数组,其中的键通常是字符串.与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定.一个节点的所有

集合和映射(Set And Map)

目录 集合 Set 基于二分搜索树实现集合 基于链表实现集合 集合的时间复杂度分析 映射 Map 基于链表实现映射 基于二分搜索树实现映射 映射的时间复杂度分析 leetcode上关于集合和映射的问题 集合 Set ??Set是一种新的数据结构,类似于数组,但是不能添加重复的元素,基于Set集合的这个特性,我们可以使用Set集合进行客户统计和词汇统计等,集合中常用的方法如下: public interface Set<E> { void add(E e); //添加元素e,不能添加重复元素 b

[POJ] #1003# 487-3279 : 桶排序/字典树(Trie树)/快速排序

一. 题目 487-3279 Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 274040   Accepted: 48891 Description Businesses like to have memorable telephone numbers. One way to make a telephone number memorable is to have it spell a memorable word or

bzoj3110: [Zjoi2013]K大数查询 【树套树,标记永久化】

好久没写题解了. 但是这题太神了然后做法太神了于是写一下. 这题做法很多,比如黄学长hzw的权值线段树套线段树,比如学长云的bit套主席树(其实是写法更神然后我不会用). 然后看到hzhwcmhf大神题解. http://tieba.baidu.com/p/2246783535 震惊了. 好了开说说做法.建一颗朴素的线段树,树的每个点表示每个区间,然后每个区间建两棵树,一棵是mark树,一棵是all树,两棵都是权值线段树. “mark表示该区间每个点上都会加上mark线段树里的元素 all表示该