Set接口是Collection接口的子接口,Set接口中不能插入反复元素

Set接口的经常使用子类:

HashSet是set接口的一个子类。特点:里面不能存放反复元素,并且採用散列的存储方式。所以没有顺序。

Treeset也是set接口的一个子类。特点:里面不能存放反复元素,而且是有序存放

TreeSet是有序存放的。所以须要制定好排序规则,TreeSet中每一个对象所在的类都必须实现Compatable接口才干够正常使用;

packageleiji;

publicclass Person implements Comparable<Person> {

private String name;

private int age;

public Person (String name,int age){

this.name=name;

this.age=age;

}

public String toString(){    //覆写toString方法

return"姓名:"+name+";年龄:"+age;

}

public int compareTo(Person per){  //覆写compareTo方法

if(this.age>per.age){

return 1;

}

else if(this.age<per.age){

return -1;

}

else{

return this.name.compareTo(per.name) ;

}

}

}

packageleiji;

publicclass Personal {

private String name;

private int age;

public Personal (String name,int age){

this.name=name;

this.age=age;

}

public String toString(){    //覆写toString方法

return"姓名:"+name+";年龄:"+age;

}

public boolean equals(Object obj){  //覆写equals方法

if(this==obj){          //推断是不是同一个对象

return true;

}

if (!(obj instanceofPersonal)){ //推断是不是同一个类

return false;

}

Personalp=(Personal)obj;       //进行向下转型

if(this.name.equals(p.name) && this.age==p.age){   //

return true;

}else{

return false;

}

}

public int hashCode(){      //覆写hashCode函数

returnthis.name.hashCode()*this.age;   //指定编码格式

}

}

packageleiji;

importjava.util.Set;

importjava.util.HashSet;

importjava.util.TreeSet;

publicclass Sett {

public static void main(String args[]){

Set<String> allset=new HashSet<String>();

allset.add("A");

allset.add("M");

allset.add("D");

allset.add("F");

allset.add("F");

System.out.println(allset);

Set<String> sortset=new TreeSet<String>();

sortset.add("F");

sortset.add("M");

sortset.add("A");

sortset.add("d");

System.out.println(sortset);

//运用自己定义的类对象作为元素

Set<Person> alls=new TreeSet<Person>();

alls.add(new Person("张三",30));

alls.add(new Person("张三",32));

alls.add(new Person("张三",30));

alls.add(new Person("李四",30));

System.out.println(alls);

//运用自己定义类Personal作为元素 实现HashSet去重功能

Set<Personal> allse=new HashSet<Personal>();

allse.add(new Personal("张三",30));

allse.add(new Personal("李四",30));

allse.add(new Personal("张三",30));

allse.add(new Personal("赵六",30));

allse.add(new Personal("徐峥",30));

System.out.println(allse);

}

}

//一个好的object类最好覆写Object类的HashCode()
equals() toString() 三个方法

