Set

Set是不包含重复元素的集合。更正式地,集合不包含一对元素e1e2,使得e1.equals(e2),并且最多一个空元素

  无索引,不可以重复,无序(存取不一致)

Set接口除了继承自Collection接口的所有构造函数以及add,equalshashCode方法外,增加了其他方法


HashSet

此类实现Set接口,由哈希表(实际为HashMap实例)支持。 对集合的迭代次序不作任何保证; 特别是,它不能保证此顺序在一段时间内保持不变。 这个类允许使用null元素。

HashSet 保证存储数据唯一的方法:

  • HashCode方法给每个元素计算数值并进行比较
  • 当 HashCode数值一样时,会调用 equals 方法进行比较


LinkedHashSet

底层是链表实现的,是 Set 集合中唯一一个能保证存取顺序一致的集合对象

因为是 HashSet 的子类,所以也能保证元素唯一,与 HashSet 原理一样


TreeSet(重要)

TreeSet 集合是用来对 对象进行排序的,可以指定一个顺序,也可以保证元素的唯一

TreeSet 存储的方法是采用了Tree 二叉树。保证元素唯一的原理是其中用到了 CompareTo()  方法进行比较,小的返回负数,存储在二叉树的左边,大的返回整数,存储在右边,相等返回0,不存储。

所以当compareTo 方法返回0的时候集合中只有一个元素

           返回正数的时候集合会怎么存怎么取,顺序存取

           返回负数的时候集合会倒序存储

更多TreeSet集合相关知识见这篇博客 :

JavaSE基础 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的更多相关文章

  1. java集合框架之几种set(HashSet LinkedHashSet TreeSet )

    参考http://how2j.cn/k/collection/collection-sets/691.html#nowhere HashSet LinkedHashSet TreeSet HashSe ...

  2. HashSet,LinkedHashSet,TreeSet的区别

    Set接口Set不允许包含相同的元素,如果试图把两个相同元素加入同一个集合中,add方法返回false.Set判断两个对象相同不是使用==运算符,而是根据equals方法.也就是说,只要两个对象用eq ...

  3. 30、Java中Set集合之HashSet、TreeSet和EnumSet

    Set集合是Collection的子集,Set集合与Collection基本相同,没有提供任何额外的方法,只是Set不允许包含重复的元素. Set集合3个实现类:HashSet.TreeSet.Enu ...

  4. Java开发笔记(六十五)集合:HashSet和TreeSet

    对于相同类型的一组数据,虽然Java已经提供了数组加以表达,但是数组的结构实在太简单了,第一它无法直接添加新元素,第二它只能按照线性排列,故而数组用于基本的操作倒还凑合,若要用于复杂的处理就无法胜任了 ...

  5. HashSet LinkedHashSet TreeSet 分析

    1.HashSet分析 hashset 底层是hash表,就是hashMap,是无序的,唯一的.也就是说,它的底层其实就是一个HashMap  key 值的组成值.所以具有唯一性. public Ha ...

  6. Java 基础 - Set接口 及其实现类HashSet/LinkedHashSet/TreeSet

    笔记: /**Set接口 及其实现类 * 公用操作同Collection: * * ①size(),clear()②isEmpty(),③contains(),④add()方法 和remove()方法 ...

  7. JDK源码学习笔记——HashSet LinkedHashSet TreeSet

    你一定听说过HashSet就是通过HashMap实现的 相信我,翻一翻HashSet的源码,秒懂!! 其实很多东西,只是没有静下心来看,只要去看,说不定一下子就明白了…… HashSet 两个属性: ...

  8. 集合--Set&&HashSet和TreeSet

    特点:元素无序,不可重复 1.添加元素 set.add("tanlei"); set.addAll(Arrays.asList(44,"磊","磊&q ...

  9. Java自学-集合框架 HashSet、LinkedHashSet、TreeSet之间的区别

    HashSet. LinkedHashSet.TreeSet之间的区别 步骤 1 : HashSet LinkedHashSet TreeSet HashSet: 无序 LinkedHashSet: ...

  10. Set集合——HashSet、TreeSet、LinkedHashSet(2015年07月06日)

    一.Set集合不同于List的是: Set不允许重复 Set是无序集合 Set没有下标索引,所以对Set的遍历要通过迭代器Iterator 二.HashSet 1.HashSet由一个哈希表支持,内部 ...

随机推荐

  1. vue引入css和js的方法

    1.引入js的话 require('地址') imgport xxx from ‘src’ import xxx 2.引入css @import ‘  ’

  2. A1042

    洗牌,共洗k次,每次将将原先的牌洗进输入好的位置. 步骤: 1 设置次数k,输入位置数列next[55],填充初始牌序start[55]: 2 end[next[i]]=start[i]把新的牌序赋值 ...

  3. 51nod1790 输出二进制数

    题目描述 题解 过于真实 LJ卡常题 一个显然的dp: 设f[i][j]表示做完前i个,最后一段为j+1~i的方案(最小值同理) 那么f[i][j]=min(f[i-j-1][k]),其中k~j-1要 ...

  4. Java——网络

    [通信协议分层]   (1)为什么要分层?  

  5. sh_06_个人信息

    sh_06_个人信息 """ 姓名:小明 年龄:18 岁 性别:是男生 身高:1.75 米 体重:75.0 公斤 """ # 在 Pytho ...

  6. CG-CTF | MD5

    渣渣今天写了一题misc,第一次学习md5的python写法,赶紧记录一波 背景知识: import hashlib md51=hashlib.md5() md52=hashlib.md5() # [ ...

  7. A* 算法求第 K 短路

    一种具有 \(f(n)=g(n)+h(n)\) 策略的启发式算法能成为 A* 算法的充分条件是: 搜索树上存在着从起始点到终了点的最优路径. 问题域是有限的. 所有结点的子结点的搜索代价值 \(> ...

  8. CTO爆料:2019程序员最需要了解的行业前沿技术是什么?

    安森,个推CTO 毕业于浙江大学,现全面负责个推技术选型.研发创新.运维管理等工作,已带领团队开发出针对移动互联网.金融风控等行业的多项前沿数据智能解决方案. 曾任MSN中国首席架构师,拥有十余年资深 ...

  9. Json ignore on class level

    Exclude all instances of a class from serialization in Newtonsoft.Json Every custom type can opt how ...

  10. 【后台管理系统】—— Ant Design Pro组件使用(一)

    一.搜索Search      搜索框 <Search placeholder="请输入关键字" defaultValue={kw && kw != 'nul ...