weakhashmap在Java中ArrayList、LinkedList、HashMap的区别是什么

weakhashmap  时间:2021-07-01  阅读:()

java中什么是集合框

集合框架是为表示和操作集合而规定的一种统一的标准的体系结构。

任何集合框架都包含三大块内容:对外的接口、接口的实现和对集合运算的算法。

接口:即表示集合的抽象数据类型。

接口提供了让我们对集合中所表示的内容进行单独操作的可能。

实现:也就是集合框架中接口的具体实现。

实际它们就是那些可复用的数据结构。

Java集合框架的操作的方法有哪些?怎么用?

浅谈JAVA集合框架 Java提供了数种持有对象的方式,包括语言内置的Array,还有就是utilities中提供的容器类(container classes),又称群集类(collection classes)。

集合在java中非常重要,在讨论之前,先来看几个面试中的经典问题。

1 Collection 和 Collections的区别。

2 List, Set, Map是否继承自Collection接口。

3 ArrayList和Vector的区别。

4 HashMap和Hashtable的区别。

篇尾有答案,我们开始正题。

集合Collection接口 --Collection 是任何对象组,元素各自独立,通常拥有相同的套用规则。

Set List由它派生。

基本操作 增加元素add(Object obj); addAll(Collection c); 删除元素 remove(Object obj); removeAll(Collection c); 求交集 retainAll(Collection c); 删除元素 remove(Object obj); removeAll(Collection c); 求交集 retainAll(Collection c); 访问/遍历集合元素的好办法是使用Iterator接口(迭代器用于取代Enumeration) Public interface Iterator{ Public Boolean hasNext(}; Public Object next(}; Public void remove(}; } 集set --没有重复项目的集合 有三种特定类型的集可用 HashSet-基于散列表的集,加进散列表的元素要实现hashCode()方法 LinkedHashSet-对集迭代时,按增加顺序返回元素 TreeSet-基于(平衡)树的数据结构 清单List --位置性集合。

加进清单的元素可以加在清单中特定位置或加到末尾 有两个特定版本 ArrayList(数组表)-类似于Vector,都用于缩放数组维护集合。

区别: 一.同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的 二.数据增长:当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半 LinkedList(链表)-是双向链表,每个节点都有两个指针指向上一节点和下一节点。

用在FIFO,用addList()加入元素 removeFirst()删除元素 用在FILO,用addFirst()/removeLast() ListIterator提供双向遍历next() previous(),可删除、替换、增加元素 映射表Map --用于关键字/数值对,像个Dictionary 处理Map的三种集合 关键字集KeySet() 数值集value() 项目集enrySet() 四个具体版本 HashMap-散列表的通用映射表 LinkedHashMap-扩展HashMap,对返回集合迭代时,维护插入顺序 WeakHashMap-基于弱引用散列表的映射表,如果不保持映射表外的关键字的引用,则内存回收程序会回收它 TreeMap-基于平衡树的映射表 HashMap-散列表的通用映射表 LinkedHashMap-扩展HashMap,对返回集合迭代时,维护插入顺序 WeakHashMap-基于弱引用散列表的映射表,如果不保持映射表外的关键字的引用,则内存回收程序会回收它 TreeMap-基于平衡树的映射表 Collections类,用于同步集合,还能改变集合只读方式的类 e.g.: Map mp=new HashMap(); mp=Collections.synchronizedMap(mp); //生成线程安全的映射表 mp=Collections.unmodifiableMap(mp); //生成只读映射表 Comparable 自然顺序的排序类 Comparator 面向树的集合排序类 容器分类学(Container taxonomy) 集合接口: Collection List Set;Map Iterator ListIterator。

抽象类: AbstractCollection AbstractList AbstractSet AbstractMap AbstractSequentiaList。

老版本中的集合类型 Vector类 Vector,就是向量。

一种异构的混合体,可以动态增加容量。

对它的操作简要如下 比如我们有一个Vector: Vector myVec=new Vector(a_Array.length) 取得vector的长度:myVec.size(); 赋值:set(int position,Object obj) / setElementAt(Object obj, int position) –不支持动态增长 add(Object obj )/ addElement(Object obj) 在Vector末尾加入对象 e.g.:myVec.add(new a_Array[0]); 取出元素:get(int position) / getElement(int position) Stack类 是Vector的子类。

就是数据结构里讲滥了的堆栈(这个词可简称栈,不要混淆于heap-堆)。

后进先出的存取方式。

Stack()构造空栈 Empty()叛空 Search()检查堆栈是否有元素 Peek()取得栈顶元素 Pop()弹栈 Push()入栈 Enumeration接口 Dictionary类 字典。

