-
Collection(集合框架)
-
集合就是数据集合(用来存储数据的集合) ,存放在java.util包中。集合中只能存储引用类型
-
- 为什么要学习java中的集合框架?
学习数组可以用来存储数据:
数组的存储数据的弊端:
a:存储相同数据类型的有序集合(存储的数据是相同类型的)
b:数组存储数据时 需要指定当前数组的长度而且长度不可变 (定长)
需求:使用数组存储学生信息 效率变低
使用数组存储每天的新闻信息
就是由于在大多数的应用场景中,数据都是动态的,导致数组存储要么浪费空间,要么浪费效率
因此java提供了一套功能强大的集合框架,来帮助存储数据信息。
3.为什么java提供了这么多集合对象存储数据信息?
这么多集合对象用来在不同的需求场景使用。
本质上而言 其实不同的集合对象底层存储实现方案不同 不同的存储结构 适用不同的需求。
学习集合类主要是学习1张图,3个知识点,6个接口,9个常用类。
1、1张图
2、3个知识点
1:泛型
https://blog.csdn.net/weixin_42371832/article/details/98050396
2:迭代器
- 迭代器就是提供的一种方法对一个容器对象中的各个元素进行访问,而不暴露该对象集合的内部细节。
- 集合类中有很多种类,每一个都有自己的特点,ArrayList底层维护的是一个数组,LinkedList是链表结构的,Hashset依赖的是哈希表,因为他们的内部结构不同,所以他们的迭代方式也不同。
- Iterable 是java.lang包下的接口 实现改接口都能够作为foreach的目标
- Iterator 是java.util包下的一个接口,迭代器用来迭代当前集合对象的ArrayList中通过内部类完成了对于改接口的实现 获取的其实是实现类对象
- 迭代器(iterator[不能支持并发修改] listIterator[支持并发修改])
- ListIterator 是一个接口 这个接口可以支持并发修改 内部提供了add set remove方法
- 如果对于一个List集合对象要通过使用迭代器做修改(删除、添加、修改)那么请使用ListIterator
3:比较器
treeMap和treeSet如果存储的元素需要按照指定的需求进行排序,创建treeMap和TreeSet对象时 需要指定指定比较器。
1:自定义对象的所属类 实现了内部比较器Comparable接口,重写compareTo方法,不利于后期扩展。
2:要么创建TreeSet对象是 指定外部比较器Comparetor接口 重写compare方法,自定义排序规则 可以随着业务扩展随时变化的。
3、6个接口
1.collection
存储元素的特点:无序,可重复
源码中的定义:
public interface collection <E> extends Iterable<E>{}
常见方法:
bollean add(object element) | 添加一个移元素 |
bollean remove(obj e) | 移除一个元素 |
bollean contains(obj e) | 当前元素是否包含 |
int size() | 元素个数 |
boolean isEmpty() | 是否为空 |
void clear() | 清空所有元素 |
inerator Iterator() | 获得迭代器 |
boolean addAll(collection c) | 将集合c中的所有元素添加到本集合中 |
boolean removeAll(coll c) | 移除交集 |
boolean containsAll(coll c) | 本集合中是否包含集合中的所有元素 |
boolean retainAll(coll c) | 保留交集 |
Object[] toArray() | 转化成object数组 |
Collection中没有修改元素
由于List、Set是collection的子接口,所以collection中的方法在List、Set的实现类中都存在。
代码示例:
import java.util.ArrayList; import java.util.Collection; public class Test01 { public static void main(String[] args) { // TODO Auto-generated method stub //Collection接口指向ArrayList实现类对象 Collection coll = new ArrayList(); //添加元素 coll.add("jsp"); coll.add("java"); coll.add("css");
System.out.println("coll中的元素:"+coll);
Collection colle = new ArrayList(); colle.add("css"); colle.add("jsp"); colle.add("java");
System.out.println("colle中的元素:"+colle); System.out.println("往coll中添加colle添加的对象:"+coll.addAll(colle)); System.out.println("coll中的元素:"+coll);
//删除元素 //coll.clear(); //System.out.println("coll中的元素:"+coll); // System.out.println("移除coll中的php一个元素"+coll.remove("php")); // System.out.println("coll中的元素:"+coll); // // System.out.println("移除coll中的所有colle中的元素"+coll.removeAll(colle)); // System.out.println("coll中的元素:"+coll); //查看元素 System.out.println("输出colle和输出coll和colle相同的元"+coll.retainAll(colle)); System.out.println("coll中的元素:"+coll);
System.out.println("查看当前集合是否为null:"+coll.isEmpty()); System.out.println("查看当前集合元素的个数:"+coll.size()); System.out.println("查看当前集合是否包含元素java:"+coll.contains("java")); System.out.println("查看当前coll是否包含colle:"+coll.containsAll(colle)); } } |
迭代方式:
- foreach,Iterator
代码示例:
import java.util.ArrayList; import java.util.Collection; import java.util.Iterator;
public class Test02 {
public static void main(String[] args) { //创建集合对象 Collection coll = new ArrayList();
//添加元素 coll.add("String"); coll.add("Scanner");
//迭代元素 //foreach循环迭代 for(Object obj:coll) { String str = (String)obj; System.out.println(str); } //iterator迭代器 Iterator it = coll.iterator();//实现类对象 while(it.hasNext()) { System.out.println(it.next()); } //Iterator 迭代器的变种写法 for(Iterator it1 = coll.iterator();it1.hasNext();) { System.out.println(it1.next()); }
}
} |
2.List
存储特点:有序 可重复 可以是null值
源码中的定义:public interface List <E> extends Collection <E>
常见方法:(这里包含collection中的所有方法,请查看collection的常用方法)
add(index,obj) | 在索引位置添加值 |
addAll(index,coll) | 将指定集合中的所有元素,插入到指定索引位置 |
remove(index) | 删除索引位置的内容 |
set(index,obj) | 修改索引位置的元素 |
subList(sindex,eindex) | 返回开始索引位置到结束索引位置的部分内容 |
get(index) | 获得指定索引的元素 |
indexOf(obj) | 返回此列表中第一次出现指定元素的索引,如果此索引列表不包含改元素,则返回-1 |
lastIndexof(obj) | 返回此列表中最后一次出现指定元素的索引,如果此索引列表不包含改元素,则返回-1 |
代码示例:
迭代方式:
普通for循环,foreach,Iterator
代码示例:
3.Set:
存储特点:无序 唯一
源码中的定义:public interface Set<E> extends Collection <E>
常见方法:(常见方法和collection一样,请参考collection的方法)
迭代方法:(和collection一样)
foreach、迭代器
4.Map
存储特点:k-v 键值的方式存储
(k:唯一无序 (set) v 无序可重复 (和collection一样))
常见方法:
put(k,v) | 添加键和值 |
get(k) | 通过键获取对应的值 |
containsKey(k) | 查看键是否存在 |
keySet() | 获取键 |
remove(k) | 通过键删除键和值 |
size() | 获取元素的个数 |
containsValue(v) | 查看值是否存在 |
values() | 获取值 |
代码示例:
迭代方式:
迭代1:获取键,迭代键的过程中通过get方法获取值
迭代2:迭代所有的值
迭代3:获取entry对象,通过getKey和getValue获取键和值
5.迭代器接口:(就是上面讲的迭代器)
Iterator 用来迭代元素
Iterable 可以作为foreach的目标
6.比较器:(就是上面键的比较器)
内部比较器
外部比较器
9个常用类请看下一章