[集合Set]HashSet、LinkedHashSet TreeSet
Set
Set是不包含重复元素的集合。更正式地,集合不包含一对元素e1和e2,使得e1.equals(e2),并且最多一个空元素。
无索引,不可以重复,无序(存取不一致)
Set接口除了继承自Collection接口的所有构造函数以及add,equals和hashCode方法外,还增加了其他方法

HashSet


此类实现Set接口,由哈希表(实际为HashMap实例)支持。 对集合的迭代次序不作任何保证; 特别是,它不能保证此顺序在一段时间内保持不变。 这个类允许使用null元素。
HashSet 保证存储数据唯一的方法:
- HashCode方法给每个元素计算数值并进行比较
- 当 HashCode数值一样时,会调用 equals 方法进行比较

LinkedHashSet
底层是链表实现的,是 Set 集合中唯一一个能保证存取顺序一致的集合对象
因为是 HashSet 的子类,所以也能保证元素唯一,与 HashSet 原理一样
TreeSet(重要)
TreeSet 集合是用来对 对象进行排序的,可以指定一个顺序,也可以保证元素的唯一
TreeSet 存储的方法是采用了Tree 二叉树。保证元素唯一的原理是其中用到了 CompareTo() 方法进行比较,小的返回负数,存储在二叉树的左边,大的返回整数,存储在右边,相等返回0,不存储。
所以当compareTo 方法返回0的时候集合中只有一个元素
返回正数的时候集合会怎么存怎么取,顺序存取
返回负数的时候集合会倒序存储
更多TreeSet集合相关知识见这篇博客 :
代码示例
学生类
package com.gaoyang.set;
public class Student {
    private String name;
    private int chinese;
    private int math;
    private int english;
    private int sum;
    public Student() {
        super();
        // TODO Auto-generated constructor stub
    }
    public Student(String name, int chinese, int math, int english) {
        super();
        this.name = name;
        this.chinese = chinese;
        this.math = math;
        this.english = english;
        this.sum = this.chinese + this.math + this.english ;
    }
    public int getSum() {
        return sum;
    }
    @Override
    public String toString() {
        return "Student " + name  +  " : " + "chinese=" + chinese + ", math=" + math + ", english="
                + english + ", sum= "+ sum ;
    }
}
操作代码
package com.gaoyang.set; import java.util.Comparator;
import java.util.Scanner;
import java.util.TreeSet; public class test_TreeSet { public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
System.out.println("请输入学生姓名成绩,格式为:姓名,语文成绩,数学成绩,英语成绩");
TreeSet<Student> ts = new TreeSet<>(new Comparator<Student>() { @Override
public int compare(Student s1, Student s2) {
int num = s2.getSum() - s1.getSum();
return num == ? : num;
}
}); while(ts.size() < ) {
String line = sc.nextLine();
String[] arr = line.split(",");
int chinese = Integer.parseInt(arr[]);
int math = Integer.parseInt(arr[]);
int english = Integer.parseInt(arr[]);
//存入集合中
ts.add(new Student(arr[],chinese, math, english)); } System.out.println("排序后的学生成绩");
for (Student student : ts) {
System.out.println(student);
}
}
}
[集合Set]HashSet、LinkedHashSet TreeSet的更多相关文章
- java集合框架之几种set(HashSet LinkedHashSet TreeSet )
		参考http://how2j.cn/k/collection/collection-sets/691.html#nowhere HashSet LinkedHashSet TreeSet HashSe ... 
- HashSet,LinkedHashSet,TreeSet的区别
		Set接口Set不允许包含相同的元素,如果试图把两个相同元素加入同一个集合中,add方法返回false.Set判断两个对象相同不是使用==运算符,而是根据equals方法.也就是说,只要两个对象用eq ... 
- 30、Java中Set集合之HashSet、TreeSet和EnumSet
		Set集合是Collection的子集,Set集合与Collection基本相同,没有提供任何额外的方法,只是Set不允许包含重复的元素. Set集合3个实现类:HashSet.TreeSet.Enu ... 
