四、set集合

无序、无下标、元素不可重复

1、hashSet【重点】

== 数组+链表+红黑树==

  • 基于hashcode计算元素存储位置
  • 当哈希吗一样的时候,调用equals,如果为true,拒接存入
package com.zheng.demo3;

import java.util.HashSet;
import java.util.Iterator; public class MySet {
public static void main(String[] args) { //创建集合框架
HashSet<String> set = new HashSet<>(); //添加数据
set.add("1-小红");
set.add("2-小明");
set.add("3-小白");
set.add("4-小黑");
set.add("5-小红");
set.add("1-小红"); //迭代器迭代集合元素 遍历
Iterator<String> iterator = set.iterator(); while (iterator.hasNext()) {
System.out.println(iterator.next());
} }
}

实体类

package com.zheng.demo3;

public class School {
private int id;
private String name; public School() { } public School(int id, String name) {
this.id = id;
this.name = name;
} public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} @Override
public String toString() {
return "School{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
package com.zheng.demo3;

import java.util.HashSet;
import java.util.Iterator; public class TestSet {
public static void main(String[] args) { //1、创建集合容器
HashSet<School> schools = new HashSet<>(); //创建对象
School school1 = new School(1, "清华大学");
School school2 = new School(2, "北京大学");
School school3 = new School(3, "浙江大学"); //3、放入集合 schools.add(school1);
schools.add(school2);
schools.add(school3);
schools.add(new School(2,"北京大学")); //4、遍历 Iterator<School> iterator = schools.iterator();
while (iterator.hasNext()){
School school=iterator.next();
System.out.println(school);
} }
}

2、TreeSet

存储结构:红黑树

  • 要实现comparable接口,重写里边的方法,返回0代表元素重复
  • 元素不重复
  • 元素自动排序
package com.zheng.demo3;

import java.util.Iterator;
import java.util.TreeSet; public class MyTree {
public static void main(String[] args) { //1、创建一个集合
TreeSet treeSet = new TreeSet(); //2、加入元素
treeSet.add(1);
treeSet.add(3);
treeSet.add(2);
treeSet.add(4);
treeSet.add(3); //3、迭代遍历
Iterator iterator = treeSet.iterator();
while (iterator.hasNext()) {
int i = (int) iterator.next();
System.out.println(i);
} }
}


TreeSet案例:排列字符串的顺序

package com.zheng.demo3;

import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet; public class MyTreeSet {
public static void main(String[] args) {
//匿名内部类
TreeSet<String> set = new TreeSet<>(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
int n1 = o1.length() - o2.length();
int n2 = o1.compareTo(o2);
return n1 == 0 ? n2 : n1;
} }); set.add("he");
set.add("hhhhh");
set.add("jdjdjkdkk");
set.add("djdj"); Iterator<String> iterator = set.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}


comparator:定制比较器

