一.Collection中的all方法
1.addall()把传入的集合的所有元素添加到调用集合中而add()是把传入集合作为一个元素添加到调用集合中
public class Day13 {
public static void main(String[] args) {
Collection collection1 = new ArrayList();
Collection collection2 = new ArrayList();
//collection1添加元素
collection1.add("a");
collection1.add("b");
collection1.add("c");
//collection2添加元素
collection2.add("a");
collection2.add("b");
collection2.add("c");
collection1.addAll(collection2);
System.out.println(collection1);//输出:[a, b, c, a, b, c];
System.out.println(collection2);//输出:[a, b, c]
collection1.add(collection2);
System.out.println(collection1)//输出:[a, b, c, [a, b, c]]
}
}
2.removeAll()删除两个集合的交集,谁调用该方法就删除哪个集合的
public class Day13 {
public static void main(String[] args) {
Collection collection1 = new ArrayList();
Collection collection2 = new ArrayList();
//collection1添加元素
collection1.add("a");
collection1.add("b");
collection1.add("c");
//collection2添加元素
collection2.add("a");
collection2.add("b");
collection2.add("f");
collection1.removeAll(collection2);
//删除两个集合的交集
System.out.println(collection1);//输出:[c]
System.out.println(collection2);//输出:[a, b, f]
}
}
3.retainAll()保存两个集合的交集
public class Day13 {
public static void main(String[] args) {
Collection collection1 = new ArrayList();
Collection collection2 = new ArrayList();
//collection1添加元素
collection1.add("a");
collection1.add("b");
collection1.add("c");
//collection2添加元素
collection2.add("a");
collection2.add("b");
collection2.add("f");
boolean b = collection1.retainAll(collection2);
//保存两个集合的交集
System.out.println(collection1);//输出:[a, b]
System.out.println(collection2);//输出:[a, b, f]
//返回值:是调用集合的元素发生变化就返回true反之false
System.out.println(b)//true
}
}
4.containsAll()调用集合完全包含指定集合返回true反之false
public class Day13 {
public static void main(String[] args) {
Collection collection1 = new ArrayList();
Collection collection2 = new ArrayList();
//collection1添加元素
collection1.add("a");
collection1.add("b");
collection1.add("c");
//collection2添加元素
collection2.add("a");
collection2.add("b");
collection2.add("f");
boolean b = collection1.containsAll(collection2);
//调用集合完全包含指定集合返回true反之false
System.out.println(b)//false
}
}
二.使用迭代器进行遍历集合
1.获取迭代器,从集合获取
hasNext(): 如果仍有元素可以迭代,则返回 true。
next: 返回迭代的下一个元素。
public class Day13 {
public static void main(String[] args) {
Collection collection1 = new ArrayList();
collection1.add("a");
collection1.add("b");
collection1.add("c");
//获取迭代器
Iterator iterator = collection1.iterator();
//迭代器中相当于有一个指针默认指向集合中首元素的上面,当调用hasNext会判断下一个位置有没有元素,hasNext不会改变指针的位置
//next()方法会获取下一个元素的值并且会将指针向下移动一个位置
boolean rel = iterator.hasNext();
System.out.println(rel);//true
//注意:迭代器遍历时循环中只能调用一次next()方法
if(rel){
Object object = iterator.next();
System.out.println(object);//a,b,c
}
}
}
2.迭代循环遍历集合
public class Day13 {
public static void main(String[] args) {
Collection collection1 = new ArrayList();
collection1.add("a");
collection1.add("b");
collection1.add("c");
//获取迭代器
Iterator iterator = collection1.iterator();
while(iterator.hasNext()){
String str = (String)iterator.next();
System.out.println(str);//输出:a,b,c
}
}
}
}
练习:
/*
* 创建一个集合 保存三个学生
* 迭代器遍历 只打印学生的姓名
*/
public class Day13 {
public static void main(String[] args) {
Collection collection = new ArrayList();
//创建学生
Student student1 = new Student("李四", "18");
Student student2 = new Student("张三", "20");
Student student3 = new Student("王五", "22");
//添加学生
collection.add(student1);
collection.add(student2);
collection.add(student3);
//获取迭代器
Iterator iterator = collection.iterator();
while(iterator.hasNext()){
Student student = (Student)iterator.next();
System.out.println(student.getName());
}
}
}
public class Student {
private String name;
private String age;
//构造方法
public Student() {
}
public Student(String name, String age) {
this.name = name;
this.age = age;
}
//set/get方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
//toString方法重写
public String toString() {
String string = "名字" + name + "年龄" + age;
return string;
}
//重写equals方法
public boolean equals(Object obj) {
//重新判断学生是否相等的规则
//类型转换
Student stu = (Student)obj;
//声明布尔
boolean rel = this.getName().equals(stu.getName()) && this.getAge().equals(stu.getAge());
return rel;
}
}
三.List特有方法
public class Day1 {
public static void main(String[] args) {
List list = new ArrayList();
list.add("a");
list.add("b");
list.add("c");
//1.add(int index,Object obj)插入元素到索引位置
//插入时索引不能大于size()
list.add(1, "m");
System.out.println(list);//输出:a, m, b, c
//2.set(index,obj)替换当前位置的值
list.set(0, "h");
System.out.println(list);//输出:h, m, b, c
//3.get(int index)获取当前位置的值
list.get(2);
System.out.println(list);//输出:b
//4.remove(int index)删除当前位置的值
//删除时该方法系统没有自动装箱(添加时会自动装箱)
list.remove(2);
System.out.println(list);输出:h, m, c
}
}
2.通过get()方法遍历
public class Day13 {
public static void main(String[] args) {
List list = new ArrayList();
list.add("a");
list.add("b");
list.add("c");
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
}
3.练习:
//需求 遍历集合(使用迭代器)
//如果集合中 有"b"这个元素 就添加"Oh-Yes"这个元素
public class Day13 {
public static void main(String[] args) {
List list = new ArrayList();
list.add("a");
list.add("b");
list.add("c");
ListIterator listInter = list.listIterator();
while(listInter.hasNext()){
String str = (String)listInter.next();
if(str.equals("b")){
listInter.add("Oh-Yes");
}
}
System.out.println(listIterator);
}
}
4.逆向遍历
public class Day13 {
public static void main(String[] args) {
List list = new ArrayList();
list.add("a");
list.add("b");
list.add("c");
ListIterator listIterator = list.listIterator();
//先要正向遍历,把指针移动到后面
while (listIterator.hasNext()) {
Object object= listIterator.next();
System.out.println(object);
}
//逆向遍历
while (listIterator.hasPrevious()) {
Object previous = listIterator.previous();
System.out.println(previous);
}
}
}
5.Vector
public class Day13 {
public static void main(String[] args) {
Vector vector = new Vector();
vector.addElement("a");
vector.addElement("b");
vector.addElement("c");
//迭代遍历
Enumeration elements = vector.elements();
while(elements.hasMoreElements()){
String str = (String) elements.nextElement();
System.out.println(str);
}
}
}
6.ArrayList和LinkedList(两者相对)
ArrayList特点:查询快(以数组实现可以通过角标查询)增删慢
LinkedList特点:查询慢 增删快
练习1.需求 在集合中存储"a"“a”“a” “b”“b”“b” “c”“c”"c"去除重复数据
public class Day13 {
public static void main(String[] args) {
ArrayList list = new ArrayList();
ArrayList newList = new ArrayList();
list.add("a");
list.add("a");
list.add("a");
list.add("b");
list.add("b");
list.add("b");
list.add("c");
list.add("c");
list.add("c");
Iterator iterator = list.iterator();
while(iterator.hasNext()){
String str = (String)iterator.next();
//判断newList是否包含
if(!newList.contains(str)){
//不包含添加到newList集合中
newList.add(str);
}
}
System.out.println(newList);//a, b ,c
}
}
练习2:需求 在集合中存储 6个学生分别 两个 张三 18岁 两个李四 16岁 两个王五 20岁, 去除重复的
public class Day13 {
public static void main(String[] args) {
ArrayList list = new ArrayList();
ArrayList newList = new ArrayList();
//使用匿名对象需要重写equals方法
list.add(new Student("张三", "18"));
list.add(new Student("张三", "18"));
list.add(new Student("李四", "16"));
list.add(new Student("李四", "16"));
list.add(new Student("王五", "20"));
list.add(new Student("王五", "20"));
Iterator iterator = list.iterator();
while(iterator.hasNext()){
Student student = (Student)iterator.next();
//判断newList是否包含此元素
//判断object中equals方法判断的是两个对象的地址是否相等,需要重写equals方法
if(!newList.contains(student)){
//不包含添加到newList集合中
newList.add(student);
}
}
System.out.println(newList)
}
}