Java复习之集合框架Set接口
来源:互联网 发布:搜狐网络大电影合作 编辑:程序博客网 时间:2024/06/05 23:52
这篇博客主要是复习一下Java中集合框架Set接口。
1.Set接口
public interface Set
extends Collection
一个不包含重复元素的collection。更确切的说,set不包含满足e1.equals(e2)的元素。对e1和e2,并且最多包含一个null元素。正如其名称所暗示的,此接口模仿了数学上的set抽象
2.HashSet
public class HashSet
extends AbstractSet
implements Set,Clonable,Serializable
类实现Set接口,由哈希表(实际上是一个HashMap实例)支持。它不保证set的迭代顺序:特别是它不保证该顺序的恒久不变。此类允许使用null元素
HashSet注意事项
- HashSet实现类:
1.不保证实现顺序,
2.默认构造方法底层由HashMap实例的默认初始容量为16,加载因子为0.75
3.加载因子是hashset扩充的条件
4.判断自定义对象是否相等的时候,要重写hashCode()和equals()方法哦! HashCode值相同的时候再去调用equals方法,Hashcode值不同的时候则不用调用equals方法。
public class Person { private String name; private int age; public Person() { } public Person(String name,int age) { this.name=name; this.age=age; } public int getAge() { return age; } public String getName() { return name; } public void setAge(int age) { this.age = age; } public void setName(String name) { this.name = name; } @Override public String toString() { return "name:"+name+"age:"+age; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Person person = (Person) o; if (age != person.age) return false; return name != null ? name.equals(person.name) : person.name == null; } @Override public int hashCode() { int result = name != null ? name.hashCode() : 0; result = 31 * result + age; return result; }}
public static void hashset() { Set<String> set=new HashSet<String>(); set.add("空空"); set.add("兰兰"); set.add("泉彩"); set.add("岛爱"); System.out.println("元素的个数是:"+set.size()); //不允许重复 // set.add("空空"); //存储自定义对象 Set<Person> persons =new HashSet<Person>(); Person p1=new Person("空空",30); Person p2 =new Person("兰兰",29); Person p3=new Person("岛爱",32); Person p4=new Person("泉彩",28); persons.add(p1); persons.add(p2); persons.add(p3); persons.add(p4); //这样便可以把值插入进去,因为对象的内存地址不一样 //为了避免这种情况,我们可以重写hashcode()和equals()方法 //可以使用系统的自动生成 persons.add(new Person("空空",30)); System.out.println("一共有元素"+persons.size()); }
3.TreeSet
TreeSet是有序的集合
public class TreeSet
extends AbstractSet
implements NavigableSet,Cloneable,Serializable
基于TreeMap的NavigableSet实现。使用元素的自然排序对元素进行排序,或者根据创建set时提供的Comparator进行排序,具体取决于使用的构造方法
TreeSet注意事项
1.使用元素的自然顺序对元素进行排序
2.底层使用TreeMap实现(树形结构)
3.在TreeSet集合中存储自定义对象: 该对象必须实现Comparable接口,并且使用这个方法进行排除重复元素
public class Emp implements Comparable<Emp> { private String name; private int age; public Emp() { } public Emp(String name,int age) { this.name=name; this.age=age; } public String getName() { return name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Emp{" + "name='" + name + '\'' + ", age=" + age + '}'; } @Override public int compareTo(Emp o) { if(o==null) { throw new NullPointerException("对象不能为空"); } if(this.age<o.age) { return -1; }else if(this.age>o.age) return 1; return 0; }}
public static void treeset() { Set<String> set=new TreeSet<String>(); set.add("空空"); set.add("兰兰"); set.add("泉彩"); set.add("岛爱"); System.out.println("一共有元素:"+set.size()); //打印treeset中的元素 //toArray()的参数只是告诉程序要返回什么类型的Obj String names[]=set.toArray(new String[]{}); for (String s:names) { System.out.println(s); } System.out.println("=======添加自定义对象========="); Set<Emp> emps = new TreeSet<Emp>(); Emp e1= new Emp("空空",29); Emp e2 = new Emp("兰兰",30); Emp e3 = new Emp("岛爱",28); Emp e4 =new Emp("泉彩",35); emps.add(e1); emps.add(e2); emps.add(e3); emps.add(e4); //不允许相同的对象 //emps.add(e1); //这个对象还是添加不进去,因为年龄与空空同岁,实际上使用Compare //方法 emps.add(new Emp("利亚",29)); System.out.println("元素的个数为"+emps.size()); }
4.LinkedHashSet
有序
public class LinkedHashSet
extends HashSet
implement Set,Clonable,Serializable
具有可预知迭代顺序的Set接口的哈希表和链接链表实现。此实现与HashSet的不同在于,LinkedHashSet维护着一个运行于所有条目的双重链接链表。此链接列表定义了迭代顺序,即按照将元素插入到set中的顺序(插入顺序)进行迭代。注意:插入顺序不受在set中重新插入的元素的影响。
LinkedHashSet注意事项:
1.使用哈希表+双向链表实现
2.会以插入的顺序输出
3.底层是使用LinkedHashMap实现
4.是Hashset的子类
- Java复习之集合框架Set接口
- Java复习之集合框架List接口
- JAVA集合框架之List Set接口
- Java集合框架复习之规则集Set-LinkedHashSet(四)
- Java集合框架复习之规则集Set-TreeSet(五)
- 集合框架之Set接口
- Java集合框架总结之Set接口的使用
- JAVA集合框架之Set接口实现类
- Java集合框架详解之继承set接口
- 第十五篇:JAVA集合框架之Set接口实现类
- Java集合框架复习之Collection接口,iterator接口,iterable接口(二)
- JAVA集合框架之set
- Java集合框架之Set
- Java集合框架之Set
- Java集合框架之set
- 集合框架Set接口之hashset
- java集合框架系列---Set接口
- 集合框架-Set接口
- I,P,B帧和PTS,DTS的关系
- 《spring-boot学习》-14-spring boot整合freeMarker模板
- Eclipse jar 包 导出
- 微博爬虫之问题种种
- Unity版本控制忽略文件
- Java复习之集合框架Set接口
- js杂记
- 安卓实战开发之把arr替换为library给eclipse使用(菜鸟学习)
- 支持向量机通俗导论(理解SVM的三层境界)(2)
- scrapy-1
- Ubuntu 16.04 desktop 配置VPN服务pptpd
- ROS 右手坐标系图
- 动归之状态压缩
- Java设计模式之适配器模式