集合
一.集合
1.什么是集合
集合框架:用于存储数据的容器。
数组其实就是一个集合。集合实际上就是一个容器,可以来容纳其它类型的数据。
集合不能直接存储基本数据类型,另外集合也不能直接存储java对象,集合当中存储的都是java对象的内存地址。(或者说集合中存储的是引用。)
list.add(100); //自动装箱Integer
注意:
- 集合在java中本身是一个容器,是一个对象。
- 集合中任何时候存储的都是“引用”。
2.集合的特点
集合的特点主要有如下两点:
-
对象封装数据,对象多了也需要存储。集合用于存储对象。
-
对象的个数确定可以使用数组,对象的个数不确定的可以用集合。因为集合是可变长度的。
3.集合和数组的区别
1.数组是固定长度,集合是可变长度
2.数组可以存储基本数据类型,也可以存储引用数据类型。 集合只可以存储引用数据类型。
3.数组存储元素必须是同一类型,集合可以是不同数据类型。
4.数据结构
在java中每一个不同的集合,底层会对应不同的数据结构。往不同的集合中存储元素,等于将数据放到了不同的数据结构当中。
什么是数据结构?数据存储的结构就是数据结构。不同的数据结构,数据存储方式不同。例如:
数组、二叉树、链表、哈希表…
以上这些都是常见的数据结构。
二.集合继承结构图
1.集合继承结构图
2.常用集合类有哪些
Map接口和Collection接口是所有集合框架的父接口:
Collection接口的子接口包括:Set接口和List接口。
Map接口的实现类主要有:HashMap、TreeMap、Hashtable、ConcurrentHashMap以及Properties等。
Set接口的实现类主要有:HashSet、TreeSet、LinkedHashSet等。
List接口的实现类主要有:ArrayList、LinkedList、Stack以及Vector等。
三. java.util.Collection接口
1.Collection接口
Collection
-
List:有序(元素存入集合的顺序和取出的顺序一致),元素都有索引。元素可以重复。
-
Map:无序(存入和取出顺序可能不一致),不可以存储重复元素,必须保证元素的唯一性。
-
添加:
add(object):添加一个元素
addAll(Collection):添加一个集合中的所有元素。 -
删除:
clear():将集合中的元素圈删除 ,清空集合。
remove(obj):删除集合中指定的对象。注意:删除成功,集合的长度会改变。
remove(collection):删除部分元素。部分元素和传入Collection一致。 -
判断:
boolean contains(obj):集合中是否包含指定元素。
boolean containsAll(Collection):集合中是否包含指定的多个元素。
boolean isEmpty():集合中是否有元素。 -
获取:
int size():集合中有几个元素。 -
取交集:
boolean retainAll(Collection):对当前集合中保留和指定集合中相同的元素。如果两个元素相同,返回false;如果retainAll修改了当前集合,返回true。 -
获取集合中的所有元素:
Iterator iterator():迭代器 -
*将集合变成数组:
toArray();
2.java.util.Iterator接口:
迭代器:是一个接口。作用:用于取,遍历集合中的元素。
-
boolean hasNext() 如果仍有元素可以迭代,则返回true。
-
E next()
返回迭代的下一个元素 -
void remove() 从迭代器指向的collection中移除迭代器返回的最后一个元素(可选操作)。
Iterator it=coll.iterator();//获取容器中的迭代对象
————————————————————————
public static void main(String[] args){
Collection coll=new ArrayList();
coll.add("abc0");
coll.add("abc1");
coll.add("abc2");
//————————方式一————————————
Iterator it=coll.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
//________方式二用此种____________
for(Iterator it=coll.iterator();it.hasNext();){
System.out.println(it.next());
}
}
————————————————————————
四.List接口
List本身是Collection接口的子接口,具备了Collection的所有方法。现在学习List体系特有的共性方法,查阅方法发现List的特有方法都有索引,这是该集合最大的特点。
List:有序(元素存入集合的顺序和取出的顺序一致),元素都有索引。元素可以重复。
List:
- ArrayList:底层数据结构是数组,线程不同步,查询元素的速度非常快。
- LinkedList:底层数据结构是链表,线程不同步,增删元素的速度非常快。
- Vector:底层数据结构是数组,线程不同步,Vector无论查询和增删都巨慢。
-
添加:
add(index,element):在指定的索引处插入元素。
addAll(index):在指定的索引处插入一堆元素。 -
删除:
remove(index):删除指定索引位的元素。返回被删的元素。 -
获取:
Object get(index):通过索引获取指定元素。
int indexOf(obj): 获取指定元素第一次出现的索引位,如果该元素不存在返回-1。所以,通过-1,可以判断一个元素是否存在。
int lastIndexOf(Object o):反向索引指定元素的位置。 -
修改:
Object set(index,element):对指定索引位进行元素的修改。 -
获取所有元素:
ListIterator listIterator():list集合特有的迭代器。
List集合支持对元素的增.删.改.查。
//List集合因为有下标有了另外获取元素的方式:遍历
for(int i=0:i<list.size();i++){
System.out.println("get:"+list.get(i));
}
ListIterator是List集合特有的迭代器
ListIterator it=list.listIterator; //取代Iterator it=list.iterator;