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循环遍历。

  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> 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<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());
        }

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