【JavaSE学习笔记】集合_Collection,List

时间:2022-01-11 17:56:06

集合

Collection

1)概述

集合:按照一个规则,对一个数组进行排序,针对不同的需求,不同的做法

由于有不同的功能,并且他们的数据结构不同,他们集合之间有共性内容,向上抽取

就会形成----->集合继承体现图

Collection层次结构中的根接口,Collection表示一组对象,这些对象也称为collection的元素

一些collection允许有重复的元素,而另一些则不允许

一些 collection 是有序的,而另一些则是无序的

JDK不提供此接口的任何直接实现:它提供更具体的子接口(set,List等)实现

【JavaSE学习笔记】集合_Collection,List

2)添加功能的相关方法

boolean add(Object obj):添加一个元素(基本功能)

import java.util.ArrayList;
import java.util.Collection;

// 测试类
public class Demo01 {
public static void main(String[] args) {
// 创建集合对象
Collection c = new ArrayList();

//空集合
System.out.println(c);// []
// 返回值是boolean类型,添加即输出true
c.add("hello");
c.add("world");

System.out.println(c);// [hello, world]
}
}

boolean addAll(Collection c):添加一个集合中的元素(高级功能)

import java.util.ArrayList;
import java.util.Collection;

public class Demo02 {
public static void main(String[] args) {
// 创建两个集合对象
Collection c1 = new ArrayList();
c1.add(1);
c1.add(2);
c1.add(3);
c1.add(4);

Collection c2 = new ArrayList();
c2.add(5);
c2.add(6);
c2.add(7);
c2.add(8);
System.out.println("原始数据:");
System.out.println("c1:" + c1);// [1, 2, 3, 4]
System.out.println("c2:" + c2);// [5, 6, 7, 8]
System.out.println("-----------------");

System.out.println("添加后的数据:");
c1.addAll(c2);
System.out.println("c1:" + c1);// c1:[1, 2, 3, 4, 5, 6, 7, 8]
}
}

3)删除功能的相关方法

boolean remove(Object o):删除指定的元素

import java.util.ArrayList;
import java.util.Collection;

// 测试类
public class Demo01 {
public static void main(String[] args) {
// 创建集合对象
Collection c = new ArrayList();

c.add("hello");
c.add("world");
c.add("java");
// 原始数据
System.out.println("原始数据:");
System.out.println(c);// [hello, world, java]
System.out.println("----------------------");

c.remove("world");
System.out.println("删除后:");
System.out.println(c);// [hello, java]

}
}

boolean removeAll(Collection c):删除一个集合中的元素

(思考:删除一个元素算是删除呢还是删除所有算是删除?)

import java.util.ArrayList;
import java.util.Collection;

public class Demo02 {
public static void main(String[] args) {
// 创建两个集合对象
Collection c1 = new ArrayList();
c1.add(1);
c1.add(2);
c1.add(3);
c1.add(4);
c1.add(5);
c1.add(6);
c1.add(7);
c1.add(8);

Collection c2 = new ArrayList();
c2.add(5);
c2.add(6);
c2.add(7);
c2.add(8);
System.out.println("原始数据:");
System.out.println("c1:" + c1);// c1:[1, 2, 3, 4, 5, 6, 7, 8]
System.out.println("c2:" + c2);// c2:[5, 6, 7, 8]
System.out.println("-----------------");

// 删除一个就算删除
System.out.println(c1.removeAll(c2));// true
System.out.println("删除后的数据:");
System.out.println("c1:" + c1);// c1:[1, 2, 3, 4]
}
}

void clear():删除一个集合中的所有元素(不建议使用)

import java.util.ArrayList;
import java.util.Collection;

// 测试类
public class Demo01 {
public static void main(String[] args) {
// 创建集合对象
Collection c = new ArrayList();

c.add("hello");
c.add("world");
c.add("java");
// 原始数据
System.out.println("原始数据:");
System.out.println(c);// [hello, world, java]
System.out.println("----------------------");

c.clear();
System.out.println("删除后:");
System.out.println(c);// []
}
}

4)判断功能的相关方法

boolean contains(Object o):判断该集合中是否包含指定的元素

import java.util.ArrayList;
import java.util.Collection;

