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。

野草云提供适合入门建站香港云服务器 年付138元起 3M带宽 2GB内存

野草云服务商在前面的文章中也有多次提到,算是一个国内的小众服务商。促销活动也不是很多,比较专注个人云服务用户业务,之前和站长聊到不少网友选择他们家是用来做网站的。这不看到商家有提供香港云服务器的优惠促销,可选CN2、BGP线路、支持Linux与windows系统,支持故障自动迁移,使用NVMe优化的Ceph集群存储,比较适合建站用户选择使用,最低年付138元 。野草云(原野草主机),公司成立于20...

亚洲云-浙江高防BGP,至强铂金8270,提供自助防火墙管理,超大内存满足你各种需求

官方网站:点击访问亚洲云官网618活动方案:618特价活动(6.18-6.30)全站首月活动月底结束!地区:浙江高防BGPCPU:至强铂金8270主频7 默频3.61 睿频4.0核心:8核(最高支持64核)内存:8G(最高支持128G)DDR4 3200硬盘:40G系统盘+80G数据盘带宽:上行:20Mbps/下行:1000Mbps防御:100G(可加至300G)防火墙:提供自助 天机盾+金盾 管...

搬瓦工:香港PCCW机房即将关闭;可免费升级至香港CN2 GIA;2核2G/1Gbps大带宽高端线路,89美元/年

搬瓦工怎么样?这几天收到搬瓦工发来的邮件,告知香港pccw机房(HKHK_1)即将关闭,这也不算是什么出乎意料的事情,反而他不关闭我倒觉得奇怪。因为目前搬瓦工香港cn2 GIA 机房和香港pccw机房价格、配置都一样,可以互相迁移,但是不管是速度还是延迟还是丢包率,搬瓦工香港PCCW机房都比不上香港cn2 gia 机房,所以不知道香港 PCCW 机房存在还有什么意义?关闭也是理所当然的事情。点击进...

weakhashmap为你推荐
swoole怎么判断linux是否安装swooleflash控件一台电脑要装哪几个flash插件策略组组策略完全使用方法oracle索引oracle表加索引有什么用? 请举一个例子说明谢谢oracle索引什么是Oracle的函数索引?jdk6JDK6和JDK7两个版本有什么区别,初学者选那个好?数秦科技奇秦科技是做什么的,大家了解过吗?php论坛用php写一个论坛,重点是什么?还有具体的功能,谢谢pps网络电视PPS网络电视是那个国家的公司开发出来的mergecellsExcel 合并及计数宏 VBA
提供香港vps 新秒杀 sugarsync php主机 监控宝 parseerror 三拼域名 165邮箱 秒杀预告 国外代理服务器软件 美国网站服务器 hdd shopex主机 1元域名 主机管理系统 东莞主机托管 阿里云邮箱登陆地址 cdn网站加速 中国联通宽带测速 黑科云 更多