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方法)
以下为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();
原文地址:https://www.cnblogs.com/xijue/p/12342704.html
时间: 2024-10-12 12:09:19