// 测试类
public class Demo01 {
public static void main(String[] args) {
// 创建集合对象
Collection c = new ArrayList();

c.add("hello");
c.add("world");
c.add("java");
// 原始数据
System.out.println("原始数据:");
System.out.println(c);// [hello, world, java]
System.out.println("----------------------");

System.out.println(c.contains("web"));// false
System.out.println(c.contains("world"));// true
}
}

boolean containsAll(Collection o):判断是否包含一个集合中的所有元素

(思考:包含一个算是包含,还是包含所有元素算术包含?)

import java.util.ArrayList;
import java.util.Collection;

public class Demo02 {
public static void main(String[] args) {
// 创建两个集合对象
Collection c1 = new ArrayList();
c1.add(1);
c1.add(2);
c1.add(3);
c1.add(4);
c1.add(5);
c1.add(6);
c1.add(7);
c1.add(8);

Collection c2 = new ArrayList();
c2.add(5);
c2.add(6);
c2.add(7);
c2.add(8);
System.out.println("原始数据:");
System.out.println("c1:" + c1);// c1:[1, 2, 3, 4, 5, 6, 7, 8]
System.out.println("c2:" + c2);// c2:[5, 6, 7, 8]
System.out.println("-----------------");

// 包含所有才算是包含
System.out.println(c1.containsAll(c2));// true
}
}

boolean isEmpty():判断集合是否为空

import java.util.ArrayList;
import java.util.Collection;

// 测试类
public class Demo01 {
public static void main(String[] args) {
// 创建集合对象
Collection c = new ArrayList();

c.add("hello");
c.add("world");
c.add("java");
// 原始数据
System.out.println("原始数据:");
System.out.println(c);// [hello, world, java]
System.out.println("----------------------");

System.out.println(c.isEmpty());// false
}
}

5)长度功能:

int size():集合长度

import java.util.ArrayList;
import java.util.Collection;

// 测试类
public class Demo01 {
public static void main(String[] args) {
// 创建集合对象
Collection c = new ArrayList();

c.add("hello");
c.add("world");
c.add("java");
// 原始数据
System.out.println("原始数据:");
System.out.println(c);// [hello, world, java]
System.out.println("----------------------");

System.out.println(c.size());// 3
}
}

面试题:

数组中有没有length()方法?String类有没有length()方法?集合中有没有length()方法?

数组:length属性

字符换String:length()

集合:size()

6)交集功能

boolean retainAll(Collection c):对一个集合取交集

(思考:返回值类型表达的是什么意思?交集的元素去哪里?)

import java.util.ArrayList;
import java.util.Collection;

public class Demo02 {
public static void main(String[] args) {
// 创建两个集合对象
Collection c1 = new ArrayList();
c1.add(1);
c1.add(2);
c1.add(3);
c1.add(4);
c1.add(5);
c1.add(6);
c1.add(7);
c1.add(8);

Collection c2 = new ArrayList();
c2.add(5);
c2.add(6);
c2.add(7);
c2.add(8);
System.out.println("原始数据:");
System.out.println("c1:" + c1);// c1:[1, 2, 3, 4, 5, 6, 7, 8]
System.out.println("c2:" + c2);// c2:[5, 6, 7, 8]
System.out.println("-----------------");

/*
*A集合对B集合取交集
*交集的元素要去A集合中
*返回值类型表达的意思是:A集合的元素发生改变,则为true
*/
System.out.println("c1对c2取交集");
System.out.println(c1.retainAll(c2));// true
System.out.println("c1:" + c1);// c1:[5, 6, 7, 8]
System.out.println("c2:" + c2);// c2:[5, 6, 7, 8]
}
}

7)集合转换功能

Object[] toArray():把集合转换成数组

import java.util.ArrayList;
import java.util.Collection;

// 测试类
public class Demo01 {
public static void main(String[] args) {
// 需求:使用集合存储字符串类型
Collection c = new ArrayList();

c.add("hello");
c.add("world");
c.add("java");

// 为了遍历集合中的元素:使用集合普通的方法:toArray()
Object[] obj = c.toArray();

// 得到数组,遍历数组
for (int i = 0; i < obj.length; i++) {
// 输出字符串本身和字符串长度
// Object代表任何类,String类是Object的一个子类,要使用子类的特有功能,向下转型
String s = (String) obj[i];// 向下转型
System.out.println(s + "---" + s.length());
/*
* hello---5
* world---5
* java---4
*/
}
}
}

