Colleciton类
1.集合类的特点
提供一种存储空间可变的存储模型,存储的数据容量可以随时发生改变。

Collection类中常用方法:
public boolean add(E e): 把给定的对象添加到当前集合中 。
public void clear():清空集合中所有的元素。
public boolean remove(E e): 把给定的对象在当前集合中删除。
public boolean contains(Object obj): 判断当前集合中是否包含给定的对象。
public boolean isEmpty(): 判断当前集合是否为空。
public int size(): 返回集合中元素的个数。
public Object[] toArray(): 把集合中的元素,存储到数组中
2.Collection集合的遍历
Iterator:迭代器,集合的专用遍历方式
- Iterator
iterator():返回此集合中元素的迭代器,通过集合的iterator()方法得到;
*迭代器是通过集合的iterator()方法得到的,所以我们说他是依赖于集合而存在的。
Iterator中的常用方法:
E next():返回迭代中的下一个元素;
boolean hasNext():如果迭代具有更多元素,则返回true。
实例:
Student.java
public class Student {
private String name ;
private int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public Student() {
}
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;
}
}
ColletionDemo.java
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class CollectionDemo {
public static void main(String[] args) {
Collection<Student> c=new ArrayList<>();
Student s1 =new Student("张三",23);
Student s2 =new Student("李四",20);
Student s3 =new Student("王五",26);
c.add(s1);
c.add(s2);
c.add(s3);
//遍历集合(迭代器方式)
Iterator<Student> it =c.iterator();
while (it.hasNext()){
Student s=it.next();
System.out.println(s.getName()+","+s.getAge());
}
}
}
运行结果:

3.Set集合概述和特点
Set集合不包含重复元素,没有带索引的方法,所以不能使用普通for循环遍历。
- HashSet集合概述和特点
-
底层数据结构是哈希表
-
对集合的迭代顺序不做任何保证,也就是说不保证存储和取出元素的顺序一致
-
没有带索引的方法,不能使用普通for循环遍历
-
属于Set集合,不包含重复元素
hashset保证元素唯一的方法:
![]()
保证元素唯一性:需要重写hashCode()和equals()方法。
例子:
Student.javaimport java.util.Objects; public class Student { private String name; private int age; public Student() { } public Student(String name, int age) { 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 boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Student student = (Student) o; return age == student.age && Objects.equals(name, student.name); } @Override public int hashCode() { return Objects.hash(name, age); } }
HashSetDemo.java
import java.util.HashSet;
public class HasnSetDemo {
public static void main(String[] args) {
HashSet<Student> student = new HashSet<>();
student.add(new Student("zhangsan",23));
student.add(new Student("zhangsan",23));
student.add(new Student("zhaosi",27));
student.add(new Student("wangwu",20));
for (Student s: student){
System.out.println(s.getName()+","+s.getAge());
}
}
}
LinkedHashSet的特点
-
哈希表和链表实现Set接口,具有可预测的迭代次序;
-
链表保证元素有序
-
哈希表保证元素唯一
LinkedHashSetDemo.javaimport java.util.LinkedHashSet; public class LinkedHasnSetDemo { public static void main(String[] args) { LinkedHashSet<String> linkedhashset =new LinkedHashSet<>(); linkedhashset.add("hello"); linkedhashset.add("world"); linkedhashset.add("java"); linkedhashset.add("world"); //遍历hashset集合 for (String s:linkedhashset){ System.out.println(s); } } }
TreeSet特点:
- 1.元素有序,这里的顺序不是指存储和取出的顺序,而是按照一定的规则进行排序
- TreeSet(),根据元素自然排序;
- TreeSet(Comparator comparator):根据指定的比较器进习排序
- 2。没有带索引的方法
- 3.不包含重复元素
TreeSetDemo02.java
public class TreeSetDemo01 {
public static void main(String[] args) {
TreeSet<Integer> ts = new TreeSet<Integer>();
//添加元素
ts.add(10);
ts.add(80);
ts.add(30);
ts.add(50);
ts.add(70);
//遍历集合
for (Integer i:ts){
System.out.println(i);
}
}
}
TreeSet(Comparator comparator)使用方法:
需要实现Comparble接口,并重写compareTo方法。
Student.java
import java.util.Objects;
public class Student implements Comparable<Student>{
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
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 boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
return age == student.age && Objects.equals(name, student.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
@Override
public int compareTo(Student o) {
/**
* 按照年龄大小排序
*/
int num =this.age -o.age;
int num2 =num ==0? this.name.compareTo(o.name):num;
return num2;
}
}
TreeSetDemo02.java
import java.util.TreeSet;
public class TreeSetDemo02 {
public static void main(String[] args) {
TreeSet<Student> students=new TreeSet<>();
students.add(new Student("zhangsan",23));
students.add(new Student("zhaosi",27));
students.add(new Student("wangwu",20));
students.add(new Student("wangmazi",21));
students.add(new Student("zhaoliu",22));
for (Student s: students){
System.out.println(s.getName()+","+s.getAge());
}
}
}
TreeSetDemo.java
import java.util.Comparator;
import java.util.TreeSet;
public class TreeSetDemo {
public static void main(String[] args) {
TreeSet<Student> ts = new TreeSet<>(new Comparator<Student>() {
@Override
//按照年龄小到大排序,年龄相同,按照姓名由小到大排序。
public int compare(Student o1, Student o2) {
int num = o1.getAge() - o2.getAge();
int num2 = num == 0 ? o1.getName().compareTo(o2.getName()) : num;
return num2;
}
});
ts.add(new Student("zhangsan",23));
ts.add(new Student("zhaosi",27));
ts.add(new Student("wangwu",20));
ts.add(new Student("wangmazi",22));
ts.add(new Student("zhaoliu",22));
for (Student s:ts){
System.out.println(s.getName()+","+s.getAge());
}
}
}


浙公网安备 33010602011771号