1:Collection接口:存放单个对象.
-List
- ArrayList
ArrayList是以数组创建,填满的时候扩容是根据1.5+1,不过之前需要跟原数组大
小 +1(minCapacity)比较,以大的为最新数组的容量。
1:缩小容量用trimToSize();
2:对非NULL用equals的方式寻找;
3:非线程安全;
- LinkedList
LinkedList基于双向链表机制实现,一个entry有previous,next指向。查找和删除
都须要遍历链表,非线程安全。
- Vector
Vector跟ArrayList基本原理一样,但在各个方法加了synchronized,所以线程安
全.扩容方法也不同,Vector有一个参数capacityIncrement,
当capacityIncrement>0的时候,扩大为size+capacityIncrement。如果=<0,就扩
大为size的两倍。
- Stack
Stack继承于Vector,在Vector的基础上实现后进先出(LIFO),提供
push,pop,peek(获取最后一个元素).
-Set
Set和List最大的区别是Set不可以放重复的元素,HashSet,TreeSet不支持get(int).
- HashSet
基于HashMap实现,非线程安全。
- TreeSet
基于TreeMap实现,非线程安全,支持排序,可以传入Comparator
2:Map接口:key-value
- HashMap
HashMap是数组与链表的结合体,它有四个属性:
key,value,hash,next.get(key)的时候首先通过key的hashcode查询,然后
用key的equals找到在链表的具体位置。
1:hash算法:hashcode & (lenght-1)取出在数组的位置。数组的长度都是2
的n次方。new hashmap的时候会把数组容量对应到2的N次方;
2:hashmap的三个因素:capacity,loadfactor,threshold;
threshold=capacity*loadfactor(12=16*0.75);当元素超越
threshold的时候会进行扩容resize.resize会重新计算现有元素的位置,
所以比较耗性能,所以当知道多少元素的时候,可以初始它避免resize;如有
1000个元素的时候,0.75*size>1000 和需要是2的N次方,所以size为
2048,new HashMap(2048)
3:对于key为null,会替换之前key为null的value,否则新建,next为第一个
entry.所以get的时候对key为null的总拿第一个进行遍历。
4:非线程安全,可以使用Collections.synchronizedMap。
- TreeMap
1:非线程安全。
2:如果没有传入comparator,root非null,当key为null时候,抛出
nullpointexception
分享到:
相关推荐
朴素贝叶斯训练集合,普通样本测试,朴树贝叶斯 sklean 文本分类实现
所有集合类都位于java.util包下,但支持多线程的集合类位于java.util.concurrent包下。集合里存存放的元素都是引用数据类型。 数组与集合的区别:(1)数组长度不可变且无法保存具有映射关系的数据;集合类用来保存数量...
学习面向对象的主要特征和基本概念,包括类、对象、继承、封装、多态、方法的重载和重写、Java的访问修饰符与其它关键字以及集合等。 案例难度 ★★★ 案例覆盖技能点 1、流程控制语句 2、类、对象 3、封装、...
Collections是操作集合对象的工具类 Objects是操作引用数据类型对象的工具类 Arrays的常用方法 普通排序 Arrays.sort(int[] a) Arrays.sort(int[] a, int fromIndex, int toIndex) 并行排序:JDK1.8新增 Arrays....
P-集合(Packet sets)是把动态特性引入到有限普通集合X内,改进有限普通集合x得到的。P-集合是由内 P-集合XF(internal packet set XF)与外P-集合XF(outer packet set XF)构成的集合对;或者,(XF,XF)是P-集合。P-...
underscore js工具类,underscore为集合类对象提供了一致的接口
array.h: 安全数组,可自动增长大小(随机访问,但扩充时效率低) linkedlist.h: 普通链表(可随机访问,但访问... 二叉搜索树 avltree.h: AVL 树 set.h: 集合类(元素不会重复) DFA: 通用自动机
Students(用户学生信息,用户实体类中有一个Test_Content_Record集合类) Id User_Name Test_Content(题库) Id (题库内容) (题库结果) (题库分数,分数根据结果来定,如果输出的结果不一致则0分,如
Students(用户学生信息,用户实体类中有一个Test_Content_Record集合类) Id User_Name Test_Content(题库) Id (题库内容) (题库结果) (题库分数,分数根据结果来定,如果输出的结果不一致则0分,如
CISCO 技术大集合 {适合你们的技术} 二、命令状态 1. router> 路由器处于用户命令状态,这时用户可以看路由器的连接状态,访问其它网络和主机,但不能看到和更改路由器的设置内容。 2. router# 在router>提示符...
java8集合源码Java8 java8实践 链接 函数式编程与 OOP Lambda 简介:- 如何将普通方法转换为 lambda 表达式。 匿名实现类和 lambda 的区别 单行 lambda 不需要返回。 事实上,没有大括号就不能使用它。 但它在多行 ...
6. 普通集合转换Json 7. DataSet转换为Json 8. Datatable转换为Json 9. DataReader转换为Json 10. 解析JSON字符串生成对象实体 11. 解析JSON数组生成对象实体集合 12. 反序列化JSON到给定的匿名对象
动态数组是一种比较常用的集合类,其相对于普通数组的优势是可以自动增容,相对于链表的优势是可以下标访问。
list集合转换为json,普通集合转换为json,datatable转换为json,对象转换为json,类库代码提供给大家,希望对大家学习有帮助。
蓝桥杯大赛,全称是蓝桥杯全国软件和信息技术专业人才大赛,是由中华人民共和国工业和信息化部人才交流中心主办,国信蓝桥教育科技(北京)股份有限公司承办的计算机类学科竞赛。这是一个全国高校参加的赛事,累计...
所以这个时候我们就要用到Python标准库为我们提供的collections包了,它提供了多个有用的集合类,熟练掌握这些集合类,不仅可以让我们让写出的代码更加Pythonic,也可以提高我们程序的运行效率。 defaultdict ...
类这种数据类型是一个包含成员变量和成员函数的一个集合。 类的成员变量和普通变量一样,也有数据类型和名称,占用固定长度的内存空间。但是,在定义类的时候不能对成员变量赋值,因为类只是一种数据类型,本身不...
(3)Java 中的动态数组——其实为 Java 中的集合类 为什么要应用静态数组而不使用 Java 中的集合类(如 ArrayList 等)产生动态数组?主要 是考虑到效率和类型两方面的问题。 1) 效率: 要想保存和随机访问一系列...
而接口呢~还是拿教师做例子,教师的行为很多,除了和普通人相同的以外,还有职业相关的行为,比如改考卷,讲课等等,我们把这些行为定义成无body的方法,作为一个集合,它是一个interface。而教师张三李四的各自行为...
而Date的其他构造方法和普通方法的API都不容易实现国际化,因此目前Date类的大多数方法都被标识为过时,表示更灵活的时间类请参考java.util.Calendar。 Date的输出结果是按照国际通用格式输出的,而中国更习惯于...