8)迭代器

Iterator iterator():表示对集合中的元素进行迭代(遍历)

Iterator:接口

Object next():返回迭代的下一个元素(获取元素)

boolean hasNext():如果仍有元素可以迭代,返回true

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

// 测试类
public class Demo01 {
public static void main(String[] args) {
Collection c = new ArrayList();

c.add("hello");
c.add("world");
c.add("java");

// 获取迭代器对象
Iterator it = c.iterator();// 多态的形式:接口多态
while (it.hasNext()) {
String s = (String) it.next();
// 返回的类型是Object类型,想要得到字符串的长度:Obect转成String类型
System.out.println(s + "---" + s.length());
/*
* hello---5
* world---5
* java---4
*/
}
}
}

问题:使用集合的迭代器方式进行遍历用的是while循环的方式,可以使用for循环吗?

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

// 测试类
public class Demo01 {
public static void main(String[] args) {
Collection c = new ArrayList();

c.add("hello");
c.add("world");
c.add("java");

// 获取迭代器对象
for (Iterator it = c.iterator(); it.hasNext();) {
// 先向下转型
String s = (String) it.next();
System.out.println(s + "---" + s.length());
}
}
}

9)细节:

it.next()不要多次使用!只使用一次即可(自定义引用类型)

多次使用会创建多个对象    NoSuchElementException:

10)迭代器的原码

interface Iterator{
boolean hasNext();
Object next();
}

public interface Iterable {
Iterator iterator();
}

public interface Collection extends Iterable{
public Iterator<E> iterator() {
return new Itr(); //Itr:类
}

//具体的类 :内部类的另一种形式
private class Itr implements Iterator { //Itr是Iterator接口的子实现类

public boolean hasNext() {//重写了hasNext()
return cursor != size;
}

public Object next() {

}
}
}
collection c = new ArrayList();
c.add("hello");
c.add("world");
c.add("java");
Iterator it = c.iterator();//Iterator it = new Itr() ;//接口多态(开发中经常用)
while(it.hasNext){
String s = (String)it.next();
System.out.println(s);
}
【JavaSE学习笔记】集合_Collection,List

11)面试题

集合和数组的区别?

1.长度的区别:

数组:长度是固定的

集合:可变的

2.存储数据类型的区别:

数组:基本/引用数据类型

集合:引用数据类型

3.存储类型的元素的区别:

数组:存储的是同一种数据类型的元素

集合:可存放多种类型的元素

List

1)概述

List集合是Collection集合的子接口,里面iterator()方法在List中也可用

接口与接口是继承的关系

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

// 测试类
public class Demo01 {
public static void main(String[] args) {
// 创建集合对象
List l = new ArrayList();

// 给集合中添加元素,添加功能都是Collection接口中的功能
l.add("hell");
l.add("world");
l.add("java");

// 获取迭代器
Iterator it = l.iterator();
// 遍历
while (it.hasNext()) {
String s = (String) it.next();
System.out.println(s);
/*
* hell
* world
* java
*/
}
}
}

2)List集合是一个有序的集合,是可以有重复的元素

有序:指的是元素存储和取出是一致的

set集合:是另一个接口:元素不能重复

treeSet

hashSet

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

// 测试类
public class Demo01 {
public static void main(String[] args) {
// 创建集合对象
List l = new ArrayList();

// 给集合中添加元素,添加功能都是Collection接口中的功能
l.add("hell");
l.add("world");
l.add("java");
l.add("hell");
l.add("world");
l.add("java");

// 获取迭代器
Iterator it = l.iterator();
// 遍历
while (it.hasNext()) {
String s = (String) it.next();
System.out.println(s);
/*
* hell
* world
* java
* hell
* world
* java
*/
}
System.out.println(l);// [hell, world, java, hell, world, java]
}
}

3)特有功能

void add(int index, Object element):添加功能:在指定位置添加指定元素

import java.util.ArrayList;
import java.util.List;

// 测试类
public class Demo01 {
public static void main(String[] args) {
List l = new ArrayList();

l.add("hello");
l.add("world");
l.add("java");

System.out.println("原始数据:");
System.out.println(l);// [hello, world, java]
System.out.println("--------------------");

System.out.println("添加后的数据:");
l.add(1, "web");
System.out.println(l);// [hello, web, world, java]
// System.out.println(11, "web");//IndexOutOfBoundsException:角标越界
}
}

