容器是可以容纳其馀Java对象的对象。 Javacollectionsframework(JCF )为Java开发人员提供了通用的容器html
java集合主要分为四个部分: java
Collections (列表、集集合)、贴图映射、迭代器(迭代器、枚举)、工具类(数组、集合) )程序员
背景
数组优点:是一个简单的线性数组,可以快速访问数组元素,效率很高。 从效率和类型检查的角度来说,数组是最好的。
排列劣势:缺乏灵活性。 容量必须预先定义,不能随着需求的变化而扩展。
由于数组的这些缺点,为了存储对象,需要更强大、更灵活、容量可以随时扩大的集合(Collection )。 (扩容)面试
基本类型
Java容器只能包含对象。 对于基本类型(int、long、float、double等),必须包装在对象类型中,然后放在Integer、long、float、double等)容器中。 在很多情况下,拆包和打包都是自动完成的。 这将产生额外的性能和空间开销,但简化了设计和编程。 算法
类属模型
所有容器内部都包含Object对象,通用机制(语法糖、编译器)只需简化编程,编译器自动完成强制类型转换。 JDK 1.4之前的版本不支持通用性,类型转换必须由程序员显式执行。 程序设计
ArrayList list=new ArrayList (; //通用、参数化数组
通用通配符? )安全
上限: publicvoidgetfunc (列出扩展sAnimalan )表示此处的参数传递给Animal或animal子框架
如果将下限限制为: publicvoidgetfunc (setsuperAnimalan ),则表示此处的参数将传递给Animal或animal父工具
使用通用注意事项:
一、通用型不支持基本数据类型
二、泛型不支持继承,必须匹配优先级(这样错误)列表=新数组列表);
存储器
因为Java中的所有对象都位于堆中,并且对象只能通过引用访问,所以放在容器中的实际上是对象的引用,而不是对象本身
Ava集合的骨架图
List链表
在Collection的子接口中,内容允许重复。
List特色:线性。 也就是说,有秩序。 元素的放置顺序与元素的保存顺序相同。
表象上: List最大的特色是有下标。
ArrayList :表现为数组的封装,基础是数组。
链接列表:基础是双向链表。
一、经常寻找、修改的时候使用ArrayList。
二、成长、删除用较多时(特别是向中间成长、删除)使用链接列表。
三.线程安全、数据量大时考虑使用vector。
泛型:用于控制集合只能操作一种数据类型。
遍历:一、普通for循环遍历。
二、使用迭代器完成遍历。 ——从头到尾不带下标地行走,无法操作数组。
三. for-each循环语句是一个迭代器,语法简单,还可以操作数组。 推荐。
集集
在collection的子接口中,内容不允许重复。
特征:不能放置重复的元素,也不能无序放置元素。
表象上: Set没有下标。
HashSet判断两个要素不重复:一、调用equals方法比较两个对象
二.两种元素的hashcode值一致
我认为只有同时满足这两个条件,java才是同一对象。
如果重写了所有equals方法,则通常会重写hashcode方法。 当equals返回true时,hashcode返回的值必须相同。
hashSet只能进行增加、删除、求出长度、遍历等操作。
遍历:一、迭代器
二. for-each
地图地图
是存储配对值的最大接口,所有元素都存储为键和值。
特点:键值对——键有唯一要求,值可重复
经常使用子类: HashMap、Properties (仅操作属性文件) )。
混洗地图
常用体操:添加、删除、更改、调查、内容、扫描
对于遍历:不能同时遍历所有键和值。 只能分别遍历键和值。
钥匙在横移中以Set型迎接。
在遍历过程中由Collection接收值。
混洗与混洗相比,混洗是非线性安全的,混洗是线性安全的。
二、hashMap允许空值制作密钥
/值,hashTable不容许。Properties
经常使用操做:增、删、查、改、容、存、取。
存的时候,调用的是.store方法存文件,
取的时候,调用.load方法取文件。
文件类型:.properties——固定格式的文本文件,将是工做中使用率第二的配置文件。
Map.Entry
Map.Entry的内部接口,每一个
Map.Entry对象都保存着一对key——value的内容,每一个map接口中都保存有多个Map.Entry接口实例。
Iterator
集合的输出接口,从前到后输出指定集合中的内容。不能遍历Map,只用来遍历Collection。
ListIterator
是Iterator的子接口,能够进行双向输出。专门用来便利List.
Enumeration
是最先的输出接口,用于输出指定集合中的内容。
collections
集合操做的算法类
包括排序、求最大、最小、反转、随机混排等操做
排序的时候,由于是对对象排序,因此应按必定的业务逻辑的天然顺序排序。
比较器
comparable接口:内部比较器
可对任意数组排序,java泛型技术,二叉树排序原理
一、类实现comparable接口
二、重写compareTo方法
compareTo方法返回的是int类型数据:1表示大于,-1表示小于,0表示相等。
comparator接口:外部比较器
补救的作法
此接口同样须要重写方法,但方法接收两个对象,返回值依然是一、-一、0;
SortedSet
单值的排序接口,实现此接口的集合类,里面的内容可使用比较器排序。
SortedMap
存放一对值的排序接口,里面内容按照key排序,使用比较器排序。
Queue
队列接口,此接口的子类能够实现队列操做。
抄录网址