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. 找工作-——网络IO

    网络层 主要任务是把网络协议数据单元或分组从源计算机经过适当的路径发送到目的地计算机.从源计算机到目的计算机可能要经过若干个中间节点,这需要在通信子网中进行路由选择. 网络层与数据链路层有很大的差别, ...

  2. Kill掉MySQL中所有sleep的client线程 (转)

    vim killsleep.sh #It is used to kill processlist of mysql sleep #!/bin/sh while : do   n=`mysqladmin ...

  3. Lua虚拟机初始化

    转自:http://www.cnblogs.com/ringofthec/archive/2010/11/09/lua_State.html 1. 创建lua虚拟机 lua_State *lua_ne ...

  4. shell入门-grep过滤-1

    正则表达式,就是一个字符串.有一定的规律.我们用指定的字符串匹配一个指定的行.指定的字符串就是正则表达式. 正则表达式有这几个工具:grep egrep sed awk 命令:gerep 说明:过滤出 ...

  5. Ok6410裸机驱动学习(二)ARM基础知识

    1.ARM工作模式 ARM微处理器支持7种工作模式,分别为: l  用户模式(usr):ARM处理器正常的程序执行状态(Linux用户态程序) l  快速中断模式(fiq):用于高速数据传输或通道处理 ...

  6. 拍照选择图片(Activity底部弹出)

    效果图如下: 第一步 : 显示出的布局文件:alert_dialog.xml <?xml version="1.0" encoding="utf-8"?& ...

  7. 【转】经典网文:追MM与设计模式

    设计模式做为程序员的“内功心法”,越来越受到.net 社区的重视,这种变化是很可喜的,Java社区走在了我们的前面,但这种状况也许有一天会发生改变. 从追MM谈Java的23种设计模式1.FACT ...

  8. AngularJs(Part 7)--Build-in Directives

    Directives In AngularJS, we can use a variety of naming conventions to reference directives . In the ...

  9. Java异常处理的10个最佳实践

    本文作者: ImportNew - 挖坑的张师傅 未经许可,禁止转载! 异常处理在编写健壮的 Java 应用中扮演着非常重要的角色.异常处理并不是功能性需求,它需要优雅地处理任何错误情况,比如资源不可 ...

  10. Jquery常用标签

    $(this).hide(1000)//隐藏该元素 $(this).show(1000)//显示该元素 $(this).fadeIn(1000)//淡入已隐藏的元素 $(this).fadeOut(1 ...