1 集合
1.1 介绍
集合,是Java中提供的一种容器,可以用来存储多个数据。
集合与数组的区别:
- 数组的长度是固定的,集合的长度是可变的。
- 集合中存储的元素必须是引用类型数据。
1.2 集合的继承实现关系
1.3 Collection 接口中常用方法
boolean add(E e)
void clear() // 清空集合中元素
boolean contains(Object o)
boolean remove(Object o) // 移除集合中遇到的第一个指定的元素
int size()
Object[] toArray() // 集合转数组
Java中三种长度表现形式
- 数组.length
- 字符串.length()
- 集合.size()
2 迭代器
2.1 介绍
Java中有很多个集合,它们存储元素的存储方式不尽相同,而取出这些元素可以通过一种通用的方式来完成。
Collection集合元素的通用获取方式:在获取元素之前先判断集合中有没有元素,若有,就把它取出来,继续判断,若有,就再取出,一直把集合中的所有元素取出为止。这种取出方式就称为迭代。
2.2 Iterator接口中常用方法
boolean hasNext() // 若有元素可以迭代,返回true
E next() // 返回迭代的下一个元素
void remove() // 移除最后一个元素
示例:集合迭代
Collection<String> collection = new ArrayList<String>();
collection.add("abc1");
collection.add("abc2");
collection.add("abc3");
collection.add("abc4");
// 迭代器,对集合ArrayList中的元素进行取出
// 调用集合的方法iterator()获取出,iterator接口的实现类对象
Iterator<String> iterator = collection.iterator();
// 迭代是反复内容,使用循环实现。循环条件,hasNext()
while(iterator.hasNext()) {
String string2=iterator.next();
System.out.println(string2);
}
示例:集合迭代中的转型
// 集合可以存储任意类型的对象
// 集合中,不指定存储的数据类型,集合什么都存
Collection collection = new ArrayList();
collection.add("abc");
collection.add("343435");
// 迭代器获取
Iterator iterator =collection.iterator();
while (iterator.hasNext()) {
// iterator.next()获取出来的是Object类型
Object object=iterator.next();
System.out.println(object);
// 当需要使用子类对象的特有方法,需要向下转型
String string=(String)object;
System.out.println(string.length());
}
3 增强for循环
好处:代码少,方便对容器遍历
缺点:没有索引,不能对容器里的元素进行操作
int[] arr= {1,2,4,5,6,7,8};
for (int i : arr) {
System.out.print(i+" ");
System.out.print(i+1+" ");
System.out.println();
}
for (int i : arr) {
System.out.println(i);
}
4 泛型
由于在集合中什么类型的数据都可以存储,就导致取出时可能因为强转引发异常。而解决这个问题,就需要明确集合中元素的类型。这种方式称为泛型。
1)泛型的通配符
/*
* 定义方法,可以同时迭代两个集合
* 参数:共同实现的接口
*/
public static void myIterator(Collection<?> coll){
Iterator<?> iterator=coll.iterator();
while (iterator.hasNext()) {
Object object = (Object) iterator.next();
System.out.println(object);
}
}
public static void main(String[] args) {
ArrayList<String> arrayList=new ArrayList<String>();
HashSet<Integer> set=new HashSet<Integer>();
arrayList.add("124");
arrayList.add("789");
set.add(789);
set.add(340);
myIterator(set);
myIterator(arrayList);
}