关键字/数值方式存取数据,如果映射没有此关键字,取回null。

Hashtable类 是Dictionary结构的具体实现。

面试题答案 Collection 和 Collections的区别。

Collections是个java.util下的类,它包含有各种有关集合操作的静态方法。

Collection是个java.util下的接口,它是各种集合结构的父接口 List, Set, Map是否继承自Collection接口? List,Set是 Map不是 ArrayList和Vector的区别。

一.同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的 二.数据增长:当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半 HashMap和Hashtable的区别 一.历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现 二.同步性:Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的 三.值:只有HashMap可以让你将空值作为一个表的条目的key或value

java中什么是强引用,弱引用和软引用

我自己也复习下概念。

强引用:就是普通引用。

比如 A o1=new A(); A o2=o1; 强引用只有当所有对这个对象的所有引用(o1,o2)失效后,new A()的内存才会被回收。

残影引用、弱引用、软引用都用来引用随时可能被回收的对象。

类似o1,o2即使未失效也会回收。

区别是被回收器回收的激烈程度,由强到弱。

残影引用是对象已经finalize或者执行完析构函数,只等内存马上回收了,最容易被回收。

非常接近回收时机,就像残影会随物体消失而消失,故名。

弱引用的对象是在正常情况下,回收器遇到就回收,是被积极回收的对象。

软引用是仅在内存不够时才回收,属于消极回收。

HashTable和ArrayList的主要区别是什么

hash是键值映射,简单的说就是一个键对应一个值,我们可以认为给每个值都起一个名字,键就是所谓的名字,我们通过这个名字来寻找值,而arraylist是一个集合,它以线性结构存储数据,在集合中存储的内容都是值,并且我们给每个值用索引做一个编号,所以在遍历的过程中我们用的是索引,arraylist是有序的,而hash是无序的

Java中的强引用,软引用,弱引用,虚引用有什么用

这两天在看 Reference 相关的东西,虽然接触到的场景不多,但感觉还是比较有用的。

在非常关心内存的情况下,有可能能派上用场。

在涉及到某一个对象被 GC,需要得到通知,然后再做某些相关处理的时候,有可能派得上用场。

对于第一点,目前接触到的就是 WeakHahsMap。

像我们平常写缓存的时候,最简单的就是在一个类中 public static Map<String,String> user_map = new HashMap<String, String>(); 然后再在全局使用它。

这里就可以参考下 Tomcat 实现的这个 LRU 缓存:tomcat/ConcurrentCache.java at trunk · apache/tomcat · GitHub,它就用到了 WeakHashMap,WeakHashMap也用到了 WeakReference,可以参考下。

WeakHahsMap 的实现原理简单来说就是里面的 Entry 使用继承了 WeakReference,那么当 Entry 的 key 不再被使用的时候,也就是被 GC 的时候,那么该 Entry 就会进入到 ReferenceQueue 中, WeakHashMap 在你调用相关方法的时候,那么就会把这个 Entry 从 ReferenceQueue 中删除,并且做相关处理(也就是把这个 key 删除)。

这时候你就会发现,你的一个键值对没有了。

对于第二点,目前接触到的就是一个 FileCleaningTracker,它的作用是,把一个文件和一个对象关联起来,当这个对象被 GC 的时候,文件也帮我们删除掉。

FileCleaningTracker 的实现简单来说就是用了一个虚引用。

它里面有一个 Tracker 的内部类,他继承自 PhantomReference,你可以理解成 WeakHashMap中的 Entry(其实也很像了)。

这个 Tracker 就和我们的关联对象 marker 关联起来(你可以理解成 WeakHashMap 中的 Entry 的 key),那么当 marker 被回收的时候,Tracker 就会被GC 弄到 ReferenceQueue 中,那么 FileCleaningTracker 就会把 Tracker 从 ReferenceQueue 移除出来,并且执行相关操作(delete file)。

最后: 自己理解的引用(强,软,弱虚)是和 GC 比较相关的,能够在一个 对象被 GC 的时候,应用程序得到通知,然后执行相关操作。

像 WeakHashMap 就是这样,底层发现 key 没了,上层就把 entry 删了。

ps: 第6条:消除过期对象的引用(WeakHashMap的缓存应用):愿无岁月可回首 第6条:WeakHashMap扩展知识1(原理与Reference相关):愿无岁月可回首 第6条:Reference应用-FileCleaningTracker:愿无岁月可回首 最后的最后补充。





突然想起,之前自己在工作中涉及到这样一种情况,我需要对用户投资的钱进行一个每日的加息,有一天客户忘了把加息的数据给我,然后给了我一份 csv 文件,让我加上。

