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方法)

以下为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();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值