Java集合——集合框架Set接口
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接口的更多相关文章
- Java类集框架——List接口
学习目标 掌握List接口与Collection接口的关系. 掌握List接口的常用子类:ArrayList.Vector. 掌握ArrayList与Vector类的区别. Collection ...
- java:类集框架conllection接口list,set
类集中提供了以下几种接口: 1.单值操作接口:conllection,List,Set list和set是conllection接口的子接口 2.一对值的操作接口:Map 3.排序的操作接口:Sort ...
- Java中集合框架,Collection接口、Set接口、List接口、Map接口,已经常用的它们的实现类,简单的JDK源码分析底层实现
(一)集合框架: Java语言的设计者对常用的数据结构和算法做了一些规范(接口)和实现(实现接口的类).所有抽象出来的数据结构和操作(算法)统称为集合框架. 程序员在具体应用的时候,不必考虑数据结构和 ...
- Java:集合,Map接口框架图
Java集合大致可分为Set.List和Map三种体系,其中Set代表无序.不可重复的集合:List代表有序.重复的集合:而Map则代表具有映射关系的集合.Java 5之后,增加了Queue体系集合, ...
- Java:集合,Collection接口框架图
Java集合大致可分为Set.List和Map三种体系,其中Set代表无序.不可重复的集合:List代表有序.重复的集合:而Map则代表具有映射关系的集合.Java 5之后,增加了Queue体系集合, ...
- Java集合框架——Set接口
第三阶段 JAVA常见对象的学习 集合框架--Set接口 List集合的特点是有序的,可重复的,是不是存在这一种无序,且能保证元素唯一的集合呢?(HashSet )这就涉及到我们今天所要讲的Set集合 ...
- Java集合框架——List接口
第三阶段 JAVA常见对象的学习 集合框架--List接口 按照集合框架的继承体系,我们先从Collection中的List接口开始学习 (一) 概述及功能(ArrayList演示) (1) 概述 L ...
- Java集合框架Map接口
集合框架Map接口 Map接口: 键值对存储一组对象 key不能重复(唯一),value可以重复 常用具体实现类:HashMap.LinkedHashMap.TreeMap.Hashtable Has ...
- java的集合框架最全详解
java的集合框架最全详解(图) 前言:数据结构对程序设计有着深远的影响,在面向过程的C语言中,数据库结构用struct来描述,而在面向对象的编程中,数据结构是用类来描述的,并且包含有对该数据结构操作 ...
- Java的集合框架
01.为什么要使用集合框架? 解析:如果并不知道程序运行时会需要多少对象,或者需要更复杂方式存储对象,那么可以使用Java集合框架. 如果启用集合的删除方法,那么集合中所有元素的索引会自动维护. 集合 ...
随机推荐
- 如何避免这个delete from tb_name不带条件的操作
那么,我们如何避免这个delete from tb_name不带条件的呢?其实是有办法的,但这只针对运维DBA或者DBA在操作时候有用,但对于PHP和JAVA程序,它的连接操作方式,就没办法避免了 s ...
- 统计不同的单词(map应用)
题目描述: 输入一些单词,找出所有满足如下条件的单词:该单词不能通过字母重排,得到输入文本中的另一个单词.在判断是否满足条件时,字母不区分大小写,但在输出时应保留输入中的大小写,按字典序进行排列(所有 ...
- 机器学习:从sklearn中加载数据
一.sklearn模块 sklearn模块下有很多子模块,常用的数据集在:sklearn.datasets模块下: 通过数据集中DESCR来查看数据集的文档: 从datasets中加载数据: impo ...
- Java中继承的规则
一.子类中对父类构造函数的调用规则 1.如果不显式指定,子类中的构造函数会默认调用父类中的无参构造 测试代码 package day07; import java.sql.Date; import j ...
- JSP介绍(4)--- JSP 过滤器
过滤器是可用于 Servlet 编程的 Java 类,可以实现以下目的: 在客户端的请求访问后端资源之前,拦截这些请求. 在服务器的响应发送回客户端之前,处理这些响应. 过滤器通过 Web 部署描述符 ...
- webrower + CEF
理解WebKit和Chromium: Content API和CEF3 标签: apiAPIAPibrowserchromeChromehtml5HTML5Html5web ...
- github 分支操作
1.查看分支 1.查看本地分支 使用git branch命令,如下: $ git branch * master *标识的是你当前所在的分支. 2.查看远程分支 命令如下: git branch -r ...
- 微信小程序--录制音频,播放音频
1.在pages创建一个main文件夹2.在main文件夹下创建一个miain.js文件.添加代码: const constant = require('../../utils/constant.js ...
- unity3d 刷新速率
using UnityEngine; using UnityEngine.UI; public class Text : MonoBehaviour { public Text t; private ...
- Lotus Notes 学习笔记
这是一个学习关于如何使用Lotus Notes的Agent功能来实现自动化办公的学习笔记. 一. 介绍 Lotus Notes/Domino 是一个世界领先的企业级通讯.协同工作及Internet/I ...