集合(Collection)
概述
集合是Java中提供的一种容器,用来存储多个数据。
集合继承关系图
ArrayList继承了抽象类AbstractList,同时实现了List接口,List接口继承了Collection接口。
Collection接口为最顶层集合接口
Collection接口的子类:List接口、Set接口
List接口常用的子类有:ArrayList类、LinkedList类
Set接口常用的子类有:HashSet类、LinkedHashSet类
集合的方法
boolean.add(E e) 添加元素到集合
int size() 返回集合中元素的个数
Object[] toArray() 将集合转成数组
boolean contains(Object o) 判断集合中是否有该元素
void clear() 清空集合
public static void main(String[] args) {
Collection<String> collection = new ArrayList<String>();
collection.add("abc");
collection.add("a");
collection.add("b");
collection.add("c");
collection.add("c");
collection.add("abc"); // 集合中可以存储重复元素
// 返回集合中元素的个数
System.out.println(collection.size());
// 转换成数组形式
Object[] objects = collection.toArray();
System.out.println(Arrays.toString(objects));
// 是否包含abc
System.out.println(collection.contains("abc"));
// 删除某个元素
collection.remove("abc"); // 移除第一个为“abc”的元素
System.out.println(collection);
Collection<String> c = new ArrayList<>();
c.add("c");
collection.removeAll(c); // 移除所有为“c”的元素
System.out.println(collection);
// 清空集合
collection.clear();
System.out.println(collection.size()); // 清空后集合元素个数为0
}
迭代器
迭代器概述
Java提供了很多个集合,这些集合采取的存储方式不同,我们要取这些集合中的元素,可以通过一种通用的获取方式来完成
Collection集合的通用获取方式,在取元素之前先要判断集合中有没有元素,如果有,就把这个元素取出来,然后继续判断,直到集合中的元素全部取出,这种方式就叫迭代
每种集合的底层的数据结构不同,比如ArrayList是数组,LinkedList底层是链表。但无论哪种集合,都会有判断是否有元素及取出元素的动作,所以Java提供了一个迭代器定义了统一判断元素和取元素的方法。
迭代器的实现原理
集合中的迭代器:获取集合中元素的方式
Iterator接口:两个方法
- hasNext() 判断集合中是否还有元素,有则返回true
- next() 取出集合中下一个元素
找Iterator接口的实现类
Collection定义了一个方法:Iterator iterator();
以ArrayList为例:
public static void main(String[] args) {
Collection<String> collection = new ArrayList();
collection.add("a");
collection.add("b");
collection.add("c");
Iterator<String> iterator = collection.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
// for循环写法
// 集合在前面就被取了,集合中元素就就没有了
for(;iterator.hasNext();){
System.out.println(iterator.next());
}
}
增强for循环
Iterable作用就是实现增强for循环
格式:
for(数据类型 变量名:数组或集合){}
String[] strArr = {"1","2","a","b"};
for(String str : strArr){
System.out.println(str);
}
增强for循环的好处和弊端
好处:代码减少,方便对容器的遍历
弊端:没有索引,不能操作容器里面的元素
List接口
List接口的常用子类
ArrayList
LinkedList
List接口的常用方法
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add(1,"c");
System.out.println(list);
删除:
boolean result1 = list.remove("a");
System.out.println(result1);
String result2 = list.remove(0);
System.out.println(result2);
替换:
String result3 = list.set(0, "java");
System.out.println(result3);
System.out.println(list);