Object get(int index):获取功能:获取指定位置的元素

import java.util.ArrayList;
import java.util.List;

// 测试类
public class Demo01 {
public static void main(String[] args) {
List l = new ArrayList();

l.add("hello");
l.add("world");
l.add("java");

System.out.println("原始数据:");
System.out.println(l);// [hello, world, java]
System.out.println("--------------------");

System.out.println(l.get(1));// world
}
}

Object remove(int index):删除功能:删除指定位置的元素,返回的就是删除的元素

// 测试类
public class Demo01 {
public static void main(String[] args) {
List l = new ArrayList();

l.add("hello");
l.add("world");
l.add("java");

System.out.println("原始数据:");
System.out.println(l);// [hello, world, java]
System.out.println("--------------------");

System.out.println("删除数据:");
System.out.println(l.remove(1));// world
System.out.println("删除后的数据:");
System.out.println(l);// [hello, java]
}
}

Object set(int index, objict element):将指定位置的元素用element该元素替代,返回的是需要被替代的元素

import java.util.ArrayList;
import java.util.List;

// 测试类
public class Demo01 {
public static void main(String[] args) {
List l = new ArrayList();

l.add("hello");
l.add("world");
l.add("java");

System.out.println("原始数据:");
System.out.println(l);// [hello, world, java]
System.out.println("--------------------");
System.out.println("替换后的数据:");
l.set(1, "web");
System.out.println(l);// [hello, web, java]
}
}

4)不用迭代器遍历集合

import java.util.ArrayList;
import java.util.List;

// 测试类
public class Demo01 {
public static void main(String[] args) {
List l = new ArrayList();

l.add("hello");
l.add("world");
l.add("java");

/*
* 两种方式
* 1)Iterator iterator() (上面出现好多次,不再讲述)
* 2)普通for循环
* size() get()相结合
*/
//普通for循环
for (int i = 0; i < l.size(); i++) {
String s = (String) l.get(i);
System.out.println(s);
}
}
}

5)List集合专有迭代遍历方式

ListIterator listIterator();

ListIterator接口:

boolean hasNext():表示正向遍历:是否有下一个可以迭代的元素

Object next():获取下一个元素

boolean hasPrevious:表示逆向遍历:是否有上一个可以迭代的元素

Object previous():返回列表中的前一个元素

有个顺序问题:要想使用逆向遍历,必须先正向遍历,否则没意义

List集合有3种便利方式:

迭代器遍历方式替代掉普通for(get()/size()相结合)

迭代器遍历

Iterator iterator()

ListIterator listiterator():列表迭代器

import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;

// 测试类
public class Demo01 {
public static void main(String[] args) {
List l = new ArrayList();

l.add("hello");
l.add("world");
l.add("java");

ListIterator li = l.listIterator();
//正向遍历
while (li.hasNext()) {
String s = (String) li.next();
System.out.println(s);
}
System.out.println("-------------------");

//逆向遍历
while (li.hasPrevious()) {
String s = (String) li.previous();
System.out.println(s);
}
}
}

6)需求

给List存储字符串,判断如果这个字符串是"world",然后给集合中添加一个新的 字符串"javaee"

java.util.ConcurrentModificationException:并发修改异常!
产生并发修改异常的原因是什么:
当我们给集合中添加了新的字符串,迭代器不知道集合中是否添加了一个新的元素,所以产生这个异常
描述:迭代器依赖于集合存在,给集合中添加元素,要么就是通过迭代器去做;要么就是通过集合遍历(普通for),通过集合添加

import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;

