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
时间: 2024-10-26 16:01:44

java 集合(Set2)的相关文章

java集合框架22

思想:在面向对象的思想里,一种数据结构被认为是一种容器.在本质上来讲是一个类,提供方法支持查找,插入和删除等等操作. Java集合框架支持以下俩种类型的容器: 存储一个元素集合,简称为集合Collection 存储键值对,称为图Map 集合collection 三种主要类型 : 规则集(set) , 线型表(List) , 队列(Queue) set: 存储一组不重复的数据 List: 存储由元素构成的有序集合 Queue: 存储先进先出方式处理的对象 细说Collection接口: 它是处理对

Java集合排序及java集合类详解--(Collection, List, Set, Map)

1         集合框架 1.1         集合框架概述 1.1.1         容器简介 到目前为止,我们已经学习了如何创建多个不同的对象,定义了这些对象以后,我们就可以利用它们来做一些有意义的事情. 举例来说,假设要存储许多雇员,不同的雇员的区别仅在于雇员的身份证号.我们可以通过身份证号来顺序存储每个雇员,但是在内存中实现呢?是不是要准备足够的内存来存储1000个雇员,然后再将这些雇员逐一插入?如果已经插入了500条记录,这时需要插入一个身份证号较低的新雇员,该怎么办呢?是在内

java集合入门和深入学习,看这篇就差不多了

一.集合入门总结 集合框架: Java中的集合框架大类可分为Collection和Map:两者的区别: 1.Collection是单列集合:Map是双列集合 2.Collection中只有Set系列要求元素唯一:Map中键需要唯一,值可以重复 3.Collection的数据结构是针对元素的:Map的数据结构是针对键的. 泛型: 在说两大集合体系之前先说说泛型,因为在后面的集合中都会用到:所谓的泛型就是:类型的参数化 泛型是类型的一部分,类名+泛型是一个整体 如果有泛型,不使用时,参数的类型会自动

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

问题 (1)CopyOnWriteArraySet是用Map实现的吗? (2)CopyOnWriteArraySet是有序的吗? (3)CopyOnWriteArraySet是并发安全的吗? (4)CopyOnWriteArraySet以何种方式保证元素不重复? (5)如何比较两个Set中的元素是否完全一致? 简介 CopyOnWriteArraySet底层是使用CopyOnWriteArrayList存储元素的,所以它并不是使用Map来存储元素的. 但是,我们知道CopyOnWriteArra

Java—集合框架List

集合的概念 现实生活中:很多的事物凑在一起 数学中的集合:具有共同属性的事物的总和 Java中的集合类:是一种工具类,就像是容器,存储任意数量的具有共同属性的对象 集合的作用 在类的内部,对数据进行组织(针对作用与意义一样的属性,将他们放到一个集合中) 简单而快速的搜索大数量的条目 有的集合接口,提供了一系列排列有序的元素,并且可以在序列中快速的插入或删除有关元素 有的集合接口,提供了映射关系,可以通过关键字(key)去快速查找到对应的唯一对象,而这个关键字可以是任意类型 与数组相比 数组的长度

Java 集合

在Java Collections Framework中,不同类型的集合使用不同类型的数据结构以不同的方式存储它们的元素. 集合框架提供了遍历集合的以下方法: 使用迭代器 使用for-each循环 使用forEach()方法 使用迭代器 迭代器可以对集合执行以下三个操作: 检查是否有尚未访问的元素. hasNext() 检查是否有下一个访问的元素. next() 删除集合的最后访问元素. remove() 例子1 使用迭代器打印列表的所有元素: import java.util.ArrayLis

《深入理解Java集合框架》系列文章

Introduction 关于C++标准模板库(Standard Template Library, STL)的书籍和资料有很多,关于Java集合框架(Java Collections Framework, JCF)的资料却很少,甚至很难找到一本专门介绍它的书籍,这给Java学习者们带来不小的麻烦.我深深的不解其中的原因.虽然JCF设计参考了STL,但其定位不是Java版的STL,而是要实现一个精简紧凑的容器框架,对STL的介绍自然不能替代对JCF的介绍. 本系列文章主要从数据结构和算法层面分析

Java集合相关面试问题和答案

Java集合相关面试问题和答案 面试试题 1.Java集合框架是什么?说出一些集合框架的优点? 每种编程语言中都有集合,最初的Java版本包含几种集合类:Vector.Stack.HashTable和Array.随着集合的广泛使用,Java1.2提出了囊括所有集合接口.实现和算法的集合框架.在保证线程安全的情况下使用泛型和并发集合类,Java已经经历了很久.它还包括在Java并发包中,阻塞接口以及它们的实现.集合框架的部分优点如下: (1)使用核心集合类降低开发成本,而非实现我们自己的集合类.

Java集合

JAVA集合小结   有序否 允许元素重复否 Collection 否 是 List 是 是 Set AbstractSet 否 否 HashSet TreeSet 是(用二叉树排序) Map AbstractMap 否 使用key-value来映射和存储数据,Key必须惟一,value可以重复 HashMap TreeMap 是(用二叉树排序) 几个面试常见问题:1.Q:ArrayList和Vector有什么区别?HashMap和HashTable有什么区别?   A:Vector和HashT

一大波Java来袭(五)——Java集合概述

把"Java集合"比作是容器,可以把多个对象(实际:是对象的引用),扔在容器中. JDK1.5之前,被丢进集合中的对象,会丢失起数据类型.默认为Object类型 JDK1.5之后,不会丢失数据类型,因为引入了"泛型"(作为下文重点) 本文将结合数据结构,重点讲述Java的4种集合体系的功能和用法,并给出不同应用场景改如何选择? 一.同样是用于"存储数据",既可以使用"数组",有可以使用"集合",有什么区别吗