treemap

Collection

て烟熏妆下的殇ゞ 提交于 2019-11-29 03:30:57
Collections的意义:通过名字可知和Collection有关,里面提供的都是静态方法,那么可以推断Collection作为Collection的补充,是对集合中存在的一些问题做了优化,提供了对集合的更好的使用手段。 public class TreeMap_test { public static void main(String[] args) { List<Integer> list=new ArrayList<>(10); Collections.addAll(list,1,2,3,40,7,10,6); List<Integer> list1 =new ArrayList<>(10); //添加集合到集合中 Collections.addAll(list1,1,2,3,4,5,6,7,8,9,0,10,34); //复制集合,有一个问题,目的集合的size>src的size Collections.copy(list1,list); System.out.println(list1); System.out.println(list); //找出集合中的最大值 System.out.println(Collections.max(list1)); System.out.println(Collections.max(list)); //打乱数据的顺序

Java核心(四)你不知道的数据集合

谁都会走 提交于 2019-11-29 02:47:53
导读:Map竟然不属于Java集合框架的子集?队列也和List一样属于集合的三大子集之一?更有队列的正确使用姿势,一起来看吧! Java中的集合通常指的是Collection下的三个集合框架List、Set、Queue和Map集合,Map并不属于Collection的子集,而是和它平行的顶级接口。Collection下的子集的关系如文章开头图片所示。 本文的重点将会围绕: 集合的使用、性能、线程安全、差异性、源码解读等几个方面进行介绍。 本文涉及的知识点,分为两部分: 第一部分,Collection所有子集: List => Vector、ArrayList、LinkedList Set => HashSet、TreeSet Queue 第二部分,Map => Hashtable、HashMap、TreeMap、ConcurrentHashMap。 一、List 我们先来看List、Vector、ArrayList、LinkedList,它们之间的继承关系图,如下图: 可以看出Vector、ArrayList、LinkedList,这三者都是实现集合框架中的List,也就是所谓的有序集合,因此具体功能也比较近似,比如都提供按照位置进行定位、添加或者删除的操作,都提供迭代器以遍历其内容等。但因为具体的设计区别,在行为、性能、线程安全等方面,表现又有很大不同。 来看它们的主要方法

java中散列表、树所对应的的容器类。HashMap如何解决冲突

安稳与你 提交于 2019-11-29 00:40:15
java中散列表、树所对应的的容器类 散列表:hashmap,hashtable,concurrentHashmap 树:hashset,treemap,treeset jdk7与jdk8中HashMap的区别 jdk7中hashMap采用数组+链表,如果过多的节点在hash时发生碰撞,如果要查找其中一个节点,需要O(n)的查找时间。 jdk7中hashMap采用数组+链表/红黑树,当某个桶位达到某个阈值时,链表将转化为红黑树,红黑树时间复杂度O(nlogn) HashMap如何解决冲突 1.开放定址法: 通过探测算法,当一个槽位已经被占用情况下继续查找下一个 2.链地址法(数组+链表) 3.再哈希 准备多个散列函数,当发生冲突时,再选择一个散列函数进行散列。 HashMap的工作原理 HashMap 底层是 数组 和 单向链表 实现,数组中的每个元素都是 链表 ,由 Node 内部类(实现 Map.Entry<K,V>接口) 实现,HashMap 通过 put & get 方法存储和获取。 HashCode是定位(存储位置),equals是定性(两者是否相等) 存储对象时,将K/V传给put()方法: ①hash(K)计算K的hash,结合数组长度,计算数组下标 ②调整数据大小(当容器中的元素个数大于 capacity * loadfactor 时,容器会进行扩容resize 为

集合2

孤街浪徒 提交于 2019-11-29 00:08:33
HashMap和TreeMap有什么不同? 有序 无序 collection和collections区别 Collection是集合体系的最顶层,包含了集合体系的共性,顶级接口 Collections是一个工具类,方法都是用于操作,服务Collection及其实现 如何对一组对象进行排序 首先应该看要求,是否去重 comparable比较,首先要是实现Comparable接口,实现compareTo方法。 添加到treeset 2.22 Collection接口的remove()方法和Iterator接口的remove()方法区别 Collection的remove方法必须首先找出要被删除的项。因此如果知道所要删除的项的准确位置,那么删除它的开销很可能要小得多。 当我们在遍历集合时,如果这当中出现改变集合结构的操作(add、remove或clear方法),会抛出ConcurrentModificationException异常 在使用Iterator遍历中如果我们直接使用集合的remove方法来删除则会报异常而如果我们使用Iterator 实例的remove方法来删除的话则正常 Java集合中List、Set、Map List , Set, Map都是接口,前两个继承至Collection接口,Map为独立接口 Set下有HashSet,LinkedHashSet,TreeSet

集合专题1

人走茶凉 提交于 2019-11-28 23:57:18
谈一谈你对Java集合的了解 集合类存放在java.util包中。 集合类存放的都是对象的引用,而非对象本身,处于表达上的便利,我们称集合中的对象就是指集合中对象的引用。 集合主要有三种类型:set(无序不可重复),list(有序可重复),map(键值对) 所有的集合类都是实现了collection接口。 HashMap和Hashtable的理解 都是基于哈希表实现的,超过内存容量,会自动增长 都实现了serializable,cloneable接口 Hashtable继承自Dictionary类,而HashMap继承自AbstractMap类。但二者都实现了Map接口。 HashMap底层是一个Entry数组,当发生hash冲突的时候,hashmap是采用链表的方式来解决的,在对应的数组位置存放链表的头结点。对链表而言,新加入的节点会从头结点加入。 hashmap是非线程安全的,hashmap允许键值为空 哈希碰撞/哈希冲突 Hash的前提是实现equals()和hashCode()两个方法,那么HashCode()的作用就是保证对象返回唯一hash值,但当两个对象计算值一样时,这就发生了碰撞冲突。 哈希冲突即关键字不同的元素被映射到了同一个内存位置,包括由同义词冲突和非同义词冲突。 ArrayList和LinkedList 基于Array的List(Vector

图解一致性hash算法和实现

限于喜欢 提交于 2019-11-28 21:40:40
更多内容,欢迎关注微信公众号:全菜工程师小辉。公众号回复关键词,领取免费学习资料。 一致性hash算法是什么? 一致性hash算法,是麻省理工学院1997年提出的一种算法,目前主要应用于分布式缓存当中。 一致性hash算法可以有效地解决分布式存储结构下动态增加和删除节点所带来的问题。 在Memcached、Key-Value Store、Bittorrent DHT、LVS中都采用了一致性hash算法,可以说一致性hash算法是分布式系统负载均衡的首选算法。 传统hash算法的弊端 常用的算法是对hash结果取余数 (hash() mod N):对机器编号从0到N-1,按照自定义的hash算法,对每个请求的hash值按N取模,得到余数i,然后将请求分发到编号为i的机器。但这样的算法方法存在致命问题,如果某一台机器宕机,那么应该落在该机器的请求就无法得到正确的处理,这时需要将宕掉的服务器使用算法去除,此时候会有(N-1)/N的服务器的缓存数据需要重新进行计算;如果新增一台机器,会有N /(N+1)的服务器的缓存数据需要进行重新计算。对于系统而言,这通常是不可接受的颠簸(因为这意味着大量缓存的失效或者数据需要转移)。 > 传统求余做负载均衡算法,缓存节点数由3个变成4个,缓存不命中率为75%。计算方法:穷举hash值为1-12的12个数字分别对3和4取模

并发容器学习——ConcurrentHashMap

旧时模样 提交于 2019-11-28 19:22:03
一、ConcurrentHashMap并发容器 1.ConcurrentHashMap ConcurrentHashMap是HashMap的升级版,HashMap虽然效率高,但它是线程不安全的容器,不能再多线程环境使用,而HashTable虽然是线程安全的,但使用的是效率比较低的synchronized,并且synchronized是悲观锁,不论读写都是独占的。而ConcurrentHashMap的底层是使用CAS来实现并发访问的,效率较高。 ConcurrentHashMap的底层数据结构与HashMap相同,采用数组+链表/红黑树来实现,如下图: 2.链表结点的实现 链表结点是基本的存储单元,其实不用想太多,必然和HashMap中的Node相类似。 //可以看到Node实现了Map.Entry接口,与HashMap基本一样 static class Node<K,V> implements Map.Entry<K,V> { final int hash; //hash值,final修饰,表示hash码不可改变。 final K key; //key值 volatile V val; //value值,volatile保证可见性 volatile Node<K,V> next; //链表的下个结点 Node(int hash, K key, V val, Node<K,V>

When should I use a TreeMap over a PriorityQueue and vice versa?

拥有回忆 提交于 2019-11-28 18:44:31
问题 Seems they both let you retrieve the minimum, which is what I need for Prim's algorithm, and force me to remove and reinsert a key to update its value. Is there any advantage of using one over the other, not just for this example, but generally speaking? 回答1: Generally speaking, it is less work to track only the minimum element, using a heap. A tree is more organized, and it requires more computation to maintain that organization. But if you need to access any key, and not just the minimum, a

Which data structure would you use: TreeMap or HashMap? (Java) [duplicate]

删除回忆录丶 提交于 2019-11-28 15:28:17
This question already has an answer here: Difference between HashMap, LinkedHashMap and TreeMap 15 answers Description | A Java program to read a text file and print each of the unique words in alphabetical order together with the number of times the word occurs in the text. The program should declare a variable of type Map<String, Integer> to store the words and corresponding frequency of occurrence. Which concrete type, though? TreeMap<String, Number> or HashMap<String, Number> ? The input should be converted to lower case. A word does not contain any of these characters: \t\t\n]f.,!?:;\"()'

putExtra treeMap returns HashMap cannot be cast to TreeMap android

本秂侑毒 提交于 2019-11-28 12:16:42
I need your help, I cannot understand what's happening? I'm trying to send a TreeMap between 2 activities, the code is something like this: class One extends Activity{ public void send(){ Intent intent = new Intent(One.this, Two.class); TreeMap<String, String> map = new TreeMap<String, String>(); map.put("1","something"); intent.putExtra("map", map); startActivity(intent); finish(); } } class Two extends Activity{ public void get(){ (TreeMap<String, String>) getIntent().getExtras().get("map");//Here is the problem } } This returns to me HashMap cannot be cast to TreeMap. What As alternative to