问题一:本来认为TreeMap不能存放重复元素?其实并非如此: 其实一般情况下是不允许存放重复元素的,但是它并非这么死板,在一些情况下是可以存放重复元素的,存了又会有引入其他问题. 问题二:能不能存放null呢?正常情况下是不能的,会报异常,但是经过一些处理后是可以的. 解答问题一: 1.存放元素时,TreeMap实现外部比较器接口Comparator,并重写其compare方法,当判断元素重复时,强制compare方法返回一个非0的数,就可以将重复元素存入: TreeMap<Integer,S…
TreeSet和TreeMap不能存放重复元素?能不能存放null?其实不是这样的——灵活的二叉树   本文链接:https://blog.csdn.net/u010698072/article/details/55255073 问题一:本来认为TreeMap不能存放重复元素?其实并非如此:其实一般情况下是不允许存放重复元素的,但是它并非这么死板,在一些情况下是可以存放重复元素的,存了又会有引入其他问题.问题二:能不能存放null呢?正常情况下是不能的,会报异常,但是经过一些处理后是可以的.解答…
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…
先看下面一段代码: package 类集; import java.util.Set; import java.util.TreeSet; class Person{ private String name ; private int age ; public Person(String name,int age){ this.name = name ; this.age = age ; } public String gtoString(){ return "姓名:" + this.…
TreeSet和TreeMap元素之间比较大小是借助Comparator对象的compare方法. 但有些时候,即便compare()返回0也不意味着这两个元素直观上相同. 比如元素是二元组[a,b]的形式:对于[a1,b1]和[a2,b2],规定a1>a2&&b1>b2时[a1,b1]>[a2,b2],a1<a2&&b1<b2时[a1,b1]<[a2,b2],否则[a1,b1]=[a2,b2]. 也就是说即便[a1,b1]=[a2,b2…
1.TreeMap TreeMap是可排序的Map类,使用这个类时,TreeMap会对存放的数据进行排序. 排序是根据key来排序的,排序规则是key实现comparable接口中的compareTo()方法 或指定一个排序规则类实现comparator接口中的compare()方法,将其实例化的对象传入Tree. 我们来看下Tree排序的执行过程. TreeMap还有其他构造方法,我们就看这两两个. 第一个是没有使用排序规则类的构造方法,那么作为key必须实现了Comparable接口中的co…
一.Set接口实现类LinkedHashSet 实现继承图: 1.LinkedHashSet的全面说明 1) LinkedHashSet是 HashSet的子类 2) LinkedHashSet底层是一个LinkedHashMap,底层维护了一个数组+双向链表3)LinkedHashSet根据元素的hashCode值来决定元素的存储位置,同时使用链表维护元素的次序(图),这使得元素看起来是以插入顺序保存的.4) LinkedHashSet 不允许添重复元素 底层结构展示: LinkedHashS…
TreeMap和TreeSet的异同: 相同点: TreeMap和TreeSet都是有序的集合,也就是说他们存储的值都是拍好序的. TreeMap和TreeSet都是非同步集合,因此他们不能在多线程之间共享,不过可以使用方法Collections.synchroinzedMap()来实现同步 运行速度都要比Hash集合慢,他们内部对元素的操作时间复杂度为O(logN),而HashMap/HashSet则为O(1). 不同点: 最主要的区别就是TreeSet和TreeMap非别实现Set和Map接…
今天来看下set map的操作,让我们从代码出发 val data = mutable.Set.empty[Int] data ++= List(1,2,3)//在空set上加入列表 data += 4//在set上加入新元素 data --= List(2,3) println(data) //Set(1, 4)data += 1println(data)//Set(1, 4),说明Set元素不能重复data.clear() println(data)//Set() 我们可以看出,Set和Li…
TreeSet与TreeMap的关系: 1.TreeSet 实际上就是用TreeMap来组织数据的,因为在TreeSet中保存了一个NavigableMap<e,Object>接口实例变量,而该接口的实现类就是TreeMap 2.TreeSet与TreeMap都是用二叉树的数据结构来存储数据 3.TreeSet和TreeMap中保存的数据除了Integer和String等有默认顺序的类型外的自定义类型都需要实现Comparable接口并重写compareTo()方法. TreeSet和Tree…
如果加入TreeSet和TreeMap的元素没有实现comprable中的compareTo()方法,那么会报错"treeset cannot be cast to java.lang.Comparable". 要解决这个问题有两种方法: (1)让元素自身具有比较性:可以实现Comparable接口,实现compareTo()方法: (2)让集合自身具有比较性:可以定义比较器,即让集合实现Comparator接口,然后实现compare()方法: 方法一: 因此需要对元素类型实现Com…
1.考虑不重复元素,重复元素不添加 import java.awt.List; import java.util.ArrayList; import java.util.TreeSet; public class Solution { public static int[] intersection(int[] nums1,int[] nums2){ TreeSet<Integer> set =new TreeSet<>(); for(int num : nums1)//把不重复的…
1. 此前二叉搜索树相关的内容我们均假设可以把整个数据结构存储在计算机的内存中,但是如果数据量过大时,必须把数据结构放在磁盘上,导致大O模型不在适用.目前计算机处理器每秒至少可以执行5亿条指令,磁盘访问一次需要大概10ms,1s可访问100次左右:这就意味着一次磁盘访问相当于执行50万条指令.所以导致运行时间增长的主要就是因为磁盘访问次数,我们愿意为减少磁盘访问进行大量的计算.但是典型的二叉搜索树的高度为log2(N),查询一个数据就要进行log2(N)次比较,这无疑导致磁盘访问次数比较大,运行…
1.TreeSet原理: /* * TreeSet存储对象的时候, 可以排序, 但是需要指定排序的算法 *  * Integer能排序(有默认顺序), String能排序(有默认顺序), 自定义的类存储的时候出现异常(没有顺序) *  * 如果想把自定义类的对象存入TreeSet进行排序, 那么必须实现Comparable接口 *   在类上implement Comparable  *   重写compareTo()方法 *   在方法内定义比较算法, 根据大小关系, 返回正数负数或零 *  …
TreeSet 有两种排序方式 1. Java.lang.Comparble+compareTo new TreeSet() 用这种方法必须要求实体类实现Comparable接口,也就是说要求添加到TreeSet中的元素是可排序的 2. java.util.Comparator +compare 举个TreeSet栗子: package com.etc.test; import java.util.Comparator; import java.util.TreeSet; import com.…
1.Set和Map的关系: Set代表一种集合元素无序.不可重复的集合,Map代表一种由多个key-value对组成的集合. Set的集合继承体系: Map关系集合 Map集合的key特征:所有key不能重复,key之间没有顺序.Map集合的所有key将具有set集合的特征. 对Set做改造可将Set改造成Map集合: 2.HashSet和HashMap的区别和联系:    对于HashSet,系统采用Hash算法决定集合元素的存储位置:对于HashMap,系统将value当成key的附属物,系…
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…
首先定义如下数组: var arr=[0,2,3,5,6,9,2]; 我们可以看到数组中存在重复元素'2'; 最后通过jquery筛选应该得到[0,2,3,5,6,9]; ok,首先我们再定义一个空数组,用来存放最后筛选出来的元素: var new_arr=[]; 利用jquery的$.inArray可以轻松实现: 遍历数组元素: for(var i=0;i<arr.length;i++) { var items=arr[i]; //判断元素是否存在于new_arr中,如果不存在则插入到new_…
题目:http://acm.hunnu.edu.cn/online/?action=problem&type=show&id=11313 湖师大的比赛,见我的另一篇水题题解,这里要说的是我YY出来的C题,无重复元素序列的最长公共子序列. 用常规的做法会超时,于是我YY出来一个方法,记录第一组各个数字的位置,读取第二组,把第一组出现的相同数字的位置放入序列,没出现就不放...然后就转成LIS题目了... 具体用例子来说明下,比如两个序列 3 2 1 5 4 2 1 5 4 3 很明显,LCS…
219. 存在重复元素 II 给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nums [j],并且 i 和 j 的差的绝对值最大为 k. // 实现原理:这里面要求的一点是,其距离问题,也就是最大为K,name也就是说只要在距离的K的范围内,找到重复元素// 即返回true,同样的范围已经大于K值的时候,这时候就要更新序列的起始位置.使用双指针策略进行. public boolean containsNearbyDuplicate(in…
今天在做导入功能时,看到一个感觉很好的去重算法,特分享给大家看看: 其原理利用了以下几点: 1.TreeSet里面不会有重复的元素,所以当把一个List放进TreeSet里面后,会自动去重 2.TreeSet去重也是有条件的,它依靠放入其中的元素的排序规则,所以放入其中的元素要有一个自定义的排序规则(此处表述不是很清楚,欢迎指正) 下面开始看好戏: 原本List<Person> persons 里面有3个元素: List<Person> persons = new ArrayLis…
1.题目描述 给定一个整数数组,判断是否存在重复元素. 如果任何值在数组中出现至少两次,函数返回 true.如果数组中每个元素都不相同,则返回 false. 2.示例 2.1 输入: [1,2,3,1] 输出: true 2.2 输入: [1,2,3,4] 输出: false 2.3 输入: [1,1,1,3,3,4,3,2,4,2] 输出: true 3.代码示例 3.1 首先,我们可以使用最暴力的解法,循环判断通过两次for循环进行嵌套,就可以解出来. class Solution { pu…
目录 1.冒泡排序的实现 2.比较接口(普通数据类型.引用数据类型) 普通数据类型:冒泡排序 引用数据类型:包装类(Integer.String.Character.Date) 自定义类型:实体类:implements Comparable+compareTo|业务排序类:获取comparator对象.compare方法 3.TreeSet.TreeMap的使用 代码实现 1.冒泡排序(只演示升序) //采用泛型进行升序排列 public static <T extends Comparable…
我本来打算仔细的去分析分析TreeSet和TreeMap排序规则,并且从底层实现和数据结构入手.当我去读完底层源码以后,我感觉我就的目标定的太大了,单单就是数据结构就够我自己写很久了,因此我决定先易后难,先把底层源码以及最直接的数据结构分析一下,至于底层的平衡二叉树以及红黑二叉树,我就不过多去介绍,因为这是底层源码优化用的,与直接实现代码没有多大关系,感兴趣的也可以去仔细研究. 树: 树是n ( n >=0)个节点的有限集.n = 0时称为空树.在任意一颗非空树种中: (1)有且仅有一个特定的称…
存在重复元素III 给定一个整数数组,判断数组中是否有两个不同的索引 i 和 j,使得 nums [i] 和 nums [j] 的差的绝对值最大为 t,并且 i 和 j 之间的差的绝对值最大为 ķ. 示例 1: 输入: nums = [1,2,3,1], k= 3, t = 0 输出: true 示例 2: 输入: nums = [1,0,1,1], k=1, t = 2 输出: true 示例 3: 输入: nums = [1,5,9,1,5,9], k = 2, t = 3 输出: fals…
1.Go切片去掉重复元素 如果传入的是string类型: //slice去重 func removeRepByMap(slc []string) []string { result := []string{} //存放返回的不重复切片 tempMap := map[string]byte{} // 存放不重复主键 for _, e := range slc { l := len(tempMap) tempMap[e] = 0 //当e存在于tempMap中时,再次添加是添加不进去的,,因为key…
Given an array of integers, find out whether there are two distinct indices i and j in the array such that the absolute difference between nums[i] and nums[j] is at most t and the absolute difference between i and j is at most k. Example 1: Input: nu…
Set接口常用实现类:HashSet和TreeSet HashSet区分重复元素: 先使用hashcode方法判断已经存在HashSet中元素的hashcode值和将要加入元素hashcode值是否相同.如果不同,直接添加:如果相同,再调用equals方法判断,如果返回true表示HashSet中已经添加该对象了,不需要再次添加(重复),如果返回false就表示不重复,可以直接加入HashSet中 TreeSet区分重复元素: TreeSet中的元素对象如果实现Comparable接口,使用co…
220. 存在重复元素 III 给定一个整数数组,判断数组中是否有两个不同的索引 i 和 j,使得 nums [i] 和 nums [j] 的差的绝对值最大为 t,并且 i 和 j 之间的差的绝对值最大为 ķ. 示例 1: 输入: nums = [1,2,3,1], k = 3, t = 0 输出: true 示例 2: 输入: nums = [1,0,1,1], k = 1, t = 2 输出: true 示例 3: 输入: nums = [1,5,9,1,5,9], k = 2, t = 3…
剑指 Offer 38. 字符串的排列 Offer_38 题目描述 解题思路 可以使用递归实现全排列,每次都确定一个数的位置,当所有位置的数都确定后即表示一个排列. 但是考虑到本题需要排除重复的排列,所以可以递归时判断同一个字符是否出现在某个位置多次,如果出现多次则跳过. java代码 package com.walegarrett.offer; /** * @Author WaleGarrett * @Date 2021/2/5 22:45 */ import java.util.Linked…