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 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 it =c.iterator();
while (it.hasNext()){
Student s=it.next();
System.out.println(s.getName()+","+s.getAge());
}
}
}
运行结果:

3.Set集合概述和特点

Set集合不包含重复元素,没有带索引的方法,所以不能使用普通for循环遍历。

  1. HashSet集合概述和特点
  • 底层数据结构是哈希表

  • 对集合的迭代顺序不做任何保证,也就是说不保证存储和取出元素的顺序一致

  • 没有带索引的方法,不能使用普通for循环遍历

  • 属于Set集合,不包含重复元素
    hashset保证元素唯一的方法:

    保证元素唯一性:需要重写hashCode()和equals()方法。
    例子:
    Student.java

    import 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 = 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.java

    import java.util.LinkedHashSet;
    public class LinkedHasnSetDemo {
    public static void main(String[] args) {
    LinkedHashSet 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 ts = new TreeSet();

//添加元素
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{
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 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 ts = new TreeSet<>(new Comparator() {
@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());
}

}
}

posted @ 2022-04-15 20:44  hanqi  阅读(109)  评论(0)    收藏  举报