TreeSet,Comparator】的更多相关文章

ThreeSet能够对集合中的对象排序,当TreeSet想集合中加入一个对象时,会把它插入到有序的对象序列中. ThreeSet自带了一个排序方法,这个方法规定了一般数据的排序规则,如果用户想要规定自己的排序方法,那么久要重写Comparator方法. 下面是一个ThreeSet自带方法排序的例子: 输出的结果为:[A,B,C,D,E,F] 可以看出ThreeSet内部对字符的排序. 那么现在我们定义一个Preson类,按照person类的score属性的升序排序,显然,ThreeSet本身并不…
JAVA之旅(二十)-HashSet,自定义存储对象,TreeSet,二叉树,实现Comparator方式排序,TreeSet小练习 我们继续说一下集合框架 Set:元素是无序(存入和取出的顺序不一定一致),元素不可以重复 Set集合的功能和Collection是一致的 我们重点关注的是子类对象 我们来聊聊 一.HashSet HashSet底层结构是哈希表 什么是HashSet? package com.lgl.hellojava; //公共的 类 类名 public class HelloJ…
使用TreeSet和Comparator,编写TreeSetTestInner类,要求对TreeSet中的元素"HashSet"."ArrayList"."TreeMap"."HashMap"."TreeSet"."LinkedList"进行升序和倒序排列,并使用匿名内部类和静态内部类分别实现. 方法一: 静态内部类 import java.util.*; public class Tr…
一.创建TreeSet实例 public static void main(String[] args) { TreeSet set = new TreeSet(); set.add("C"); set.add("B"); set.add("A"); set.add("F"); set.add("D"); System.out.println(set); } 输出 [A, B, C, D, F] 输出是有序…
1. Collections用法 Collections: 集合的工具类public static <T> void sort(List<T> list) 排序,升序public static <T> int binarySearch(List<?> list,T key) 二分查找,不存在返回负数,只能针对升序集合public static <T> T max(Collection<?> coll) 最大值public static…
今天在做导入功能时,看到一个感觉很好的去重算法,特分享给大家看看: 其原理利用了以下几点: 1.TreeSet里面不会有重复的元素,所以当把一个List放进TreeSet里面后,会自动去重 2.TreeSet去重也是有条件的,它依靠放入其中的元素的排序规则,所以放入其中的元素要有一个自定义的排序规则(此处表述不是很清楚,欢迎指正) 下面开始看好戏: 原本List<Person> persons 里面有3个元素: List<Person> persons = new ArrayLis…
有时候错误很奇怪啊,Comparator问题,在我的电脑上排序好用,但是在别的电脑上排序不好用, 真奇怪a…
public class Person implements Comparable{ private String name; private int age; public Person(){ super(); } public Person(String name, int age) { super(); this.name = name; this.age = age; } @Override public int hashCode() { return name.hashCode()+a…
为了方便,用lambda表达式代替comparator接口 例子如下: public static void main(String[] args) { TreeSet<Integer> nums = new TreeSet<>((a,b) -> (2*b-a)); nums.add(5); nums.add(2); nums.add(6); nums.add(-4); System.out.println(nums); } =============输出==========…
Set接口与List接口的不同之处在于: 不允许有重复的数据. 定义如下: public interface Set<E>extends Collection<E> 主要方法与collection接口差不多. 常用子类: 散列存放:HashSet 有序存放:TreeSet. Set接口实例无法像List接口一样双向输出. package 类集; import java.util.HashSet; import java.util.Set; public class test1{ p…
    ArrayList import java.util.ArrayList; public class C8_3 { public static void main(String[] args) { // TODO Auto-generated method stub ArrayList<Integer> nl = new ArrayList<Integer>(); nl.add((Integer) 1); nl.add((Integer) 2); nl.add((Integ…
ArrayList: 基于数组的数据结构,地址连续,一旦数据保存好了,查询效率比较高,但是因为其地址连续,所以增删数据需要移动数据,影响速度 内部数组长度默认为10,当需要扩容时,数组长度按1.5倍增长(old+(old>>1)),移除时长度-1:数组是被transient修饰,ArrayList通过readObject,writeObject方法实现序列化 LinkedList: 基于双向链表的数据结构,地址是任意的,对于增删比较快,查找比较慢(内部保存了Node类,通过不停的node.ne…
接口: *接口定义:使用interface关键字 * [修饰符] interface 接口名 [extends 父接口1,父接口2...]{ * //常量的声明 * //方法的声明 * } *接口成员的特点: *1.接口中所有的成员变量是常量,默认修饰符为public static final *2.接口中所有的方法都是抽象方法,默认修饰符为:public abstract *3.接口不能实例化,接口不能构造方法(抽象类不能实例化,但可以有构造方法) *4.java类是单继承,但接口可以是多继承…
Comparable 接口用于定义对象的自然顺序,而 comparator 通常用于定义用户 定制的顺序.Comparable 总是只有一个,但是可以有多个 comparator 来定义 对象的顺序.…
Comparator有两种实现方式: 1,匿名内部类 2,创建一个类用于实现Comparator,该类创建的对象就是比较器 Person类 public class Person implements Comparable<Person> { private String name; private String sex; private int age; private Book books; public String getName() { return name; } public v…
为什么出现集合类? 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式. 数组和集合类同是容器,有何不同? 数组虽然也可以存储对象,但长度是固定的,集合长度是可变的,数组中可以存储基本数据类型,集合只能存储对象 集合类的特点 集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象. collection 中有两个常见的接口,如一个是 List 另一个是Set List中有ArrayList,LinkedList,V…
今天我们来探索一下HashSet,TreeSet与LinkedHashSet的基本原理与源码实现,由于这三个set都是基于之前文章的三个map进行实现的,所以推荐大家先看一下前面有关map的文章,结合使用味道更佳. 具体代码在我的GitHub中可以找到 https://github.com/h2pl/MyTech 文章首发于我的个人博客: https://h2pl.github.io/2018/05/12/collection7 更多关于Java后端学习的内容请到我的CSDN博客上查看: htt…
1.排序的引入 由于TreeSet可以实现对元素按照某种规则进行排序,例如下面的例子 public class TreeSetDemo { public static void main(String[] args) { // 创建集合对象 // 自然顺序进行排序 TreeSet<Integer> ts = new TreeSet<Integer>(); // 创建元素并添加 // 20,18,23,22,17,24,19,18,24 ts.add(20); ts.add(18);…
09 Collection,Iterator,List,listIterator,Vector,ArrayList,LinkedList,泛型,增强for,可变参数,HashSet,LinkedHashSet,TreeSet import com.fly.bean.Student; public class Demo1_Array { public static void main(String[] args) { Student[] arr = new Student[5]; //创建引用类型…
<Java集合详解系列>是我在完成夯实Java基础篇的系列博客后准备开始写的新系列. 这些文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下Star.fork哈 文章首发于我的个人博客: www.how2playlife.com 今天我们来探索一下HashSet,TreeSet与LinkedHashSet的基本原理与源码实现,由于这三个set都是基于之…
/** * Collection接口  不唯一,无序 * 常用的方法: * add(Object e) 确保此 collection 包含指定的元素(可选操作). * size():获取集合中元素的个数 * remove(Object e):移除元素 * clear():清空集合中元素 * contains(Object e):判断集合中是否包含指定的元素 * isEmpty():判断集合是否为空 * iterator():获取集合对应的迭代器. * --List接口:不唯一,有序(插入顺序)…
TreeSet和TreeMap排序时比较元素要求元素对象必须实现Comparable接口 Collections的sort方法比较元素有两种方法: 元素对象实现Comparable接口 实体类Dog public class Dog implements Cloneable,Comparable<Dog> { private String name; private String age; public String getName() { return name; } public void…
Comparable与Comparator实际上是TreeSet集合的两种实现方式,用来实现对象的排序.下边介绍一下两种比较器的使用方法和区别. Comparable称为元素的自然顺序,或者叫做默认顺序. Comparator称为元素定制排序. 下边我们使用Student类来比较两个排序方法,类中有年龄和姓名两个属性. (1)Comparable(让元素自身具备比较性,元素需要实现Comparable接口,覆盖compareTo方法) ※如果我们希望按照学生年龄排序,当学生年龄相等时按照姓名排序…
一.Set接口实现类LinkedHashSet 实现继承图: 1.LinkedHashSet的全面说明 1) LinkedHashSet是 HashSet的子类 2) LinkedHashSet底层是一个LinkedHashMap,底层维护了一个数组+双向链表3)LinkedHashSet根据元素的hashCode值来决定元素的存储位置,同时使用链表维护元素的次序(图),这使得元素看起来是以插入顺序保存的.4) LinkedHashSet 不允许添重复元素 底层结构展示: LinkedHashS…
HashSet,锋芒毕露,我们最常用到.其他两个,我们较少用到,今天,我们看看他们的区别. import java.util.HashSet; import java.util.Set; public class HashSetTester { public static void main(String[] args) { Set<Integer> set = new HashSet<Integer>(); set.add(15); set.add(31); set.add(12…
原文地址https://segmentfault.com/a/1190000005738975 实体类:java.lang.Comparable(接口) + comareTo(重写方法),业务排序类 java.util.Comparator(接口) + compare(重写方法). 这两个接口我们非常的熟悉,但是 在用的时候会有一些不知道怎么下手的感觉,现在用案例进行总结,消除对这个知识点的理解盲区(个人的理解,如果有错误 请多多指教).一,在实际的需求中,我们需要根据对象的各种属性(标题,时间…
注:HashMap底层也是用数组,HashSet底层实际上也是HashMap,HashSet类中有HashMap属性(我们如何在API中查属性).HashSet实际上为(key.null)类型的HashMap.有key值而没有value值. 正因为以上的原因,TreeSet和TreeMap的实现也有些类似的关系. 注意:TreeSet和TreeMap非常的消耗时间,因此很少使用. 我们应该熟悉各种实现类的选择——非常体现你的功底. HashSet VS TreeSet:HashSet非常的消耗空…
从Comparator接口的源码,可以看到Comparator接口中的方法有三类: 1 普通接口方法 2 default方法 3 static方法 其中default方法和static方法 是java8新加的特性,default方法提供了方法实现,不强制接口实现类实现.static相较于default方法可以在直接用“接口名.方法名”调用. 那么,Comparator接口的实现类应该实现其中的comparator方法和equals方法. 但是,由于接口(接口可以看做一种特殊的类)以及该接口的实现…
        很长时间以来一直代码中用的比较多的数据列表主要是List,而且都是ArrayList,感觉有这个玩意就够了.ArrayList是用于实现动态数组的包装工具类,这样写代码的时候就可以拉进拉出,迭代遍历,蛮方便的.           也不知道从什么时候开始慢慢的代码中就经常会出现HashMap和HashSet之类的工具类.应该说HashMap比较多一些,而且还是面试经典题,平时也会多看看.开始用的时候简单理解就是个键值对应表,使用键来找数据比较方便.随后深入了解后发现这玩意还有点小…
41节介绍了HashSet,我们提到,HashSet有一个重要局限,元素之间没有特定的顺序,我们还提到,Set接口还有另一个重要的实现类TreeSet,它是有序的,与HashSet和HashMap的关系一样,TreeSet是基于TreeMap的,上节我们介绍了TreeMap,本节我们来详细讨论TreeSet. 下面,我们先来看TreeSet的用法,然后看实现原理,最后总结分析TreeSet的特点. 基本用法 构造方法 TreeSet的基本构造方法有两个: public TreeSet() pub…