- Java开发笔记(六十五)集合:HashSet和TreeSet
		对于相同类型的一组数据,虽然Java已经提供了数组加以表达,但是数组的结构实在太简单了,第一它无法直接添加新元素,第二它只能按照线性排列,故而数组用于基本的操作倒还凑合,若要用于复杂的处理就无法胜任了 ... 
- HashSet  LinkedHashSet TreeSet 分析
		1.HashSet分析 hashset 底层是hash表,就是hashMap,是无序的,唯一的.也就是说,它的底层其实就是一个HashMap key 值的组成值.所以具有唯一性. public Ha ... 
- Java 基础 - Set接口 及其实现类HashSet/LinkedHashSet/TreeSet
		笔记: /**Set接口 及其实现类 * 公用操作同Collection: * * ①size(),clear()②isEmpty(),③contains(),④add()方法 和remove()方法 ... 
- JDK源码学习笔记——HashSet LinkedHashSet TreeSet
		你一定听说过HashSet就是通过HashMap实现的 相信我,翻一翻HashSet的源码,秒懂!! 其实很多东西,只是没有静下心来看,只要去看,说不定一下子就明白了…… HashSet 两个属性: ... 
- 集合--Set&&HashSet和TreeSet
		特点:元素无序,不可重复 1.添加元素 set.add("tanlei"); set.addAll(Arrays.asList(44,"磊","磊&q ... 
- Java自学-集合框架 HashSet、LinkedHashSet、TreeSet之间的区别
		HashSet. LinkedHashSet.TreeSet之间的区别 步骤 1 : HashSet LinkedHashSet TreeSet HashSet: 无序 LinkedHashSet: ... 
- Set集合——HashSet、TreeSet、LinkedHashSet(2015年07月06日)
		一.Set集合不同于List的是: Set不允许重复 Set是无序集合 Set没有下标索引,所以对Set的遍历要通过迭代器Iterator 二.HashSet 1.HashSet由一个哈希表支持,内部 ... 
随机推荐
- MySQL简版(二)
			第一章 表的约束 1.1 概念 对表中的数据进行限定,保证数据的正确性.有效性和完整性. 1.2 分类 主键约束:primary key. 非空约束:not null. 唯一约束:unique. 外键 ... 
- MySQL/mariadb知识点总结
			1.mysql/mariadb知识点总结:事务相关概念(事务总结-1) http://www.zsythink.net/archives/1204 2.mysql/mariadb知识点总结:事务控制语 ... 
- man---中英文翻译
			一. 总览---SYNOPSIS 二. 
- mongodb replica set搭建
			1/安装mongodb 配置repo: [mongodb-org-3.4]name=MongoDB Repositorybaseurl=https://repo.mongodb.org/yum/red ... 
- 尝试用了一哈wepy框架的感想
			恶心死我, 1 在项目里出现了中文乱码(utf-8在wpy文件里有中文和注释--编译后就转化成乱码, 把代码拷在另外的项目里,(该项目没有中文乱码现象,)编译出来就出现中文乱码, 然后我再在所拷的代码 ... 
- linux运维、架构之路-PHP编译常见报错及解决方法
			1. configure: error: xslt-config not found. Please reinstall the libxslt >= 1.1.0 distribution 复制 ... 
- php array_pop()函数 语法
			php array_pop()函数 语法 作用:删除数组中的最后一个元素.博智达 语法:array_pop(array) 参数: 参数 描述 array 必需.规定数组. 说明:返回数组的最后 ... 
- 牛客网  珂学送分( 期望DP )
			题意 : 题目链接 分析 : 听队友说一般概率从前往后推.期望从后往前推......... #include<bits/stdc++.h> using namespace std; ; d ... 
- 20181019-JSP 教程/简介
			JSP 教程 这是第一篇JSP JSP与PHP.ASP.ASP.NET等语言类似,运行在服务端的语言. JSP(全称Java Server Pages)是由Sun Microsystems公司倡导和许 ... 
- bootstrap动态调用select下拉框
			html代码: <label for="classify" class="col-sm-2 control-label">填报部门:</lab ... 
