集合中的方法
创建集合
Collection c1 = new ArrayList();
c1.add("a");
c1.add("b");
c1.add("cd");
c1.add("e");
Collection c2 = new ArrayList();
c2.add("a");c2.add("b");
c2.add("c");
c2.add("d");
添加方法 add
c1.add(c2); // 把c2当做一个元素 添加到c1中
System.out.println(c1);
c1.addAll(c2); // 把c2中的每一个元素 添加到c1中
System.out.println(c1);
删除方法 removeAll
// 删除的是调用集合中两个集合相同的元素
boolean rel = c1.removeAll(c2); // 没有交集则返回false
System.out.println(c1);
retainAll
// 返回的是 两个集合的交集
// 返回值 看调用者是否发生变化
// 发生变化 true 反之 false
boolean rel = c1.retainAll(c2);
System.out.println(c1); // 打印的是交集
System.out.println(c2);
System.out.println(rel);
包含方法 containsAll
// 判断c1中是否包含c2的所有元素
boolean rel = c1.containsAll(c2);
System.out.println(rel);
System.out.println(c1);
System.out.println(c2);
迭代遍历器
Collection c = new ArrayList();
c.add("a");
c.add("b");
c.add("c");
c.add("d");
// 获取迭代器
Iterator iterator = c.iterator();
// 循环遍历
while (iterator.hasNext()) {
// 注意: 循环中 只调用一次next方法
Object next = iterator.next();
//iterator.next(); // 两个next方法 隔一个调一次
// 打印集合中的元素
System.out.println(next);
}
迭代遍历器原理
Collection c = new ArrayList();
// 实际上 集合内部有个指针
// 调用next 实际上 把指针向下移动一位
// 调用几次 挪动几位
// <--
c.add("a"); //
c.add("b"); //
c.add("c"); //
c.add("d"); //
// 从集合中 获取迭代器
Iterator iterator = c.iterator();
// 判断是否有下一个元素
boolean rel = iterator.hasNext();
System.out.println(rel);
// 如果有下一个元素
if (rel) {
// 获取下一个元素
Object next = iterator.next();
System.out.println(next);
}
return c;
Vector集合
创建一个Vector集合
Vector vector = new Vector();
vector.addElement("a");
vector.addElement("b");
vector.add("c");
vector.add("d");
// 遍历这个集合
Enumeration elements = vector.elements();
while (elements.hasMoreElements()) {
System.out.println(elements.nextElement());
}
vector中 elements方法 相当于迭代器的作用
List特有方法
add(int index,Object obj) //插入
set(index,obj) // 替换
get(int index) // 获取
remove(int index) // 删除
创建一个List集合List list = new ArrayList();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
// 添加插入(不能超出集合的元素个数)
//list.add(4,"x");
// 设置(替换该位置的元素)
list.set(0, "w");
System.out.println(list);
// 获取下标处的元素
Object object = list.get(0);
System.out.println(object);
// 删除(返回的是删除的元素)
Object obj = list.remove(0);
System.out.println(obj);
注意: 删除时 传入角标,传入的值会自动被当做角标处理 没有进行自动装箱
遍历集合
// 利用get方法遍历集合
for (int i = 0; i < list.size(); i++) {
Object o = list.get(i);
System.out.println(o);
}
ArrayList 和 LinkedList
ArrayList
查询快 增删慢
数组实现 (一块连续的存储空间)
查询: 按角标
增删时 把要删除或增加的元素后面的所有元素
向前移动或者向后移动
LinkedList
查询慢 增删快
链表实现 (存储空间不连续)
查询: 先看查找的元素离哪一端近 就从哪一端开始
一个一个向后或向前寻找 直到找到
增加: 链表中的元素 要保证能找到自己的上一个和下一个元素
需要保存上一个和下一个元素的地址
只要保存了地址 就能找到元素 就相当于插入到了链中
后面的元素 不会发生改变
LinkedList linkedList = new LinkedList();
linkedList.addLast("a");
linkedList.addLast("b");
linkedList.addLast("c");
linkedList.addLast("d");
System.out.println(linkedList); // [a,b,c,d]
LinkedList linkedList = new LinkedList();
linkedList.addFirst("a");
linkedList.addFirst("b");
linkedList.addFirst("c");
linkedList.addFirst("d");
System.out.println(linkedList); // [d,c,b,a]
LinkedList模拟出栈 (先进后出)
LinkedList linkedList = new LinkedList();
linkedList.addFirst("a");
linkedList.addFirst("b");
linkedList.addFirst("c");
while (!linkedList.isEmpty()) {
// 集合不是空的就继续删除第一个元素
Object object = linkedList.removeFirst();
System.out.println(object);
}