JavaSE set集合学习总结

Set集合

无序,没有下标,集合中的元素不重复。

HashSet

打印结果去重 且无序。

例子

public static void main(String[] args) {
    HashSet<Person> hs = new HashSet<Person>(); //定义了一个Person类
    hs.add(new Person("张三",23));
    hs.add(new Person("张三",23));
    hs.add(new Person("李四",24));
    hs.add(new Person("李四",24));
    hs.add(new Person("李四",24));
    hs.add(new Person("李四",24));
    
    System.out.println(hs.size());
    
}

当打印对象时 不会自动去重,需要重写equals和hashcode方法,重写的方法再Person类中重写。

LinkedHashSet

可以理解为有序的HashSet

如何存储就如何打印。

例:利用LinkedHashSet去除Arraylist中的重复元素。

public static void main(String[] args) {
    ArrayList<String> list = new ArrayList<String>();
    list.add("a");
    list.add("a");
    list.add("b");
    list.add("b");
    list.add("b");

    getSingle(list);
    
    System.out.println(list);
    
}

private static void getSingle(List<String> list) {
    // TODO Auto-generated method stub
    LinkedHashSet<String> llist = new LinkedHashSet<String>();
    /*
     * for (String string : list) { llist.add(string); }
     */
    llist.addAll(list);
    list.clear();
    list.addAll(llist);
}

Treeset

Treeset用来排序。

创建一个Treeset,在去除重复元素的同时排序。

private static void demo1() {
    TreeSet<Integer> ts = new TreeSet<Integer>();
    ts.add(1);
    ts.add(3);
    ts.add(3);
    ts.add(3);
    ts.add(2);
    ts.add(3);
    ts.add(3);
    ts.add(3);
    ts.add(3);
    ts.add(3);

    System.out.println(ts);
}

在比较对象时

private static void demo2() {
    TreeSet<Person> ts = new TreeSet<>();
    ts.add(new Person("张三", 23));
    ts.add(new Person("李四", 24));
    ts.add(new Person("王五", 25));
    ts.add(new Person("赵六", 26));
    ts.add(new Person("张三", 23));

    System.out.println(ts);
}

需要重写Person类里的比较器(comparable接口中 实现的comparaTo方法)

扫描二维码关注公众号,回复: 9313268 查看本文章

以下为ComparaTo方法在Person类中的重写 (Person类要继承Comparable接口。)

public int compareTo(Person o) {
    // TODO Auto-generated method stub
    int lenth = this.name.length() - o.name.length();//名字长度为主要判断条件
    int num = lenth ==0? this.name.compareTo(o.name) : lenth;//年龄为次要条件
    return num == 0? this.age - o.age : num;
}

return的值为正 则排在被比对的对象的左边(前边),反之排在右边(后边),为零 则说明是同一个对象,则不加入Treeset

另一种比较器的构造

class ComparByLen implements Comparator {

  @Override
  public int compare(String s1, String s2)
  { 
      int num = s1.length() -s2.length(); 
      return num==0? s1.compareTo(s2) : num; 
  } 
private static void demo5() {
    TreeSet ts = new TreeSet(new ComparByLen());
    ts.add("aaaa");
    ts.add("z");
    ts.add("wc");
    ts.add("nba");
    ts.add("aaa");
    System.out.println(ts);
}

此时直接在新创建的类中传入构造器,ComparByLen();

猜你喜欢

转载自www.cnblogs.com/xijue/p/12342704.html
今日推荐