集合

Set用于存储不重复的元素集合:

  • boolean add(E e)
  • boolean remove(Object o)
  • boolean contains(Object o)
  • int size()
public class Main {
public static void main(String[] args) throws IOException {
Set<String> aset = new HashSet<>();
System.out.println("1"+aset.add("tom"));
System.out.println("2"+aset.add("tom"));//重复添加失败,set不能存储重复元素
System.out.println("3"+aset.add("jerry")); System.out.println("集合长度"+aset.size()); System.out.println("4"+aset.remove("jerry"));
System.out.println("5"+aset.remove("kitty"));
System.out.println("6"+aset.contains("tom"));
System.out.println("7"+aset.contains("jerry"));
}
}


## Set不保证有序:
* HashSet是无序的
* Tree Set是有序的
* 实现了SortedSet接口的是有序Set
```#java
public class Main {
public static void main(String[] args) throws IOException {
//HashSet不能保证有序
Set aset = new HashSet();
aset.add("apple");
aset.add("pear");
aset.add("orange");
for(Object o:aset){
System.out.println(o.toString());
}
}
}
```

```#java
public class Main {
public static void main(String[] args) throws IOException {
Set aset = new TreeSet();
//TreeSet按元素顺序排序
aset.add("apple");
aset.add("pear");
aset.add("orange");
for(Object o:aset){
System.out.println(o.toString());
}
}
}
```

TreeSet可以自定义排序算法

示例:利用set去除List中的重复元素

public class Main {
public static void main(String[] args) throws IOException {
List<String> list1 = Arrays.asList("pear","apple","banana","orange","apple","banana");
System.out.println(removeDuplicate(list1));
}
static List<String> removeDuplicate(List<String> list){
Set<String> set = new HashSet<>(list);
return new ArrayList<>(set);
}
}


替换为TreeSet,对元素进行排序
```#java
public class Main {
public static void main(String[] args) throws IOException {
List list1 = Arrays.asList("pear","apple","banana","orange","apple","banana");
System.out.println(removeDuplicate(list1));
}
static List removeDuplicate(List list){
Set set = new TreeSet(list);
return new ArrayList(set);
}
}
```

自定义排序算法
```#java
public class Main {
public static void main(String[] args) throws IOException {
List list1 = Arrays.asList("pear","apple","banana","orange","apple","banana");
System.out.println(removeDuplicate(list1));
}
static List removeDuplicate(List list){
Set set = new TreeSet(new Comparator() {
////自定义排序算法
@Override
public int compare(String o1, String o2) {
//反序
return -o1.compareTo(o2);
}
});
set.addAll(list);
return new ArrayList(set);
}
}
```

总结

  • Set用于存储不重复的元素集合
  • 放入Set的元素与作为Map的Key要求相同:正确实现equals()和hashCode()
  • 利用Set可以去除重复元素
  • 遍历SortedSet按照元素的排序顺序遍历,也可以自定义排序算法

