Java学习路程之Collection和List特有方法、迭代器

一.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)
	}
}

猜你喜欢

转载自blog.csdn.net/l710820742/article/details/82430533