java集合框架复习----(3)Set的更多相关文章

  1. java集合框架复习(一)

    数组类Array是java中最基本的一个存储结构,它用于存储 一组连续的对象或一组类型相同的基本类型的数据. Array特点:效率高,但容量固定且无法动态改变, 缺点:无法判断其中存有多少元素,len ...

  2. java集合框架复习

    数组类Array是java中最基本的一个存储结构,它用于存储 一组连续的对象或一组类型相同的基本类型的数据. Array特点:效率高,但容量固定且无法动态改变, 缺点:无法判断其中存有多少元素,len ...

  3. java集合框架复习----(1)

    文章目录 1 .集合框架思维导图 一.什么是集合 二.collection接口 1 .集合框架思维导图 一.什么是集合 存放在java.util.*.是一个存放对象的容器. 存放的是对象的引用,不是对 ...

  4. java集合框架复习----(4)Map、List、set

    文章目录 五.Map集合[重要] 1.hashMap 六.Collections工具类 总结 集合的概念 List集合 set集合: Map集合 Collection 五.Map集合[重要] 特点: ...

  5. java集合框架复习----(2)List

    文章目录 三.List集合 listIterator:迭代器 List实现类 1.泛型类 2.泛型接口 三.List集合 特点 有序,打印输出的顺序和添加时的顺序一致(不会帮你自动排序) 有下标,可以 ...

  6. 【java集合框架源码剖析系列】java源码剖析之java集合中的折半插入排序算法

    注:关于排序算法,博主写过[数据结构排序算法系列]数据结构八大排序算法,基本上把所有的排序算法都详细的讲解过,而之所以单独将java集合中的排序算法拿出来讲解,是因为在阿里巴巴内推面试的时候面试官问过 ...

  7. Java集合框架List,Map,Set等全面介绍

    Java集合框架的基本接口/类层次结构: java.util.Collection [I]+--java.util.List [I]   +--java.util.ArrayList [C]   +- ...

  8. Java集合框架练习-计算表达式的值

    最近在看<算法>这本书,正好看到一个计算表达式的问题,于是就打算写一下,也正好熟悉一下Java集合框架的使用,大致测试了一下,没啥问题. import java.util.*; /* * ...

  9. 【集合框架】Java集合框架综述

    一.前言 现笔者打算做关于Java集合框架的教程,具体是打算分析Java源码,因为平时在写程序的过程中用Java集合特别频繁,但是对于里面一些具体的原理还没有进行很好的梳理,所以拟从源码的角度去熟悉梳 ...

随机推荐

  1. 用JavaScript写一个能开始和暂停的时钟

    //sScriptvar showTime = document.getElementById('seconds') var id =0 function fn(){ var i = 0 var s ...

  2. 基于ABP的AppUser对象扩展

      在ABP中AppUser表的数据字段是有限的,现在有个场景是和小程序对接,需要在AppUser表中添加一个OpenId字段.今天有个小伙伴在群中遇到的问题是基于ABP的AppUser对象扩展后,用 ...

  3. 皮皮调度(1)——从Airflow到DolphinScheduler,以及“皮皮调度”的来历

    按照前一篇文章 <GraalVM -- 让Java变得再次强大> 末尾提到的计划,本来这篇文章是想写一下GraalVM的后续<深耕云原生的Java应用框架 -- Quarkus> ...

  4. LuoguP1016 旅行家的预算 (贪心)

    胡一个错误代码都能有75pts 忘了怎么手写deque其实是懒 #include <cstdio> #include <iostream> #include <cstri ...

  5. 一,DRF入门规范

    一 Web应用模式 在开发Web应用中,有两种应用模式: 1.1 前后端不分离 1.2 前后端分离 二 API接口 为了在团队内部形成共识.防止个人习惯差异引起的混乱,我们需要找到一种大家都觉得很好的 ...

  6. Spring(一)- 初始 + DI+scope

    1.获取bean实例的三种方式 1.1 id 属性 1.1.1 jar <properties> <project.build.sourceEncoding>UTF-8< ...

  7. 【java】学习路径32-绝对路径与相对路径

    获取文件路径的时候,我们发现有两个方法,getAbsolutePath和getPath两个方法. 前者是获取绝对路径,后者是相对路径. 绝对路径指的是完整路径,从盘符开始. 相对路径指的是从java当 ...

  8. Qt Q_OBJECT编译问题

    编译问题 添加Q_OBJECT后需要qmake 多重继承 添加了Q_ENUM之类的宏,就需要Q_OBJECT 添加了Q_OBJECT,就需要类继承自QObject 如果有多重继承关系,QObject一 ...

  9. 《Java编程思想》读书笔记(三)

    前言:三年之前就买了<Java编程思想>这本书,但是到现在为止都还没有好好看过这本书,这次希望能够坚持通读完整本书并整理好自己的读书笔记,上一篇文章是记录的第十一章到第十六章的内容,这一次 ...

  10. npm 和 maven 使用 Nexus3 私服 | 前后端一起学

    前文<Docker 搭建 Nexus3 私服 >介绍了在 docker 环境下安装 nexus3 以及 nexus3 的基本操作和管理,本文分别介绍 npm(前端)和 maven(后端)如 ...