集合框架
一、Collection接口
功能:
A:Collection的功能概述(通过API查看即可得到)
a:添加功能
boolean add(Object obj):往集合添加一个元素
boolean addAll(Collection c):添加一个集合的元素 (给一个集合添加进另一个集合中的所有元素)
b:删除功能
void clear():移除所有元素
boolean remove(Object o):移除一个元素
boolean removeAll(Collection c):移除一个集合的元素(移除一个以上返回的就是true) 删除的元素是两个集合的交集元素
如果没有交集元素 则删除失败 返回false
c:判断功能
boolean contains(Object o):判断集合中是否包含指定的元素
boolean containsAll(Collection c):判断集合中是否包含指定的集合元素(这个集合 包含 另一个集合中所有的元素才算包含 才返回true)
比如:1,2,3 containsAll 12=true 1,2,3 containsAll 2,3,4=false
boolean isEmpty():判断集合是否为空
d:获取功能
Iterator iterator()(重点)
e:长度功能
int size():元素的个数
面试题:数组有没有length()方法呢?字符串有没有length()方法呢?集合有没有length()方法呢?
f:交集功能
//例如:A集合对B集合取交集,获取到的交集元素在A集合中。返回的布尔值表示的是A集合是否发生变化
boolean retainAll(Collection c):获取两个集合的交集元素(交集:两个集合都有的元素)
g:把集合转换为数组
Object[] toArray()
A:案例演示
boolean add(E e)
boolean remove(Object o)
void clear()
boolean contains(Object o)
boolean isEmpty()
int size()
boolean addAll(Collection c)
boolean removeAll(Collection c)
boolean containsAll(Collection c)
boolean retainAll(Collection c)
public class CollectionDemo2 {
public static void main(String[] args) {
// Collection 集合的父接口
Collection list = new ArrayList();//多态的形式
list.add("张三");//添加的方法
list.add("李四");
list.add("王五");
list.add(100);
Collection list2 = new ArrayList();//多态的形式
//list2.add("张三");//添加的方法
//list2.add("李四");
//list2.add("王五");
list2.add(100);
list2.add(200);
list2.add(300);
//把两个集合归并为一个集合
//A集合addAll(B集合) 把B集合中的元素放添加到A集合当中去
//list.addAll(list2);
//System.out.println(list);
//System.out.println(list2);
//删除
//list.clear();//清空集合中的所有元素
//System.out.println(list);
//boolean b = list.remove(1000);
// 删除集合中的某个元素 返回值是 是否删除成功
//System.out.println(list);
//System.out.println(b);
//移除一个集合的元素(移除一个以上返回的就是true) 删除的元素是两个集合的交集元素
//如果没有交集元素 则删除失败 返回false
boolean b = list.removeAll(list2);
System.out.println(list);
System.out.println(list2);
System.out.println(b);
}
}
boolean retainAll (Collection c):获取两个集合的交集元素:
获取来个集合的交集
迭代器遍历
Iterator iterator = list.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
list
特点:元素有序,并且每一个元素都存在一个索引.元素可以重复.
1、 List集合的特有功能概述
void add(int index,E element): 在指定索引处添加元素
E remove(int index):移除指定索引处的元素 返回的是移除的元素
E get(int index):获取指定索引处的元素
E set(int index,E element):更改指定索引处的元素 返回的而是被替换的元素
2、使用for循环 通过size()和get()方法结合使用遍历。
public class ListDemo4 {
public static void main(String[] args) {
List list = new ArrayList();
list.add(“a”);
list.add(“b”);
list.add(“c”);
list.add(“d”);
list.add(“e”);
list.add(“f”);
list.add(“g”);
list.add(“h”);
//previous()
//返回列表中的前一个元素。
//boolean hasPrevious ()
//如果以逆向遍历列表,列表迭代器有多个元素,则返回 true。
ListIterator listIterator = list.listIterator();
while (listIterator.hasNext()){
System.out.print(listIterator.next());
}
System.out.println("-----------------------");
//反向遍历:先要正向遍历 使用同一个迭代器对象
//ListIterator listIterator1 = list.listIterator();
while (listIterator.hasPrevious()){
System.out.println(listIterator.previous());
}
for (int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
}
}
需求:我有一个集合,请问,我想判断里面有没有"world"这个元素,如果有,我就添加一个"javaee"元素,请写代码实现。
for(int i=0;i<list.size();i++){
Object obj = list.get(i);
String ele = (String) obj;
if (ele.equals(“world”)) {
list.add(“javaee”);
}
}
注意:
//我们用Iterator这个迭代器遍历采用hasNext方法和next方法,集合修改集合 会出现并发修改异常
//原因是我们的迭代依赖与集合 当我们往集合中添加好了元素之后 获取迭代器 那么迭代器已经知道了集合的元素个数
//这个时候你在遍历的时候又突然想给 集合里面加一个元素(用的是集合的add方法)那迭代器不同意 就报错了
// //C:
//解决方案 我们用ListIterator迭代器遍历 用迭代器自带的add方法添加元素 那就不会报错了
//ListIterator listIterator = list.listIterator();
//while (listIterator.hasNext()){
// Object obj = listIterator.next();
// String ele= (String) obj;
// if(ele.equals("world")){
// // list.add("javaee");//ConcurrentModificationException 并发修改异常
// //listIterator.add("javaEE");
// //listIterator.remove();
// }
集合框架(数据结构之数组和链表)
A:数组特点: 查询快 , 增删慢
B:链表特点: 查询慢 , 增删快
A:List的三个子类的特点
ArrayList:
底层数据结构是数组,查询快,增删慢。
线程不安全,效率高。
Vector:
底层数据结构是数组,查询快,增删慢。
线程安全,效率低。
LinkedList:
底层数据结构是链表,查询慢,增删快。
线程不安全,效率高。
B:List有三个儿子,我们到底使用谁呢?
得看 要安全还是要效率
是查找多还是增删多