*集合概念:
用于存储多个对象的单一对象(容器)。存储的数据叫元素。
元素都是引用类型。
( 用于模拟现实生活中的存储容器,因此集合类型,不单单是一种。
有很多类型,设计成各种存储的数据结构。这些类型统称为集合框架 )
--元素:必须是引用数据类型的数据,不能是基本数据类型的数据。
JDK1.5新特性:
在1.5以前,容器可以存储Object的任何子类型,但是在对元素进行
操作时,比如调用元素的方法等。我们必需知道元素的类型,因此
在编程中增加了大量代码,来进行强制转换,增加了开发难度。
因此1.5开始支持了一个新特性,叫[泛型机制]。用来规定容器中
存储的元素的类型。此机制可以在编译期间就进行判断元素的类型。
=========================================================================
*集合与数组的区别:
数组:可以存储基本数据类型,也可以存储引用数据类型
集合:只能存储引用数据类型
=========================================================================
*Collection接口:
是集合框架的顶级父接口,用来定义常用的抽象方法。
子类需要实现相应的方法逻辑。
--常用方法:
boolean add(E e):
将对象e添加到集合中
int size():
返回集合元素的个数
boolean addAll(Collection c):
将集合c里的元素添加到此集合中
void clear():
清空集合元素
boolean contains(Object obj):
用于判断集合中是否存在于obj相同的元素
boolean containsAll(Collection c)
用于判断此集合中是否包含集合c中的所有元素
boolean isEmpty():
用于判断集合元素是否为空
boolean remove(Object o)
用于移除集合中的某一元素
boolean removeAll(Collection c)
用于移除此集合中与c中共有元素
boolean retainAll(Collection c);
用于保留此集合中与c中共有元素
###子接口:List, Set, Queue
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
一、List:列表
此接口对应的实现类的特点都是:有序的,可以重复的
重复与否与元素的equals方法有关
常用方法:
void add(int index,E element):
将某一元素,插入到此集合的下标index处。
E get(int index):
返回指定下标上的元素
int indexOf(Object obj):
返回指定元素第一次出现的位置。如果没有,返回-1.
E set(int index,E newElement):
使用新元素newElement替换下标index上的元素,返回原元素。
boolean remove(int index):
移除此集合中下标为index上的元素
List<E> subList(int fromIndex,int endIndex):
截取此集合中的一部分,即截取子集,从fromIndex到endIndex
"包前不包后"
PS:此方法在堆中不会产生新的集合对象。
变量引用的父集的一部分。
修改子集,会影响父集
int lastIndexOf(Object obj):
返回此集合指定元素obj最后一次出现的下标。找不到返回-1.
--java 8 为List集合增加了sort()和replaceAll()两个常用的默认方法。
sort():
方法需要一个Comparator对象(函数式接口)来控制元素升序;
规则:字符串长度越长,字符串越大,再以升序排列。
replaceAll():
方法需要一个UnaryOperator对象(函数式接口)来替换所有集合元素。
规则:直接用集合元素(字符串)的长度作为新的集合元素。
所以,可以使用Lambda表达式来创建该函数式接口的对象。
--------------------------------------------------------------------------
*使用Lambda表达式遍历集合:
利用forEach(Consumer action)
*使用java 8 增强的Iterator遍历集合元素:
4种方法
*使用Lambda表达式遍历Iterator(迭代器接口):
利用forEachRemaining(Consumer action)
*使用foreach()循环遍历集合元素:
for(Object obj : books)
--------------------------------------------------------------------------------------------------
*List的三个实现类:
(1)ArrayList
底层是基于动态数组的数据结构.是有存放顺序的.
(2)LinkedList
底层是基于双链表的数据结构.每一个存储单元,都涉及到其他两个引用.
【除此之外,LinkedList还实现了Deque接口,可以被当成双端队列来使用。
因此,既可以被当成栈来使用,也可以被当成队列使用。】
优缺点: 在执行get()/set()时,ArrayList的效率高,LinkedList需要移动指针,效率低
在增加/删除操作时,LinkedList效率高,ArrayList效率低(需要扩容,移动元素)
ps:当然,在元素的数量大的情况下,区别才明显。
(3)Vector:是一个比较古老的集合类型,
线程安全,但是效率特别低&#x