首页 Android改变底层容器,Android开发-容器详解

Android改变底层容器,Android开发-容器详解

举报
开通vip

Android改变底层容器,Android开发-容器详解  Android改变底层容器,Android开发容器详解  映射(Map/HashMap)HashMap的实现原理:在Java编程语言中,最基本的结构就是两种,一个是数组,另外一个是指针(引用),HashMap就是通过这两个数据结构进行实现。HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。HashMap的数据结构映射保存的是键值对(即key—value)的映射关系,一个映射中不能包含相同的key,每个key只能映射一个value。但Map只是接口,实际中常用的是它的一个派生类HashMap...

Android改变底层容器,Android开发-容器详解
  Android改变底层容器,Android开发容器详解  映射(Map/HashMap)HashMap的实现原理:在Java编程语言中,最基本的结构就是两种,一个是数组,另外一个是指针(引用),HashMap就是通过这两个数据结构进行实现。HashMap实际上是一个“链 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 散列”的数据结构,即数组和链表的结合体。HashMap的数据结构映射保存的是键值对(即key—value)的映射关系,一个映射中不能包含相同的key,每个key只能映射一个value。但Map只是接口,实际中常用的是它的一个派生类HashMap。映射的常用 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 如下:clear:清空容器containsKey:判断容器中是否存在该键(key)的元素containsValue:判断容器中是否存在该值(value)的元素get:根据指定键获得元素的值isEmpty:判断容器是否为空keySet:获取容器中键的集合put:设置键值对的映射关系。如原来没有该键,则添加元素;如果原来存在该键,则替换元素remove:删除指定键对应的元素size:获取容器的大小values:获取容器中值的集合哈希表(Hashtable)哈希表也是从Map派生而来的,但HashMap是非synchronized,而Hashtable是synchronized,这意味着Hashtable是线程安全的,多个线程可以共享一个Hashtable;而如果没有正确的同步的话,多个线程是不能共享HashMap的。由于Hashtable是线程安全的也是synchronized,所以在单线程环境下它比HashMap要慢。如果你不需要同步,只需要单一线程,那么使用HashMap性能要好过Hashtable。HashMap不能保证随着时间的推移Map中的元素次序是不变的。哈希表的常用方法与映射是一样的,就不一一列举了。容器的遍历操作集合(Set/HashSet)HashSet的实现原理:它是基于HashMap实现的,底层采用HashMap来保存元素。集合中的元素是没有顺序的,而且不可以重复。这意味着,集合只能遍历而无法通过索引访问指定元素,并且如果重复添加相同值将不会增大集合。因为Set只是接口,所以实际用的是它的一个派生类HashSet。集合的常用方法如下:add:添加元素clear:清空容器contains:判断容器中是否存在该元素iterator:获取第一个元素的指针isEmpty:判断容器是否为空remove:删除元素size:获取容器大小队列(ArrayList)ArrayList的实现原理:ArrayList可以理解为动态数组,与数组相比它的容量能动态增长。ArrayList是List接口的可变数组的实现。实现了所有可选列表操作,并允许包括null在内的所有元素。除了实现List接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。队列与集合恰恰相反,队列中的元素是有顺序的,而且允许重复,所以队列可以使用索引来访问指定元素(类似数组的下标)。队列的常用方法包括上面集合列出的几个,下面列出有变更或者添加的方法:add:提供了两个方法。默认在队列末尾添加元素;如果指定了索引位置,则在指定位置末尾添加元素get:获取指定位置的元素indexOf:获取指定元素的第一个索引位置lastIndexOf:获取指定元素的最后一个索引位置remove:提供了两个方法。除了删除元素之外,还可以删除指定位置的元素set:替换指定位置的元素subList:截取从开始位置到结束位置之间的子队列链表(LinkedList)LinkedList的实现原理:就是链表。链表又称双端队列(类似C++的deque),如其名字所言,每个元素都有由三块区域组成,一块指向前一个元素,一块指向后一个元素,最后一块才是保存的对象。所以对于需要快速操作首尾元素,应该使用链表,如果需要快速操作随机元素,应该使用队列。链表的常用方法包括上面队列列出的几个,下面列出添加的方法:addFirst/addLast:添加到开头/添加到末尾getFirst/getLast:获取首元素/获取末元素removeFirst/removeLast:删除首元素/删除末元素offer/offerFirst/offerLast:以deque方式添加元素,与之相对的是,add是以list方式添加元素peek/peekFirst/peekLast:获取但不移除此队列的首尾元素,默认获取首元素poll/pollFirst/pollLast:获取并移除此队列的首尾元素,默认获取并移除首元素pop:出栈第一个元素,即以stack方式删除元素push:入栈指定元素,即以stack方式添加元素向量(Vector)Vector的实现原理:Vector与ArrayList类似,都是用数组实现的。Vector是多线程安全的,而ArrayList不是,这个可以从源码中看出,Vector类中的方法很多有synchronized进行修饰,这样就导致了Vector在效率上无法与ArrayList相比;向量的常用方法与队列是一样的,这里就不一一列举。堆栈(Stack)Stack和Queue都是可以由LinkedList向上转换而来。堆栈是从向量派生而来,它实现一个后进先出的堆栈。堆栈的常用方法比向量多了三个,分别是peek(获取首元素)、pop(出栈)、push(入栈),看起来Stack类似一个堆栈方式的链表。指针遍历以上容器都支持以指针为基础的遍历操作,其中指针遍历又分为显式指针和隐式指针,区别在于显式指针需要实例化Iterator的一个对象,而隐式指针不需要。以队列为例,显式指针和隐式指针的遍历代码如下:ArrayListarray=newArrayList();array.add("111");array.add("222");array.add("333");//显式指针Iteratorit_array=array.iterator();while(it_array.hasNext()){System.out.println("it_array.next()="+(String)it_array.next());}//隐式指针for(Stringitem_array:array){System.out.println("item_array="+item_array);}集合、链表、向量、堆栈的指针遍历与队列类似,把ArrayList替换为相应的容器名称就好。映射的指针遍历有些特别,因为Iterator只支持单参数,而映射有两个参数,所以只能把每个映射元素的入口传给Iterator,这就引入了Map.Entry的概念。具体的遍历代码如下:HashMapmap=newHashMap();map.put("111","000");map.put("222","000");map.put("333","000");//显式指针Set>entry_set=map.entrySet();Iterator>it_map=entry_set.iterator();while(it_map.hasNext()){//注意这里要先把入口取出来,这样才能分别getKey和getValueMap.Entryitem_next=it_map.next();System.out.println("item_nextkey="+item_next.getKey());System.out.println("item_nextvalue="+item_next.getValue());}//隐式指针for(Map.Entryitem_map:map.entrySet()){System.out.println("item_mapkey="+item_map.getKey());System.out.println("item_mapvalue="+item_map.getValue());}哈希表的指针遍历操作与映射类似。索引遍历除了指针遍历操作,队列、链表、向量、堆栈还支持索引遍历,具体代码如下://索引遍历for(inti=0;iSystem.out.println(String.format("array[%d]=%s",i,array.get(i)));}向量因为内部元素是无序的,所以不支持索引遍历。键集合遍历映射和哈希表除了指针遍历,还支持键集合的遍历。即先获取容器中的键集合,然后对键集合进行指针遍历分别取出该键对应的值,具体代码如下:Setkey_set=map.keySet();for(Stringitem_key:key_set){System.out.println("item_key="+item_key+",item_value="+map.get(item_key));} -全文完-
本文档为【Android改变底层容器,Android开发-容器详解】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
资教之佳
暂无简介~
格式:doc
大小:19KB
软件:Word
页数:10
分类:互联网
上传时间:2023-06-18
浏览量:3