1.Set接口

一个不包含重复元素的collecyion。更确切的讲,set不包含满足e1.equals(e2)的元素e1和e2,并且最多包含一个null元素。

2.HashSet

类实现Set接口,由哈希表(实际上是一个HashMap实例)支持。它不保证set的迭代顺序:特别是它不保证该顺序恒久不变。此类允许使用null元素。

package com.vince;

import java.util.HashSet;
import java.util.Set; public class SetDemo { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
HashSetDemo();
}
/**
* 1.不允许重复值(通过equals方法来判断)
* 添加元素时如何判断是否重复,先调用对象的hashCode方法求值,如果hash值在集合中不存在,那么该对象可以添加(不重复的),
* 如果hash值相同,(还不能确定对象是否相同,因为不同的对象可能产生相同的hashCode值),那么需要再调用equals方法来验证,
*
* 如果需要在程序中有这样的需求,两个对象的值相同就认为两个对象是一个对象,并且使用了HashSet来存储,就需要重写对象(类)
* 中的hashCode方法和equals方法
*
*不保证遍历的顺序恒久不变
*基于HashMap实现
*/
public static void HashSetDemo(){
System.out.println("----------");
Set<String> set=new HashSet<String>();
set.add("小明");
set.add("小花");
set.add("小明");
System.out.println(set.size());//输出的是2,因为不能为重复值
System.out.println("----------");
Set<Student> set2=new HashSet<Student>();
Student stu1=new Student("小刚",16);
Student stu2=new Student("小花",23);
Student stu3=new Student("小刚",16);
set2.add(stu1);
set2.add(stu2);
set2.add(stu3);//虽然stu1和stu3的值相同,但是创建了两个内存空间,如果要让stu1和stu3代表同一个对象,则需要重写Student类中的equals方法
set2.add(stu1);//重复值了,所以不输出
System.out.println(set2.size());
System.out.println("----------"); } }

3.TreeSet

基于TreeMap的NavigableSet实现。使用元素的自然顺序对元素进行排序,或者根据创建set时提供的Comparator进行排序,具体取决于使用的构造方法。

4.LinkedHashSet

具有可预知迭代顺序的 Set 接口的哈希表和链接列表实现。此实现与 HashSet 的不同之外在于,后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,即按照将元素插入到 set 中的顺序(插入顺序)进行迭代。注意,插入顺序 受在 set 中重新插入的 元素的影响。(如果在 s.contains(e) 返回 true 后立即调用 s.add(e),则元素 e 会被重新插入到 set s 中。)

public class TreeSetDemo {

    /**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成的方法存根
TreeSet();
linkedHashSet();
}
/**
* 基于TreeMap实现
* 注意,在TreeSet集合中添加自定义对象,必须实现Comparable接口,
* 因为添加方法会使用compareTo方法来验证对象的排序位置,并验证
* 对象是否重复(如果compareTo返回0,表示两个对象重复),不同的话,使用
* 大小来决定排序的顺序
*
* 自然顺序对元素进行排序(从小到大)
*/
public static void TreeSet(){
Set<String> set=new TreeSet<String>();
set.add("小明");
set.add("小花");
set.add("小明");
System.out.println(set.size());//输出的是2,因为不能为重复值
System.out.println("----------");
Set<Student> set2=new TreeSet<Student>();
Student stu1=new Student("小刚",16);
Student stu2=new Student("小花",23);
Student stu3=new Student("小刚",16);
set2.add(stu1);
set2.add(stu2);
set2.add(stu3);
set2.add(stu1);
System.out.println(set2.size());
System.out.println("----------");
}
/**
* 从HashSet继承而来,确保对象的插入顺序(其实就是与HashSet的区别)
* 由双向链表+HashMap表实现
*/
public static void linkedHashSet(){
Set<String> set=new LinkedHashSet<String>();
set.add("小明");
set.add("小花");
set.add("小明");
System.out.println(set.size());//输出的是2,因为不能为重复值
System.out.println("----------");
Set<Student> set2=new LinkedHashSet<Student>();
Student stu1=new Student("小刚",16);
Student stu2=new Student("小花",23);
Student stu3=new Student("小刚",16);
set2.add(stu1);
set2.add(stu2);
set2.add(stu3);
set2.add(stu1);
System.out.println(set2.size());
System.out.println("----------");
} }
public class Student implements Comparable<Student> {
String name;
int 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;
}
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
public Student() {
super();
// TODO 自动生成的构造函数存根
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
@Override
public int compareTo(Student o) {
// TODO 自动生成的方法存根
if(age<o.age){
return -1;
}else if(age>o.age){
return 1;
}
return 0;
} }

