文章目录
1.什么是集合
数组其实就是一个集合,集合实际上就是一个容器,可以用来装其他类型的数据。集合可以一次容纳多个对象。
集合不能直接存储基本数据类型,也不能直接存储Java对象,集合中存储的都是Java对象的内存地址(引用)。需要注意的是集合本身也是一个对象,也有内存地址。
在Java中每一个不同的集合,底层会对应不同的数据结构,向不同的集合中存储元素,等于将数据放到了不同的数据结构中。数据结构–数据存储的结构。
所有的集合类和接口都在Java.util包下
2.集合的分类
Java中的集合分为两大类:
- 以单个方式存储元素
- 该集合中最终的父类为java.util.Collection;
- 以键值对的方式存储元素
- 该集合中最终的父类为java.util.Map;
所有集合的实现类:
ArrayList:底层是数组
LinkedList:底层是双向链表
Vector:底层是数组,线程安全的
HashSet:底层是HashMap,向HashSet中存放数据,实际上是存放到了HsahMap中的key部分。
TreeSet:底层是二叉树,向TreeSet中存放数据,实际上是存放到了TreeMap中的key部分。
HashMap:底层是哈希表
HashTable:底层是哈希表,线程安全的。
Properties:线程安全的,并且K、V只能存储字符串。
TreeMap:底层是二叉树。TreeMap集合可以自动按照大小顺序排列。
List集合存储特点:
- 有序不可重复
Set(Map)集合存储特点:无序不可重复,元素没有下标
SortedSet集合存储特点:无序不可重复,集合中的元素是可排序的
Map集合中的key,就是Set集合(向Set集合放数据,实际上是放到了Map集合中的key部分)。
3. Iterator接口(Collection集合的遍历)
以下的遍历方式,是所有Collection的通用方式,在Map集合中不能使用。
Iterator接口中的方法
boolean hasNext();
Object next();
void remove();
迭代器原理图
Collection c1=new ArrayList();//无序不可重复
c1.add(12);
c1.add("124s");
c1.add('e');
//获取集合的迭代器
Iterator iterator=c1.iterator();
//获取迭代器的对象开始遍历迭代
while(iterator.hasNext()){
Object object = iterator.next();
System.out.println(object);
}
hasNext与next方法
boolean hasNext();
如果迭代具有更多元素,则返回true
。Object next();
返回迭代中的下一个元素。
注意:集合结构只要发生改变,迭代器必须重新获取。当结构发生改变,迭代器没有重新获取时(迭代器不知道集合发生了变化),调用next方法会发生异常:java.util.ConcurrentModificationException
Collection c1=new ArrayList();//有序可重复
//此处改为HashSet不会发生异常
//获取集合的迭代器
Iterator iterator=c1.iterator();
//获取迭代器的对象开始遍历迭代
while(iterator.hasNext()){
Object object = iterator.next();
System.out.println(object);
}
// System.out.println("==================");
c1.add(12);
c1.add("124s");
c1.add('e');
//获取集合的迭代器
// iterator=c1.iterator();
//获取迭代器的对象开始遍历迭代
while(iterator.hasNext()){
Object object = iterator.next();
System.out.println(object);
}
/*
执行结果为:
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
at java.util.ArrayList$Itr.next(ArrayList.java:851)
at com.CollectionDemo.CollectionDemo.main(CollectionDemo.java:31)
remove方法
void remove();
从底层集合中删除此迭代器返回的最后一个元素(可选操作)。 --删除当前元素
Collection c1=new ArrayList();//有序可重复
c1.add(12);
c1.add("124s");
c1.add('e');
//获取集合的迭代器
Iterator iterator=c1.iterator();
//获取迭代器的对象开始遍历迭代
while(iterator.hasNext()){
Object object = iterator.next();
c1.remove(object);//================注意此处
}
System.out.println(c1.size());
//这样删除会发生异常:java.util.ConcurrentModificationException
在迭代的过程中删除元素的方法
-
在删除后再次获取迭代器
Collection c1=new ArrayList();//有序可重复 c1.add(12); c1.add("124s"); c1.add('e'