数组 Map 使用小结
数组的使用数组在内存中表示一串连续的空间,以保存一行连续的数值 数组的声明int[] a = new int[5]; int b[] = new int[5]; 声明同时赋初值int[] d = new int[]{1,2,3,4,5}; int[] c = {1,2,3,4,5}; Arrays.sort(d); 冒泡排序法int[] arr = {12,34,23,45,43,22,33,2,1}; for(int i=0; i<arr.length-1; i++){ for(int j =0; j<arr.length-i-1; j++){ if(arr[j] > arr[j+1]){ int temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } 集合与数组的区别?1、数组特点高效、保存基本类型,集合带array的底层由数组实现,还有一部分由链表或者树 2、数组大小固定(巨大缺点,内存中一定连续),集合各种实现吧! 3、数组只能放一种类型,集合不考虑泛型可以存很多类型。 4、集合放原始类型其实是通过装箱拆箱来实现的,说白了以前原生类型只能用数组,现在集合也可以了。因为这个改进,所以现在基本上除了性能外,均推荐使用集合。 java容器类List、ArrayList、Vector及map、HashTable、HashMap分别的区别.一.List与ArrayList的区别List->AbstractList->ArrayList (1) List是一个接口,ArrayList是一个实现了List接口的具体类。 他们是父子关系,我们常用的是ArrayList,但常用List的引用去操作ArrayList 这是一个简单的面向接口编程的一种,如:List myList = new ArrayList(); (2)他们主要是用来保存对象的集合,记得是保存对象的哦,你可别传个int(类)进去 (3)要取出它里面保存的对象可以用下标,如:Object aaa = myList.get(0); 这样我们就把保存在myList里的第一个对象取出来给了 二.详解好像List和Map都是接口,不能实例化的 以前这么写List list = new Vector();现在这么写List list = new ArrayList(); 用ArrayList 代替了Vector 因为前者的性能比后者好;但是两个都是实现了List接口的 同理Map map = new HashTable();(以前) Map map = new HashMap();(现在) ArrayList和HashMap是异步的,Vector和HashTable是同步的, 所以Vector和HashTable是线程安全的,而ArrayList和HashMap并不是线程安全的。 因为同步需要花费机器时间,所以Vector和HashTable的执行效率要低于ArrayList和HashMap。 List接口List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。 用户能够使用索引(元素在List中的位置,类似于数组下标)来访问List中的元素,这类似于Java的数组。 和下面要提到的Set不同,List允许有相同的元素。 除了具有Collection接口必备的iterator()方法外,List还提供一个listIterator()方法, 实现List接口的常用类有LinkedList,ArrayList,Vector和Stack。 返回一个ListIterator接口,和标准的Iterator接口相比,ListIterator多了一些add()之类的方法, 允许添加,删除,设定元素,还能向前或向后遍历。
ArrayList类
ArrayList实现了可变大小的数组。它允许所有元素,包括null。ArrayList没有同步。
size,isEmpty,get,set方法运行时间为常数。但是add方法开销为分摊的常数,添加n个元素需要O(n)的时间。其他的方法运行时间为线性。
每个ArrayList实例都有一个容量(Capacity),即用于存储元素的数组的大小。这个容量可随着不断添加新元素而自动增加,但是增长算法并没有定义。当需要插入大量元素时,在插入前可以调用ensureCapacity方法来增加ArrayList的容量以提高插入效率。和LinkedList一样,ArrayList也是非同步的(unsynchronized)。
Map接口
请注意,Map没有继承Collection接口,Map提供key到value的映射。一个Map中不能包含相同的key,每个key只能映射一个value。Map接口提供3种集合的视图,Map的内容可以被当作一组key集合,一组value集合,或者一组key-value映射。
HashMap类
HashMap和Hashtable类似,不同之处在于HashMap是非同步的,并且允许null,即null value和null key。,但是将HashMap视为Collection时(values()方法可返回Collection),其迭代子操作时间开销和HashMap的容量成比例。因此,如果迭代操作的性能相当重要的话,不要将HashMap的初始化容量设得过高,或者load factor过低。
List是接口,List特性就是有序,会确保以一定的顺序保存元素. ArrayList是它的实现类,是一个用数组实现的List. Map是接口,Map特性就是根据一个对象查找对象.
HashMap是它的实现类,HashMap用hash表实现的Map,就是利用对象的hashcode(hashcode()是Object的方法)进行快速散列查找.(关于散列查找,可以参看<<数据结构>>)
一般情况下,如果没有必要,推荐代码只同List,Map接口打交道. 比如:List list = new ArrayList();
这样做的原因是list就相当于是一个泛型的实现,如果想改变list的类型,只需要: List list = new LinkedList();//LinkedList也是List的实现类,也是ArrayList的兄弟类 这样,就不需要修改其它代码,这就是接口编程的优雅之处. 另外的例子就是,在类的方法中,如下声明: private void doMyAction(List list){}
这样这个方法能处理所有实现了List接口的类,一定程度上实现了泛型函数.
如果开发的时候觉得ArrayList,HashMap的性能不能满足你的需要,可以通过实现List,Map(或者Collection)来定制你的自定义类
List Set Map 是否有序等总结
1.Collection List Set Map 区别记忆 这些都代表了Java中的集合,这里主要从其元素是否有序,是否可重复来进行区别记忆,以便恰当地使用,当然还存在同步方面的差异,见上一篇相关文章。
List接口对Collection进行了简单的扩充,它的具体实现类常用的有ArrayList和LinkedList。你可以将任何东西放到一个List容器中,并在需要时从中取出。ArrayList从其命名中可以看出它是一种类似数组的形式进行存储,因此它的随机访问速度极快,而LinkedList的内部实现是链表,它适合于在链表中间需要频繁进行插入和删除操作。在具体应用时可以根据需要自由选择。前面说的Iterator只能对容器进行向前遍历,而ListIterator则继承了Iterator的思想,并提供了对List进行双向遍历的方法。 Set接口也是Collection的一种扩展,而与List不同的时,在Set中的对象元素不能重复,也就是说你不能把同样的东西两次放入同一个Set容器中。它的常用具体实现有HashSet和TreeSet类。HashSet能快速定位一个元素,但是你放到HashSet中的对象需要实现hashCode()方法,它使用了前面说过的哈希码的算法。而TreeSet则将放入其中的元素按序存放,这就要求你放入其中的对象是可排序的,这就用到了集合框架提供的另外两个实用类Comparable和Comparator。一个类是可排序的,它就应该实现Comparable接口。有时多个类具有相同的排序算法,那就不需要在每分别重复定义相同的排序算法,只要实现Comparator接口即可。集合框架中还有两个很实用的公用类:Collections和Arrays。Collections提供了对一个Collection容器进行诸如排序、复制、查找和填充等一些非常有用的方法,Arrays则是对一个数组进行类似的操作。 Map是一种把键对象和值对象进行关联的容器,而一个值对象又可以是一个Map,依次类推,这样就可形成一个多级映射。对于键对象来说,像Set一样,一个Map容器中的键对象不允许重复,这是为了保持查找结果的一致性;如果有两个键对象一样,那你想得到那个键对象所对应的值对象时就有问题了,可能你得到的并不是你想的那个值对象,结果会造成混乱,所以键的唯一性很重要,也是符合集合的性质的。当然在使用过程中,某个键所对应的值对象可能会发生变化,这时会按照最后一次修改的值对象与键对应。对于值对象则没有唯一性的要求。你可以将任意多个键都映射到一个值对象上,这不会发生任何问题(不过对你的使用却可能会造成不便,你不知道你得到的到底是那一个键所对应的值对象)。Map有两种比较常用的实现:HashMap和TreeMap。HashMap也用到了哈希码的算法,以便快速查找一个键,TreeMap则是对键按序存放,因此它便有一些扩展的方法,比如firstKey(),lastKey()等,你还可以从TreeMap中指定一个范围以取得其子Map。键和值的关联很简单,用pub(Object key,Object value)方法即可将一个键与一个值对象相关联。用get(Object key)可得到与此key对象所对应的值对象。 2.List、vector、set、map的区别与联系
在使用Java的时候,我们都会遇到使用集合(Collection)的时候,但是Java API提供了多种集合的实现,我在使用和面试的时候频频遇到这样的“抉择” 。 :)(主要还是面试的时候)
久而久之,也就有了一点点的心得体会,写出来以供大家讨论。 总的说来,Java API中所用的集合类,都是实现了Collection接口,他的一个类继承结构如下: Collection<--List<--Vector ArrayList:同Vector一样是一个基于Array上的链表,但是不同的是ArrayList不是同步的。所以在性能上要比Vector优越一些,但是当运行到多线程环境中时,可需要自己在管理线程的同步问题。 LinkedList:LinkedList不同于前面两种List,它不是基于Array的,所以不受Array性能的限制。它每一个节点(Node)都包含两方面的内容:1.节点本身的数据(data);2.下一个节点的信息(nextNode)。所以当对LinkedList做添加,删除动作的时候就不用像基于Array的List一样,必须进行大量的数据移动。只要更改nextNode的相关信息就可以实现了。这就是LinkedList的优势。 List总结: 1. 所有的List中只能容纳单个不同类型的对象组成的表,而不是Key-Value键值对。例如:[ tom,1,c ]; 2. 所有的List中可以有相同的元素,例如Vector中可以有 [ tom,koo,too,koo ]; 3. 所有的List中可以有null元素,例如[ tom,null,1 ]; 4. 基于Array的List(Vector,ArrayList)适合查询,而LinkedList(链表)适合添加,删除操作。 HashSet:虽然Set同List都实现了Collection接口,但是他们的实现方式却大不一样。List基本上都是以Array为基础。但是Set则是在HashMap的基础上来实现的,这个就是Set和List的根本区别。HashSet的存储方式是把HashMap中的Key作为Set的对应存储项。看看HashSet的add(Object obj)方法的实现就可以一目了然了。 public boolean add(Object obj) LinkedHashSet:HashSet的一个子类,一个链表。 TreeSet:SortedSet的子类,它不同于HashSet的根本就是TreeSet是有序的。它是通过SortedMap来实现的。 Set总结: 1. Set实现的基础是Map(HashMap); 2. Set中的元素是不能重复的,如果使用add(Object obj)方法添加已经存在的对象,则会覆盖前面的对象;
3.Java基本概念:集合类 List/Set/Map... 的区别和联系
Collection:List、Set 如何在它们之间选择 一、Array , Arrays Java所有“存储及随机访问一连串对象”的做法,array是最有效率的一种。 1、 2、Java中有一个Arrays类,专门用来操作array。 二、Collection , Map 若撰写程序时不知道究竟需要多少对象,需要在空间不足时自动扩增容量,则需要使用容器类库,array不适用。 1、Collection 和 Map 的区别 容器内每个为之所存储的元素个数不同。 2、各自旗下的子类关系 Collection --List: 将以特定次序存储元素。所以取出来的顺序可能和放入顺序不同。 3、其他特征 * List,Set,Map将持有对象一律视为Object型别。 三、Collections Collections是针对集合类的一个帮助类。提供了一系列静态方法实现对各种集合的搜索、排序、线程完全化等操作。 四、如何选择? 1、容器类和Array的区别、择取 2、 结论:最常用的是ArrayList,HashSet,HashMap,Array。 注意: 1、Collection没有get()方法来取得某个元素。只能通过iterator()遍历元素。 5、Map用 put(k,v) / get(k),还可以使用containsKey()/containsValue()来检查其中是否含有某个key/value。 发生碰撞时,让array指向多个values。即,数组每个位置上又生成一个梿表。 6、Map中元素,可以将key序列、value序列单独抽取出来。使用keySet()抽取key序列,将map中的所有keys生成一个Set。 为什么一个生成Set,一个生成Collection?那是因为,key总是独一无二的,value允许重复。 |
数组 Map 使用小结相关推荐
- js中数组map方法的使用和实现
js中数组map方法的使用和实现 MDN中定义 map() 方法创建一个新数组,其结果是该数组中的每个元素是调用一次提供的函数后的返回值. 语法 var new_array = arr.map(fun ...
- java dozer数组_Dozer 使用小结
这篇文章是本人在阅读Dozer官方文档(5.5.1版本,官网已经一年多没更新了)的过程中,整理下来我认为比较基础的应用场景. 本文中提到的例子应该能覆盖JavaBean映射的大部分场景,希望对你有所帮 ...
- Go进阶(5): 数组与切片+多维数组+map切片
1. 数组array 数组可以存放多个同一类型数据,数组也是一种数据类型,在Go中,数组是值类型.与C++一致 长度是的固定的,不能够动态变化 var arr [] int 相当于slice切片 va ...
- EL表达式从数组 Map List集合取值
Jstl是sun的标准taglib库,Jstl是标签库和el语言的结合. el 表达式的隐含对象pageScope,requestScope,sessionScope,applicationScope ...
- jQuery修改数组$.map
$.map() :用于修改数组 第一个参数是哪个对象 第二个参数是修改函数(会自己遍历所有的) $(function () { var arr = [ "a", "b&q ...
- go语言 数组 map整体json
实验结论: 1. 基础类型的数组,map可以直接json序列化为字符串 2. 上面的字符串也可以json反序列化为数组,map 实验结果如图: 完整代码如下: package mainimport ( ...
- arr数组怎么取值_【JavaScript】Array数组常规使用小结(持续更新......)
一.概述 JavaScript的 Array 对象是用于构造数组的全局对象,数组是类似于列表的高阶对象. 二.创建数组四种方式 2.1.字面-隐式创建数组 var movieList = [" ...
- 前端js数组元素的筛选,修改,新增属性小技巧一---前端数据筛选filter()函数,更新数组map()函数;
举个简单的例子(对数组的筛选,比如说3的倍数的值取出来): var a = [1,2,3,4,5,6,7];a = a.filter(function(value){var flag = true;i ...
- 【VBA(十一):使用VBA数组】【认识数组+数组应用案例+小结】
上一篇:[VBA(十):使用Dir函数合并多个文件的数据][对象赋值到变量(Set)+认识Dir函数+小结] 文章目录 认识数组 数组应用案例 求和 最值 小结 知识点 概念 认识数组 一组变量.可以 ...
最新文章
- php substr cnblog,php中substr用法示例
- 发送图片微博_微博引流之(实时号养成内幕解析)!
- hadoop2.2支持snappy压缩安装及配置
- 目标检测系列(八)——CenterNet:Objects as points
- cortex a7 a53_小号“A7”终于亮相,配4米9车长 大溜背!堪称15万内最强颜值!
- 第二节 CSS入门介绍
- Linux入门学习(五)
- fastdfs笔记_fastdfs基于group的扩容
- Python趣味编程3则:李白买酒、猴子吃桃、宝塔上的琉璃灯
- java 获取项目下的webapp_Spring Boot2 系列教程(一)纯 Java 搭建 SSM 项目
- 从零开始理解JAVA事件处理机制(3)
- IOS 改变导航栏返回按钮的标题
- 第三季-第16课-信号量互斥编程
- eclipse 自动下载源码插件
- 【python】python 包构建工具setup.py
- 什么是多边形网格?对于3D建模来说是个怎样的存在?
- Linux软件包管理工具-yum
- CentOS7.6 无网络环境安装MySQL5.7.x
- 【java并发编程实践】源码
- 第七届计算机科学夏令营,2020年中国科学技术大学第七届计算机科学暑期夏令营报名通知...