廖雪峰Java5集合-4Set-1使用Set
集合
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的更多相关文章
- 廖雪峰Java5集合-3Map-1使用Map
廖雪峰的视频不全,以下是疯狂Java关于Map的讲解 1.Map定义 Map是一种键值映射表,可以通过key快速查找value,同python的dict.key不允许重复,value可以重复. Map ...
- 廖雪峰Java5集合-1Java集合简介-1Java结合简介
1.集合 定义:集合就是一堆东西.集合里的东西,称为元素Element 数学中的集合: 有限集合: * 一个班所有的学生组成的集合 * 一个网站所有的商品组成的集合 无限集合: * 全体自然数集合 * ...
- 廖雪峰Java5集合-6Stack-1使用Stack
1.栈的定义 栈Stack是一种后进先出(LIFO: Last In First Out)的数据结构,可以看作一端封闭的容器,先进去的元素永远在底部,最后出来. 栈有2个重要的方法: push(E e ...
- 廖雪峰Java5集合-3Map-Properties的使用
Properties用于读取配置 properties文件只能使用ASCII码 #表示注释 可以从文件系统读取.properties文件 Properties props = new Properti ...
- 廖雪峰Java5集合-2List-2编写equals方法
List是一种有序链表: List内部按照放入元素的先后顺序存放 每个元素都可以通过索引确定自己的位置 boolean contains(Object o) 是否包含某个元素 int indexOf( ...
- 廖雪峰Java5集合-2List-1使用List
1.List定义 List是一种有序链表: List内部按照元素的先后顺序存放 每个元素都可以通过索引确定自己的位置 类似数组,但大小可变 //List<E>是一种有序链表: //* Li ...
- 廖雪峰Java5Java集合-5Queue-1使用Queue
Queue特性和基本方法 Queue实现一个先进先出(FIFO, First In First Out)的队列.如收银台排队支付. Java中LinkedList实现了Queue接口,可以直接把Lin ...
- 爬取廖雪峰的python3教程
从廖雪峰老师的python教程入门的,最近在看python爬虫,入手了一下 代码比较low,没有用到多线程和ip代理池 然后呢,由于robots.txt的限定,构建了一些user-agent,并放慢的 ...
- 廖雪峰Java6 IO编程-2input和output-4Filter模式
1.JDK提供的InputStream分为两类: 直接提供数据的InputStream * FileInputStream:从文件读取 * ServletInputStream:从HTTP请求读取数据 ...
随机推荐
- oracle 数据库备份、还原、和使用心得(表丢失、视图丢失的解决办法)
一.oracle数据备份:exp 关键字 说明(默认值) 关键字 说明(默认值) --------------------------------- ...
- hdu4424 Conquer a New Region 并查集/类似最小生成树
The wheel of the history rolling forward, our king conquered a new region in a distant continent.The ...
- 【BZOJ2019】nim
直播写题这刺激233 原题: 著名游戏设计师vfleaking,最近迷上了Nim.普通的Nim游戏为:两个人进行游戏,N堆石子,每回合可以取其中某一堆的任意多个,可以取完,但不可以不取.谁不能取谁输. ...
- redis源码之压缩列表ziplist
压缩列表ziplist1.简介连续,无序的数据结构.压缩列表是 Redis 为了节约内存而开发的, 由一系列特殊编码的连续内存块组成的顺序型(sequential)数据结构. 2.组成 属性 类型 长 ...
- Python——scapy模块实现tcp探测目标服务器路由轨迹
scapy模块的安装 484 yum install tcpdump graphviz ImageMagick -y 485 wget http://www.secdev.org/projects ...
- idea新建工程项目结构
一:新建项目 File--->new---->project--->Empt Project(空项目)--->next--->java_web--->Finish ...
- MySQL--使用innodb_force_recovery修复数据库异常
当MySQL服务异常重启失败后,可以通过配置参数innodb_force_recovery来对MySQL服务进行修复启动. 参数innodb_force_recovery选项: 1 (SRV_FORC ...
- 互换元素(swap,swap_ranges)
swap template <class Assignable> void swap(Assignable &a,Assignable &b); iter_swap tem ...
- Docker网络解决方案-Flannel(转)
转自https://www.cnblogs.com/kevingrace/p/6859114.html Docker跨主机容器间网络通信实现的工具有Pipework.Flannel.Weave.Ope ...
- mysql之 redo log
重做日志(redo log) 前言:之前一直弄不清楚 mysql 里面 bin log 和 innodb log 文件的区别,在脑子里面一直有个疑问 binlog 日志文件已经可以用来进行数据库的日志 ...