// 测试类
public class Demo01 {
public static void main(String[] args) {
List l = new ArrayList();

l.add("hello");
l.add("world");
l.add("java");

//遍历集合中的元素,使用迭代器遍历
//Iterator it = l.iterator() ;
//while(it.hasNext()){//迭代器遍历
//String s = (String) it.next() ;
//判断,如果worold字符串,给集合中添加"javaee"
//if(s.equals("world")){
//l.add("javaee") ;//集合去添加,迭代器并不知道
//}
//}
//System.out.println(l);

//两种解决并发修改异常的方式:
//1)使用迭代器遍历,迭代器添加,Iterator接口没有添加功能,所有使用列表迭代器:ListIterator
//获取列表迭代器
//ListIterator lit = l.listIterator() ;
//while(lit.hasNext()){
//String s = (String) lit.next() ;
////判断,迭代器添加
//if(s.equals("world")){
////列表迭代器的特有功能
//lit.add("javaee");//插入元素:在指定元素插入新的元素
//}
//}
//System.out.println("list:"+list);

//2)使用集合遍历,使用集合添加
for(int i = 0; i < l.size(); i ++){
String s = (String)l.get(i);
//判断有world,采用集合添加,在末尾添加
if (s.equals("world")) {
l.add("javaee");
}
}
System.out.println(l);// [hello, world, java, javaee]
}
}

7)List子类的特点

ArrayList

底层数据结构是数组,查询快,增删慢,线程不安全,不同步,效率高

vector

底层数据结构是数组,查询快,增删慢,线程安全,同步,效率低

LinkedList

底层数据结构是链表,查询慢,增删快,线程不安全,不同步,效率高

应用场景:ArrayList:开发中用的非常多。如果给一个需求,不知道使用谁的时候,都使用ArrayList

【JavaSE学习笔记】集合_Collection,List

8)栈和队列的特点

【JavaSE学习笔记】集合_Collection,List

9)ArrayList

a.List集合的子类遍历集合中的元素可以使用的任何迭代遍历方式

普通for循环,,,,iterator()

import java.util.ArrayList;
import java.util.Iterator;

// 测试类
public class Demo01 {
public static void main(String[] args) {
//创建ArrayList集合对象
ArrayList al = new ArrayList();

//给集合中添加元素
al.add("hello");
al.add("world");
al.add("java");

//使用普通for循环
for (int i = 0; i < al.size(); i++) {
String s = (String) al.get(i);
System.out.println(s);
}
System.out.println("----------------------");

//使用迭代器
Iterator i = al.iterator();
while (i.hasNext()) {
String s = (String) i.next();
System.out.println(s);
}
}
}

b.存储对象并遍历

//Student类(本章后面不再写此类,直接调用)

public class Student {
private String name;
private int age;

public Student() {
super();
// TODO Auto-generated constructor stub
}

public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}

}
//测试类

import java.util.ArrayList;
import java.util.Iterator;

// 测试类
public class Demo01 {
public static void main(String[] args) {
ArrayList al = new ArrayList();

// 创建四个学生对
Student s1 = new Student("张三", 20);
Student s2 = new Student("李四", 21);
Student s3 = new Student("王五", 22);
Student s4 = new Student("程六", 23);

//给集合中添加元素
al.add(s1);
al.add(s2);
al.add(s3);
al.add(s4);

//使用迭代器遍历
Iterator i = al.iterator();
while (i.hasNext()) {
Student s = (Student) i.next();
System.out.println(s);
}
}
}

10)LinkedList集合特有功能

添加相关的方法

public void addFirst(Object e):添加此列表的第一个元素

public void addLast(Object e):添加此列表的最后一个元素

import java.util.LinkedList;

// 测试类
public class Demo01 {
public static void main(String[] args) {
LinkedList ll = new LinkedList();

ll.add("hello");
ll.add("world");
ll.add("java");

System.out.println("原始数据:" + ll);// [hello, world, java]
ll.addFirst("First");
ll.addLast("Last");
System.out.println("添加后:" + ll);// [First, hello, world, java, Last]
}
}

和获取相关的方法:

public Object getFirst()返回此列表的第一个元素

public Object getLast():返回此列表的最后一个元素

import java.util.LinkedList;

// 测试类
public class Demo01 {
public static void main(String[] args) {
LinkedList ll = new LinkedList();

ll.add("hello");
ll.add("world");
ll.add("java");

System.out.println("原始数据:" + ll);// [hello, world, java]
System.out.println("第一个数据:" + ll.getFirst());// hello
System.out.println("最后一个数据:" + ll.getLast());// java
}
}

和删除相关的方法:

public Object removeFirst():删除此列表的第一个元素

public Object removeLast():删除此列表的最后一个元素

import java.util.LinkedList;

// 测试类
public class Demo01 {
public static void main(String[] args) {
LinkedList ll = new LinkedList();

ll.add("hello");
ll.add("world");
ll.add("java");

System.out.println("原始数据:" + ll);// [hello, world, java]
ll.removeFirst();
ll.removeLast();
System.out.println("删除后的数据:" + ll);// [world]
}
}

