偷了两天懒,把前面的回顾一下,顺便记一记,嘿嘿。
一、集合框架概述
1.集合、数组都是对多个数据进行存储操作的结构,简称Java容器。
- 此时的存储,主要指的是内存层面的存储,不涉及到持久化的存储(.txt, .jpg, .avi,数据库中
2.1 数组在存储多个数据方面的特点: .
- 一旦初始化以后,其长度就确定了.
- 数组一旦定义好,数组的类型也就确定了。我们也就只能操作指定类型的数据了。
比如: String[] arr;int[] arr1;0bject[] arr2;
2.2 数组在存储多个数据方面的缺点:
- 一旦初始化以后,其长度就不可修改。
- 数组中提供的方法非常有限,对于添加、删除、插入数据等操作,非常不便,同时效率不高。
- 获取数组中实际元素的个数的需求,数组没有现成的属性或方法可用。
- 数组存储数据的特点:有序可重复。对于无序、不可重复的需求,不能满足。
二、集合框架
/–Collection接口:单列集合,用来存储一个个对象
- List接口:存储有序的、可重复的数据 -->"动态"数组
ArrayList ,LinkedList ,Vector
- Set接口:存储无序的、不可重复的数据
HashSet,LInkedList,TreeSet
/–Map接口:双列集合,用来存储一对(key,value)数据
HashMap,LinkedHashMap,HashTable,Properties
三、Collection接口常用方法
- add(Object e):将元素e添加到集合中
- size():获取添加元素的个数
- addAll(Collection col1):将col1集合中的元素添加到当前集合中
- clear():清空集合元素
- isEmpty(Collection obj):判断当前集合是否为空
以下方法需要重写元素所在类的equals(),不重写则默认使用Object中的equals(),就是“==”
- contains(Object o):判断当前集合是否包含o
- containsAll(Collection col):判断形参col中的所有元素是否都在当前集合中
- remove(Object obj) 从当前集合中移除obj元素
- removeAll(Collection col) 从当前集合中移除col中所有的元素。注意:没有新建集合,直接修改当前集合
- retainAll(Collection col):获取当前集合和col的共同元素,直接修改当前集合
- equals(Object obj):判断当前集合与形参 集合 元素都相同,注意创建的对象是否有序问题
- hashCode():返回当前对象的hash值
四、集合元素遍历----迭代器、增强for循环
增强for循环内部也是维护的一个迭代器。
调用集合的iterator(),返回一个迭代器,然后使用以下方法。
- hasNext():下一个位置上有无元素
- next():指针下移,返回当前位置上的元素
- remove():删除元素,Iterator对象中的remove方法,不是集合对象中的remove方法
@Test
public void test1() {
Collection col = new ArrayList();
col.add("aa");
col.add(123);
col.add(789);
col.add(4560);
//for(集合中元素的类型 局部变量 :集合对象)
//内部仍然调用了迭代器
for (Object obj : col) {
System.out.println(obj);
}
}
@Test
public void IteratorTest() {
Collection col = new ArrayList();
col.add("aa");
col.add(123);
col.add(789);
col.add(4560);
Iterator iterator = col.iterator();
// System.out.println(iterator.next());
// System.out.println(iterator.next());
// System.out.println(iterator.next());
// System.out.println(iterator.next());
// 报异常 NoSuchElementException
// System.out.println(iterator.next());
//方式一:不推荐
// for (int i = 0; i < col.size(); i++) {
// System.out.println(iterator.next());
// }
//方式二:推荐
//hasNext():下一个位置上有无元素
//next():指针下移,返回当前位置上的元素
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
//错误方式一:跳着打印,最后报异常 NoSuchElementException
Iterator iterator1 = col.iterator();
while ((iterator.next()) != null) {
System.out.println(iterator.next());
//错误方式二:始终输出第一个,停不下来
while (col.iterator().hasNext()) {//每次调用都会返回一个新的Iterator对象
System.out.println(col.iterator().next());
}
}
//remove() --如果还未调用next()或在上一次调用next方法之后已经调用了remove方法,
//再调用remove都会报illegalStateException.
Iterator iterator2 = col.iterator();
while (iterator2.hasNext()){
Object obj = iterator2.next();
if("aa".equals(obj)){
iterator2.remove();
}
}
}