目录
一.集合容器
集合容器:一些可以存储任意类型对象并且长度可变的特殊类
集合容器共分为两种类型:
(1)集合(Collection):一个集合就是存储一组对象的容器,java集合框架支持集合(Set)和列表(List)两种类型的集合
·Set(集):集合中的对象,没有次序之分,且没有重复对象
·List(列表):集合中的对象按照索引位置排序,可以有重复对象,可以按索引位置查找对象
(2)映射(Map):集合中的每一个对象都由一个特殊的“键—值”对组成。键对象不能重复,值对象可以重复
二.Collection接口
Collection是最基本的集合接口,是List和Set接口的父接口
操作类型 | 方法声明 | 功能描述 |
添加删除基本操作 | boolean add(Object o) | 添加指定的对象o到集合中 |
boolean remove(Object o) | 从集合中移除指定对象 | |
查询操作 | int size() | 返回集合的对象个数 |
boolean isEmpty() | 如果集合中不包含对象,则返回true | |
boolean contains(Object o) | 如果集合中包含对象,则返回true | |
Iterator<>iterator() | 返回该集合的遍历对象 | |
成组操作 | void clear() | 从集合中删除所有元素 |
boolean removeAll(Collection c) | 从集合中删除c中所有元素 | |
boolean containsAll(Collection c) | 判断集合中是否包含c中的所有元素 | |
boolean addAll(Collection c) | 将c中所有元素添加到集合中 |
例子:
三.Iterator接口
Iterator对象也被称为迭代器,主要用于迭代访问Collection中的元素,主要方法如下:
·boolean hasNext():判断是否存在另一个可以访问的元素
·Object next():返回下一个可以访问的对象
·void remove():删除上一次访问返回的对象
例子:
public class CollectionDemo {
public static void main(String[] args) {
Collection collection=new ArrayList(); //创建集合对象
collection.add("hello"); //添加元素
collection.add("world");
Iterator iterator=collection.iterator(); //获得一个迭代器对象
while(iterator.hasNext()){
Object object=iterator.next();
System.out.println(object); //输出hello world
}
}
}
四.foreach循环
forreach是加强版的for循环,用于数组或集合中的元素,其语法格式为:
for(容器中的对象类型 临时变量名:容器变量){
执行语句
}
例子:
public class CollectionDemo {
public static void main(String[] args) {
Collection collection=new ArrayList(); //创建集合对象
collection.add("hello"); //添加元素
collection.add("world");
collection.add("hello");
collection.add("time");
//用forreach遍历元素
for (Object object:collection) {
System.out.println(object); //输出元素
}
}
}
五.List接口
List容器是最常用的,其元素可以重复,可以按顺序容纳,提取元素,List接口下有ArrayList,LinkedList,Stack和Vector等实现
ArrayList集合:存储结构是Object数组,增加删除数据时可能会牵涉到数组的扩容,复制以及元素的整体移动,效率慢,但可以通过数组名和索引直接定位查询元素
LinkedList集合:存储的结构是双向链表结构,方便元素的增加和删除,直接找到要插入的前置节点和后置节点来进行插入和删除操作,但查找慢,因为底层采用二分法的查找算法
方法声明 | 功能描述 |
void Add(Object obj) | 将指定元素obj添加到列表的尾部 |
void Add(int index,Object c) | 将指定元素添加到列表的指定位index |
boolean addAll(int index, Collection) | 将集合c中的元素添加到指定位置index |
Object get(int index) | 返回列表中指定位置的元素 |
int indexOf(Object obj) | 返回第一次出现obj的位置,-1表示无此元素 |
int lastIndexOf(Object obj) | 返回最后一次出现obj的位置,-1表示无此元素 |
boolean add(Object o) | 添加指定对象o到集合中 |
boolean remove(Object o) | 从此集合中移除指定对象o |
Object remove(int index) | 删除指定位置的元素 |
例子:
public class CollectionDemo {
public static void main(String[] args) {
List list=new LinkedList();
list.add("黎明");
list.add("郭富城");
list.add("张学友");
System.out.println("List元素:");
for (Object obj:list) {
System.out.print(obj+"\t");
}
System.out.println();
list.add(1,"刘德华");
list.add(3,"小马哥");
System.out.println("添加后List元素:");
for (Object obj:list) {
System.out.print(obj+"\t");
}
}
}
六.Set接口
Set接口继承Collection接口,与List接口比较相似,但又有如下差异:
·Set中不保存重复的元素,但List中保存
·Set中不能保证元素顺序信息,但List中元素的顺序是确定的
Set接口的实现有HashSet,TreeSet,EnumSet等
HashSet集合:底层实现是HashMap,采用哈希表存储结构,优点是添加,查询,删除速度快,缺点是无序
TreeSet集合:底层是TreeMap,采用二叉树的存储结构,优点是有序,查询速度比List快,缺点是查询速度没有HashSet快
EnumSet:枚举查询
方法声明 | 功能描述 |
int size() | 返回Set中元素的个数 |
boolean isEmpty() | 如果Set中不包含对象,则返回true |
boolean contains(Object o) | 如果Set中包含o对象,则返回true |
Iterator iterator() | 返回Set中元素的迭代器 |
boolean add(Object o) | 如果Set中不包含指定对象o,则将其添加到Set中 |
boolean remove(Object o) | 如果Set中包含o对象,则将其删除 |
boolean removeAll(Collection c) | 从Set中删除所有元素 |
boolean containsAll(Collenction c) | 判断Set中是否包含所有元素 |
boolean addAll(Collection c) | 将c中所有元素添加到Set中 |
void clear() | 从Set中删除所有元素 |
例子:
public class CollectionDemo {
public static void main(String[] args) {
Set set=new HashSet<>();
set.add("郭富城");
set.add("黎明");
set.add("张学友");
set.add("刘德华");
System.out.println("set中原有元素:");
Iterator iterator=set.iterator();
while (iterator.hasNext()){ //set元素只能通过迭代器遍历
Object o=iterator.next();
System.out.print(o+"\t");
}
set.add("黎明"); //添加相同元素
set.add("小马哥");
System.out.println("添加后set中元素");
iterator=set.iterator();
while (iterator.hasNext()){
Object o=iterator.next();
System.out.print(o+"\t");
}
}
}
//输出
set中原有元素:
黎明 郭富城 张学友 刘德华
添加后set中元素
黎明 郭富城 小马哥 张学友 刘德华
七.Map接口
Map是一种将键对象和值对象进行关联的容器,Map中的一个元素就是一个“键—值”对,其中键对象不允许重复,但值对象运行重复,通常用Hashtable,HashMap,TreeMap来实现
方法声明 | 功能描述 |
void clear() | 删除Map对象中所有“键—值”对 |
Set keySet() | 返回该Map中所有键所组成的Set集合 |
Set entrySet() | 返回该Map中所有“键—值”对组成的集合 |
Collection values() | 返回该Map中所有value所组成的Collection集合 |
boolean containsKey(Object key) | 查询Map中是否包含指定的键 |
boolean containsValue(Object value) | 查询Map中是否包含指定的值 |
Object get(Object key) | 返回指定键对应的值,若值不存在,则返回NULL |
boolean isEmpty() | 查询该Map是否为空 |
Object put(Object key,Object value) | 在Map中添加或覆盖一个“键—值”对 |
Object remove(Object key) | 删除指定键所对应的“键—值”对,返回被删除键所在关联的值 |
int size() | 返回该Map中“键—值”对的个数 |
例子:
public class CollectionDemo {
public static void main(String[] args) {
Map map=new HashMap();
map.put(1,"黎明");
map.put(2,"郭富城");
map.put(3,"张学友");
map.put(4,"刘烨");
map.put(4,"刘德华"); //新的值将会覆盖原有的值
boolean isContainKey=map.containsKey(1); //查询是否存在相应的键
System.out.println("是否有1号:"+isContainKey);
Object obj= map.get(2); //查询指定键的值
System.out.println("1号是:"+obj);
boolean isContainValue= map.containsValue("刘德华"); //查询是否有相应的值
System.out.println("是否有刘德华:"+isContainValue);
Set entry=map.entrySet(); //返回此映射的“键—值”图
Iterator iterator=entry.iterator();
System.out.println("键—值关系图:");
while (iterator.hasNext()){
Object o=iterator.next();
System.out.println(o);
}
}
}
//输出:
是否有1号:true
1号是:郭富城
是否有刘德华:true
键—值关系图:
1=黎明
2=郭富城
3=张学友
4=刘德华