11)Vector特有功能

public void addElement(Object obg):给Vector集合中添加元素

public  Object elementAt(int index):获取指定索引处的元素

public Enumeration elements():获取迭代器对象

boolean hasMoreElements():判断是否有下一个可以迭代的元素

Object nextElement():获取下一个迭代的元素

import java.util.Enumeration;
import java.util.Vector;

// 测试类
public class Demo01 {
public static void main(String[] args) {
Vector v = new Vector();

v.addElement("hello");
v.addElement("world");
v.addElement("java");

for (int i = 0; i < v.size(); i++) {
String s = (String) v.elementAt(i);
System.out.println(s);
}
System.out.println("-----------------");

Enumeration en = v.elements();
while (en.hasMoreElements()) {
String s = (String) en.nextElement();
System.out.println(s);
}
}
}

12)练习

ArrayList去除集合中字符串的重复值(字符串的内容相同)

1)创建一个集合对象
2)给集合中添加字符串元素.包括重复
3)创建新的集合对象
4)遍历旧集合
         获取每一个元素后,进行判断(判断新集合中是否包含这些元素)
         没有这些元素,说明不重复,添加到新集合
5)遍历新集合

import java.util.ArrayList;
import java.util.Iterator;

// 测试类
public class Demo01 {
public static void main(String[] args) {
ArrayList al = new ArrayList();

al.add("hello");
al.add("world");
al.add("java");
al.add("hello");
al.add("world");
al.add("java");
al.add("hello");
al.add("world");
al.add("java");

//创建新的集合对象
ArrayList al2 = new ArrayList();

//遍历旧集合
Iterator i = al.iterator();
while (i.hasNext()) {
String s = (String) i.next();
//判断新集合中是否包含这些元素
if (!al2.contains(s)) {
al2.add(s);
}
}
//遍历新集合
Iterator i2 = al2.iterator();
while (i2.hasNext()) {
String s = (String) i2.next();
System.out.println(s);
}
}
}

13)针对上一条,若不允许建立集合如何让去完成

import java.util.ArrayList;
import java.util.Iterator;

// 测试类
public class Demo01 {
public static void main(String[] args) {
ArrayList al = new ArrayList();

al.add("hello");
al.add("world");
al.add("java");
al.add("hello");
al.add("world");
al.add("java");
al.add("hello");
al.add("world");
al.add("java");

/*
* 可以才排序的方式进行排序,用第一个索引和后面的依次比较
* 然后如果前面的索引对应的元素怒和后面的索引对应的元素相等,说明重复,那么删除
*/
for (int i = 0; i < al.size() - 1; i++) {
for (int j = i + 1; j < al.size(); j++) {
if (al.get(i).equals(al.get(j))) {
al.remove(j);
j--;
}
}
}
// 迭代器遍历
Iterator i = al.iterator();
while (i.hasNext()) {
String s = (String) i.next();
System.out.println(s);
}
}
}

14)练习

ArrayList去除集合Student对象的重复的成员信息(成员变量的值是一样)

首先在Student类中重写equals()

//重写

@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Student other = (Student) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}

//测试类

import java.util.ArrayList;
import java.util.Iterator;

// 测试类
public class Demo01 {
public static void main(String[] args) {
/*
* 现在集合存储的是引用类型的对象,而一个类的对象,有一个equals()方法
* 如果不重写,默认用Object中的equals()
* 默认比较的是地址值;在Student类中重写equals方法,比较是内容是否相同
*/
ArrayList al = new ArrayList();

Student s1 = new Student("张三", 20);
Student s2 = new Student("张三", 20);
Student s3 = new Student("李四", 21);
Student s4 = new Student("李四", 22);
Student s5 = new Student("王五", 20);

al.add(s1);
al.add(s2);
al.add(s3);
al.add(s4);
al.add(s5);

ArrayList al2 = new ArrayList();

Iterator i = al.iterator();
while (i.hasNext()) {
Student s = (Student) i.next();
if (!al2.contains(s)) {
al2.add(s);
}
}

Iterator i2 = al2.iterator();
while (i2.hasNext()) {
Student s = (Student) i2.next();
System.out.println(s);
}
}
}