Java集合HashSet<T>,TreeSet<T>的使用

工作内容:

Java集合HashSet<T>,TreeSet<T>的使用

培训讲解:


学习分享:

Set存储是无序的,不允许重复元素。【排列:无序,可变】

HashSet<T>:添加方法add(Object obj)如果添加相同的对象的引用则添加失败,size不变,(add过程中会调用T的equals方法比较是否有相同的引用(或String),需要一起重写equals方法和hashCode方法)

TreeSet<T>在添加时会自动排序,数字升序,字母a-z,在使用类T做参数时,TreeSet<T>添加元素时,必须先有:T implements comparable接口,实现它的compareTo方法(算法实现,return 0判断为相同,则添加失败)

实例:

import java.util.HashSet;
import java.util.Iterator;
import java.util.TreeSet;
import java.util.concurrent.ThreadPoolExecutor.AbortPolicy;


public class HashSetDemo {
public static void main(String[] args) {
Anamal<String> monkey = new Anamal<String>("猴子");
HashSet<Anamal<String>> hashSet = new HashSet<Anamal<String>>();
System.out.println(hashSet.add(new Anamal<String>("鱼儿")));
System.out.println(hashSet.add(new Anamal<String>("鸟儿")));
System.out.println(hashSet.add(new Anamal<String>("猴子")));
System.out.println(hashSet.add(new Anamal<String>("龙虾")));
System.out.println(hashSet.add(new Anamal<String>("鸟儿")));
System.out.println(hashSet.add(monkey));
Iterator showIterator = hashSet.iterator();
while (showIterator.hasNext()) {
System.out.println(showIterator.next());
}
hashSet.remove(monkey);
System.out.println("-----------------------------------");
for(Anamal<String> hashSet2:hashSet){
System.out.println(hashSet2);
}
/**
* 测试String比较排序
* 1.升序a-z排序
* 2.逐个字母排序
* 3.有比没有大
*/

TreeSet<String> liSet = new TreeSet<String>();
liSet.add("a");
liSet.add("acb");
liSet.add("abcd");
liSet.add("de");
liSet.add("fa");
System.out.println(liSet);

TreeSet<Persons> persons = new TreeSet<Persons>();
persons.add(new Persons("3",8));
persons.add(new Persons("2",1));
persons.add(new Persons("4",2));
persons.add(new Persons("9", 3));
persons.add(new Persons("2",2));
persons.add(new Persons("6",2));
System.out.println(persons);
}
}
class Persons implements Comparable<Persons>{
private String name;
private int age;
public Persons(String name, int age) {
super();
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 String toString() {
return "Persons [name=" + name + ", age=" + age + "]\n";
}
@Override
public int compareTo(Persons o) {
int x = this.age - o.age;
/**

* 如果名字相同年龄不同,可以添加
* int y = this.name.compareTo(o.getName)
* if(x == 0 && y==0){
* return 0;
* }else{
* 按年龄排序,如果年龄相同就按名字排序
* }
*/

if(x>0)
return 1;
if(x<0)
return -1;

//返回为0则判断有相同的元素,添加失败
return 0;
}

}

1.HashSet,需重写equals,hashCode方法来判断添加的元素是否已经存在(按自己的判断方式)

2.TreeSet,需实现comparable接口,重写compareTo方法(作用:1.判断是否有相同的元素【返回值为0则有相同元素】。2.排序【返回值1或-1来排序】)

输出结果:


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值