我当时的做法是,让运维把文件放在固定的地方,程序读取,执行逻辑,然后运维再手动删除。

这个时候,其实也可以通过这种 FileCleaningTracker,当读取完之后,自动的删除这个文件,就不用运维来做了。

(这可能是一种应用场景)

在Java中ArrayList、LinkedList、HashMap的区别是什么

Collection ├List │├LinkedList │├ArrayList │└Vector │ └Stack └Set Map ├Hashtable ├HashMap └WeakHashMap LinkedList类   LinkedList实现了List接口,允许null元素。

此外LinkedList提供额外的get,remove,insert方法在LinkedList的首部或尾部。

这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque)。

  注意LinkedList没有同步方法。

如果多个线程同时访问一个List,则必须自己实现访问同步。

一种解决方法是在创建List时构造一个同步的List:     List list = Collections.synchronizedList(new LinkedList(...)); ArrayList类   ArrayList实现了可变大小的数组。

它允许所有元素,包括null。

ArrayList没有同步。

size,isEmpty,get,set方法运行时间为常数。

但是add方法开销为分摊的常数,添加n个元素需要O(n)的时间。

其他的方法运行时间为线性。

  每个ArrayList实例都有一个容量(Capacity),即用于存储元素的数组的大小。

这个容量可随着不断添加新元素而自动增加,但是增长算法并没有定义。

当需要插入大量元素时,在插入前可以调用ensureCapacity方法来增加ArrayList的容量以提高插入效率。

  和LinkedList一样,ArrayList也是非同步的(unsynchronized)。

HashMap类   HashMap继承Map接口,实现一个key-value映射的哈希表。

任何非空(non-null)的对象都可作为key或者value。

总结   如果涉及到堆栈,队列等操作,应该考虑用List,对于需要快速插入,删除元素,应该使用LinkedList,如果需要快速随机访问元素,应该使用ArrayList。

EdgeNat 新年开通优惠 - 韩国独立服务器原生IP地址CN2线路七折优惠

EdgeNat 商家在之前也有分享过几次活动,主要提供香港和韩国的VPS主机,分别在沙田和首尔LG机房,服务器均为自营硬件,电信CN2线路,移动联通BGP直连,其中VPS主机基于KVM架构,宿主机采用四路E5处理器、raid10+BBU固态硬盘!最高可以提供500Gbps DDoS防御。这次开年活动中有提供七折优惠的韩国独立服务器,原生IP地址CN2线路。第一、优惠券活动EdgeNat优惠码(限月...

bluehost32元/月,2核2G/20GB空间,独立ip,新一代VPS美国云主机!

bluehost怎么样?bluehost推出新一代VPS美国云主机!前几天,BlueHost也推出了对应的周年庆活动,全场海外虚拟主机月付2.95美元起,年付送免费的域名和SSL证书,通过活动进入BlueHost中文官网,购买虚拟主机、云虚拟主机和独立服务器参与限时促销。今天,云服务器网(yuntue.com)小编给大家介绍的是新一代VPS美国云主机,美国SSD云主机,2核2G/20GB空间,独立...

ZJI(月付480元),香港阿里云专线服务器

ZJI是成立于2011年原Wordpress圈知名主机商—维翔主机,2018年9月更名为ZJI,主要提供香港、日本、美国独立服务器(自营/数据中心直营)租用及VDS、虚拟主机空间、域名注册业务。本月商家针对香港阿里云线路独立服务器提供月付立减270-400元优惠码,优惠后香港独立服务器(阿里云专线)E3或者E5 CPU,SSD硬盘,最低每月仅480元起。阿里一型CPU:Intel E5-2630L...

weakhashmap为你推荐
stackoverflowerrorjava.lang.StackOverflowError错误开票系统金税盘开票系统怎么用foxmail邮箱注册如何注册一个foxmail邮箱arc是什么意思数学中的arctan是什么意思waves插件MuseScore vst插件怎么安装cf加速器玩CF需要用加速器吗?watch的过去式wach的过去式文件系统类型windows 操作系统的文件系统具体有哪几种screencapture电脑qq问题:点击qq邮箱与空间,弹出Screen Capture Control 进入不了qq邮箱与空间,怎么解决?酷源码我在网上下载好了企业源码 需要怎么修改才可以直接上传到我的空间(我以有上传工具了)就是不会上修改和上
重庆网站空间 私服服务器租用 三级域名网站 免费动态域名解析 国外永久服务器 便宜服务器 ion windows主机 jsp主机 cpanel主机 godaddy续费优惠码 NetSpeeder 秒杀预告 中国电信宽带测速网 四核服务器 网站在线扫描 yundun 四川电信商城 测试网速命令 带宽测试 更多