Java类集-set的更多相关文章

  1. 浅谈java类集框架和数据结构(1)

    在另外一篇博客我简单介绍了java类集框架相关代码和理论. 这一篇博客我主要分析一下各个类集框架的原理以及源码分析. 一:先谈谈LinkedList 这是LinkedList源码的开头,我们能看到几点 ...

  2. 专题笔记--Java 类集框架

    Java 类集框架 1. Java类集框架产生的原因 在基础的应用中,我们可以通过数组来保存一组对象或者基本数据,但数组的大小是不可更改的,因此出于灵活性的考虑和对空间价值的担忧,我们可以使用链表来实 ...

  3. 浅谈java类集框架和数据结构(2)

    继续上一篇浅谈java类集框架和数据结构(1)的内容 上一篇博文简介了java类集框架几大常见集合框架,这一篇博文主要分析一些接口特性以及性能优化. 一:List接口 List是最常见的数据结构了,主 ...

  4. java:类集操作,多对多的关系

    java:类集操作,多对多的关系 //一个课程有多个学生报名, //一个学生可以报名多个课程 demo.java, Student.java, Course.java' public class Co ...

  5. java:类集操作总结

    java:类集操作总结 1.List接口允许有重复的元素,Set接口中不允许有重复的元素 2.ArrayList,和Vector的区别 3.set依靠equals和hashCode区分 4.TreeS ...

  6. Java类集框架详细汇总-底层分析

    前言: Java的类集框架比较多,也十分重要,在这里给出图解,可以理解为相应的继承关系,也可以当作重要知识点回顾: Collection集合接口 继承自:Iterable public interfa ...

  7. java类集开发中一对多和多对多的关系的实现

    摘自<java开发实战经典>李兴华.著 一对多的关系 一个学校可以包含多个学生,一个学生属于一个学校,那么这就是一个典型的一对多关系,此时就可以通过类集进行关系的表示. 在定义Studen ...

  8. Java -- Java 类集 -- 目录

    13.1 认识类集 13.1.1 基本概念 13.1.2 类集框架主要接口 13.2 Collection接口 13.2.1 Collection接口的定义 13.2.2 Collection子接口的 ...

  9. 5.1 java类集(java学习笔记)Collection、List接口及ArrayList、LinkedList类。

    一.类集 类集就是一组动态的对象数组,说类集可能不好理解,类集又称容器,容器顾名思义就是放东西的地方. 类集就是为了让我们更加简洁,方便的存放.修改.使用数据的. 二.Collection接口 我们看 ...

  10. Java 类集初探

    类集 类集:主要功能就是Java数据结构的实现(java.util) 类集就是动态对象数组(链表也是动态数组) Collection 接口* Collection是整个类集之中单值保存的最大 父接口 ...

随机推荐

  1. LAMP安装细则

    利用xshell从Windows向Linux传输文件[root@nanainux ~]#yum install lrzsz[root@nanalinux ~]#rz  MySq二进制包安装 mysql ...

  2. linux中直接进行系统调用和通过C库调用的示例

    深入了解LINUX,这方面内容不可少,这段时间再补补.. #include <syscall.h> #include <unistd.h> #include <stdio ...

  3. MySQL插入中文数据报错

    在操作数据库插入中文会出现如下错误: ERROR 1366 (HY000): Incorrect string value: '\xC4\xE3\xBA\xC3' for column 'userna ...

  4. PreparedStatement 和 Statement 实现基本的批处理

    批处理:若需要对数据库进行多步操作,则就没必要每次都和数据库进行一次通信,这样很消耗资源和时间.则需要将操作进行批处理:    Statement方式来实现批处理        优点:         ...

  5. (10)python 特殊方法

    一.构造方法 在类中定义构造函数 >>> class a: def __init__(self): self.age=42 >>> f=a() >>&g ...

  6. HDU 1106 排序(排序)

    输入一行数字,如果我们把这行数字中的‘5’都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以‘0’开头,这些头部的‘0’应该被忽略掉,除非这个整数就是由若干个‘0’组成的,这时这个整数 ...

  7. 一条命令搞定在VMware中的Ubuntu14.04 64 位安装Docker

    对,就是这么炫酷! curl -sSL https://get.docker.com/ | sudo sh 如果提示没有装curl就apt-get install一下,另外提醒一下必须是64位的ubu ...

  8. sed 手册 http://www.gnu.org/software/sed/manual/sed.html

    http://www.gnu.org/software/sed/manual/sed.html

  9. bit & byte & B & KB & Kbps & KBps & ps

    存储单位bit & byte & B & KB & Kbps & KBps & ps    (bit,位:byte,字节:区别) Bit,位 :二进制数 ...

  10. [USACO Special 2007 Chinese Competition]The Bovine Accordion and Banjo Orchestra

    [原题描述以及提交地址]:http://acm.tongji.edu.cn/problem?pid=10011 [题目大意] 给定两个长度为N的序列,要给这两个序列的数连线.连线只能在两个序列之间进行 ...