廖雪峰Java5集合-4Set-1使用Set的更多相关文章

  1. 廖雪峰Java5集合-3Map-1使用Map

    廖雪峰的视频不全,以下是疯狂Java关于Map的讲解 1.Map定义 Map是一种键值映射表,可以通过key快速查找value,同python的dict.key不允许重复,value可以重复. Map ...

  2. 廖雪峰Java5集合-1Java集合简介-1Java结合简介

    1.集合 定义:集合就是一堆东西.集合里的东西,称为元素Element 数学中的集合: 有限集合: * 一个班所有的学生组成的集合 * 一个网站所有的商品组成的集合 无限集合: * 全体自然数集合 * ...

  3. 廖雪峰Java5集合-6Stack-1使用Stack

    1.栈的定义 栈Stack是一种后进先出(LIFO: Last In First Out)的数据结构,可以看作一端封闭的容器,先进去的元素永远在底部,最后出来. 栈有2个重要的方法: push(E e ...

  4. 廖雪峰Java5集合-3Map-Properties的使用

    Properties用于读取配置 properties文件只能使用ASCII码 #表示注释 可以从文件系统读取.properties文件 Properties props = new Properti ...

  5. 廖雪峰Java5集合-2List-2编写equals方法

    List是一种有序链表: List内部按照放入元素的先后顺序存放 每个元素都可以通过索引确定自己的位置 boolean contains(Object o) 是否包含某个元素 int indexOf( ...

  6. 廖雪峰Java5集合-2List-1使用List

    1.List定义 List是一种有序链表: List内部按照元素的先后顺序存放 每个元素都可以通过索引确定自己的位置 类似数组,但大小可变 //List<E>是一种有序链表: //* Li ...

  7. 廖雪峰Java5Java集合-5Queue-1使用Queue

    Queue特性和基本方法 Queue实现一个先进先出(FIFO, First In First Out)的队列.如收银台排队支付. Java中LinkedList实现了Queue接口,可以直接把Lin ...

  8. 爬取廖雪峰的python3教程

    从廖雪峰老师的python教程入门的,最近在看python爬虫,入手了一下 代码比较low,没有用到多线程和ip代理池 然后呢,由于robots.txt的限定,构建了一些user-agent,并放慢的 ...

  9. 廖雪峰Java6 IO编程-2input和output-4Filter模式

    1.JDK提供的InputStream分为两类: 直接提供数据的InputStream * FileInputStream:从文件读取 * ServletInputStream:从HTTP请求读取数据 ...

随机推荐

  1. rest-framework之分页器

    rest-framework之分页器 本文目录 一 简单分页(查看第n页,每页显示n条) 二 偏移分页(在第n个位置,向后查看n条数据) 三 CursorPagination(加密分页,只能看上一页和 ...

  2. 【牛客练习赛22 C】

    https://www.nowcoder.com/acm/contest/132/C 题目大意:在n个区间中取出n个数,相加的和一共会出现多少种结果. 题目分析:对于这种挑选数字相加,由于每一步不同的 ...

  3. 【HDOJ2586】【Tarjan离线求LCA】

    http://acm.hdu.edu.cn/showproblem.php?pid=2586 How far away ? Time Limit: 2000/1000 MS (Java/Others) ...

  4. windows server 2008 R2 部署NFS,实现多台服务器间、客户端间的共享目录。

    如何通过Windows Server 2008 R2建立NFS存储服务? 通过Windows Server 2008 R2,我们可以很容易地将其作为一台NFS存储服务器,得到一个NFS软存储,轻松解决 ...

  5. 命令提示符操作及Java的特点

    day1_3 命令提示符的操作 GUI 图形化方式(可视化) CLI 命令行方式 (编程方式) dir 列出当前目录下文件及文件夹 md 创建文件夹 rd 删除文件夹(只能删除空文件夹) cd 进入指 ...

  6. MySQL InnoDB Engine--缓冲器数据交换

    通常情况下,缓冲池无法将整个数据库所有数据都进行缓冲,而且不同数据的访问频率不一样,有些数据会被频繁访问,而有些数据可能数月不会被访问一次,因此数据库使用最近最少使用LRU latest Recent ...

  7. MySQL--数据库连接异常问题汇总

    ======================================================== Name or service not known 错误消息: [Warning] I ...

  8. Singer 学习十三 发现模式

    发现模式 发现模式提供了一种描述tap 支持数据流的方式,使用了json schema 做为描述数据的结构以及每个数据流的 类型,发现模式的实现依赖tap 的数据源,有些taps 将硬编码每个流的模式 ...

  9. ThreadLocal使用注意

    ThreadLocal<T>的出现是一种空间换时间的思想的运用,是为了多线程环境下单线程内变量共享的问题.它的原理就是每个线程通过ThreadLocal.ThreadLocalMap,保存 ...

  10. MySQL 有用的查询语句

    查看指定数据库 db_name 的字符集和排序规则 USE db_name; SELECT @@character_set_database, @@collation_database; 显示索引信息 ...