集合

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. canvas的认识,时钟的设置

    canvas的三要素:ID标识,width宽度,height高度,他是行元素 IE9才支持canvas,canvas是一个透明的画板,要用js去画 绘制一个圆 线性渐变颜色 径向渐变 图片的绘制: 视 ...

  2. 《DSP using MATLAB》Problem 5.20

    窗外的知了叽叽喳喳叫个不停,屋里温度应该有30°,伏天的日子难过啊! 频率域的方法来计算圆周移位 代码: 子函数的 function y = cirshftf(x, m, N) %% -------- ...

  3. js添加select中option

    1.js代码 $("#year").append("<option value="+value的值+">"+内容+"& ...

  4. AangularJS过滤器详解

    (参考angular权威指南) 过滤器:   用来格式化需要展示给用户的数据: 使用过滤器的方式: (1)$scope.name=$filter("lowercase").(&qu ...

  5. Python知识点整理,基础4 - 集合操作

  6. 【BZOJ4817】【SDOI2017】树点染色

    不算学会lct...... 原题: Bob有一棵n个点的有根树,其中1号点是根节点.Bob在每个点上涂了颜色,并且每个点上的颜色不同.定义一条路 径的权值是:这条路径上的点(包括起点和终点)共有多少种 ...

  7. 【BZOJ1082】【SCOI2005】栅栏

    暴力出奇迹…… 原题: 农夫约翰打算建立一个栅栏将他的牧场给围起来,因此他需要一些特定规格的木材.于是农夫约翰到木材店购买木材.可是木材店老板说他这里只剩下少部分大规格的木板了.不过约翰可以购买这些木 ...

  8. itcast-spring-三大框架整合

    三大框架架构(整合原理) struts整合到spring   hibernate整合到spring 导包 eclipse需要导入   myeclipse不用 单独配置spring容器 单独配置stru ...

  9. 编写一个函数实现n^k,使用递归实现

    思路:例如2的3次方.可以分解为2乘2的2次方,而2的2次方又可以分解为2乘2的以此方法,以此类推. #include<stdio.h> int Find_num(int n,int k) ...

  10. try catch 用法实例