文章目录
集合
面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,Java就提供了集合类。
集合和数组的区别有:
- 长度区别:
数组的长度是固定的而集合的长度是可变的 - 数据类型的区别:
数组可以存储基本数据类型 , 也可以存储引用数据类型; 而集合只能存储引用数据类型 - 内容区别:
数组只能存储同种数据类型的元素 ,集合可以存储不同类型的元素
在集合框架中,Collection是顶层父接口,List和Set为子接口,List的实现类又有ArrayList、LinkedList、Vector,而Set的实现类有HashSet、LinkedHashSet、TreeSet,集合框架图如下所示
首先,讲解Collection顶层父接口下的方法
Collection
常用的成员方法
-
添加功能
- boolean add(Object obj):添加一个元素
- boolean addAll(Collection c):添加一个集合的元素 (给一个集合添加进另一个集合中的所有元素)
-
删除功能
- void clear():移除所有元素
- boolean remove(Object o):移除一个元素
- boolean removeAll(Collection c):移除一个集合的元素(移除一个以上返回的就是true) 删除的元素是两个集合的交集元素,如果没有交集元素 则删除失败 返回false
-
判断功能
- boolean contains(Object o):判断集合中是否包含指定的元素
- boolean containsAll(Collection c):判断集合中是否包含指定的集合元素(这个集合 包含 另一个集合中所有的元素才算包含才返回true)
- boolean isEmpty():判断集合是否为空
-
获取功能
- Iterator iterator():获取一个迭代器(主要用于遍历集合)
- iterator().next():让迭代器的指针下移
- iterator().hasNext():判断迭代器的指针下面是否为空
-
长度功能
- int size():元素的个数
-
交集功能
- boolean retainAll(Collection c):获取两个集合的交集元素(交集:两个集合都有的元素)
-
转换功能
- Object[] toArray():将集合转换为数组(依次获取集合中的每一个元素)
List
\
List接口的特点:
- 有序的集合,存储元素和取出元素的顺序是一致的(存储123 取出123)
- 有索引,包含了一些带索引的方法
- 允许存储重复的元素
List接口中带索引的方法(特有)
- public void add(int index, E element): 将指定的元素,添加到该集合中的指定位置上。
- public E get(int index):返回集合中指定位置的元素。
- public E remove(int index): 移除列表中指定位置的元素, 返回的是被移除的元素。
- public E set(int index, E element):用指定元素替换集合中指定位置的元素,返回值的更新前的元素。
注意:
操作索引的时候,一定要防止索引越界异常
IndexOutOfBoundsException:索引越界异常,集合会报
ArrayIndexOutOfBoundsException:数组索引越界异常
StringIndexOutOfBoundsException:字符串索引越界异常
//List集合遍历有3种方式
//使用普通的for循环
for(int i=0; i<list.size(); i++){
//public E get(int index):返回集合中指定位置的元素。
String s = list.get(i);
System.out.println(s);
}
System.out.println("-----------------");
//使用迭代器
Iterator<String> it = list.iterator();
while(it.hasNext()){
String s = it.next();
System.out.println(s);
}
System.out.println("-----------------");
//使用增强for
for (String s : list) {
System.out.println(s);
}
ArrayList
底层数据结构是数组,查询快,增删慢。
线程不安全,效率高。
LinkedList
底层数据结构是链表,查询慢,增删快。
线程不安全,效率高。
注意:使用LinkedList集合特有的方法,不能使用多态
Iterator
有两个常用的方法:
boolean hasNext() 如果仍有元素可以迭代,则返回 true。
判断集合中还有没有下一个元素,有就返回true,没有就返回false
E next() 返回迭代的下一个元素。
取出集合中的下一个元素
Iterator迭代器,是一个接口,我们无法直接使用,需要使用Iterator接口的实现类对象,获取实现类的方式比较特殊
Collection接口中有一个方法,叫iterator(),这个方法返回的就是迭代器的实现类对象
Iterator iterator() 返回在此 collection 的元素上进行迭代的迭代器。
迭代器的使用步骤(重点):
- 使用集合中的方法iterator()获取迭代器的实现类对象,使用Iterator接口接收(多态)
- 使用Iterator接口中的方法hasNext判断还有没有下一个元素
- 使用Iterator接口中的方法next取出集合中的下一个元素