Java集合——集合框架Set接口的更多相关文章

  1. Java类集框架——List接口

    学习目标 掌握List接口与Collection接口的关系. 掌握List接口的常用子类:ArrayList.Vector. 掌握ArrayList与Vector类的区别.    Collection ...

  2. java:类集框架conllection接口list,set

    类集中提供了以下几种接口: 1.单值操作接口:conllection,List,Set list和set是conllection接口的子接口 2.一对值的操作接口:Map 3.排序的操作接口:Sort ...

  3. Java中集合框架,Collection接口、Set接口、List接口、Map接口,已经常用的它们的实现类,简单的JDK源码分析底层实现

    (一)集合框架: Java语言的设计者对常用的数据结构和算法做了一些规范(接口)和实现(实现接口的类).所有抽象出来的数据结构和操作(算法)统称为集合框架. 程序员在具体应用的时候,不必考虑数据结构和 ...

  4. Java:集合,Map接口框架图

    Java集合大致可分为Set.List和Map三种体系,其中Set代表无序.不可重复的集合:List代表有序.重复的集合:而Map则代表具有映射关系的集合.Java 5之后,增加了Queue体系集合, ...

  5. Java:集合,Collection接口框架图

    Java集合大致可分为Set.List和Map三种体系,其中Set代表无序.不可重复的集合:List代表有序.重复的集合:而Map则代表具有映射关系的集合.Java 5之后,增加了Queue体系集合, ...

  6. Java集合框架——Set接口

    第三阶段 JAVA常见对象的学习 集合框架--Set接口 List集合的特点是有序的,可重复的,是不是存在这一种无序,且能保证元素唯一的集合呢?(HashSet )这就涉及到我们今天所要讲的Set集合 ...

  7. Java集合框架——List接口

    第三阶段 JAVA常见对象的学习 集合框架--List接口 按照集合框架的继承体系,我们先从Collection中的List接口开始学习 (一) 概述及功能(ArrayList演示) (1) 概述 L ...

  8. Java集合框架Map接口

    集合框架Map接口 Map接口: 键值对存储一组对象 key不能重复(唯一),value可以重复 常用具体实现类:HashMap.LinkedHashMap.TreeMap.Hashtable Has ...

  9. java的集合框架最全详解

    java的集合框架最全详解(图) 前言:数据结构对程序设计有着深远的影响,在面向过程的C语言中,数据库结构用struct来描述,而在面向对象的编程中,数据结构是用类来描述的,并且包含有对该数据结构操作 ...

  10. Java的集合框架

    01.为什么要使用集合框架? 解析:如果并不知道程序运行时会需要多少对象,或者需要更复杂方式存储对象,那么可以使用Java集合框架. 如果启用集合的删除方法,那么集合中所有元素的索引会自动维护. 集合 ...

随机推荐

  1. mysql root密码忘记重置

    1.修改/etc/my.cnf文件 找到mysqld选项,增加子项skip-grant-tables 2.重新启动mysql服务 service mysqld restart 3.进入mysql 在s ...

  2. 我的SIP开发之路

    http://hi.baidu.com/ltlovelty/blog/item/837baf1ece7fc6f11ad57647.html 经过对SIP协议和开源协议栈快半年的研究,我现在终于有点入门 ...

  3. Python:collections的deque()方法

    转于:https://www.cnblogs.com/zhenwei66/p/6598996.html 博主:http://www.cnblogs.com/zhenwei66/(渐晨) python3 ...

  4. 【转】 Pro Android学习笔记(三四):Menu(5):动态菜单

    目录(?)[-] OptionsMenu的创建方式 如何再次创建OptionsMenu 每次访问都重新填充菜单项 OptionsMenu的创建方式 OptionMenu在第一次访问该菜单时调用,只调用 ...

  5. 微服务理论之三:RPC框架原理

    RPC调用是面向服务架构场景下进行服务间调用的常用组件,一个完整的RPC调用的流程如图1所示: 图1 RPC调用流程 为了方便RPC调用者和服务者的开发,开发者们开发了很多RPC框架.比较有名的RPC ...

  6. js右击事件

    先贴代码: <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF ...

  7. JavaScript接口

    JavaScript中实现接口的方法有三种: 第一种,使用注释的方法实现接口 特点:(1)最简单,但是功能最弱(2)利用 interface和 implement"文字"(3)把他 ...

  8. JavaScript之闭包(重新认识)

    最近又重新学习了闭包,发现之前没有深刻理解作用域链,学习作用域链后对闭包才可以做到真正的理解.       闭包是指有权另一个函数作用域中变量的函数.要理解闭包首先理解作用域链.       执行环境 ...

  9. 5种最流行的AI编程语言

    人工智能如今正是蓬勃发展的时期,许多开发者都在跃跃欲试,如果你写想转做AI相关的开发,那么来了解更多与AI开发有关的内容吧,本文将介绍创建AI程序时可以使用的5种最佳语言. 人工智能如今正是蓬勃发展的 ...

  10. shell script-条件语句、循环语句

    条件语句 #!/bin/bash read -p "input your name:" name #第一种判断 if [ "$name" == "Mi ...