Java集合——Set接口
1.定义
set中不允许放入重复的元素(元素相同时只取一个),使用equals()方法进行比较。如果返回true,两个对象的HashCode值也应该相等
2.方法
add():添加元素
remove():移除指定元素
.......
TreeSet中常用的方法:
first():返回第一个元素,last返回最后一个元素
lower():返回指定元素的上一个元素,higher():指定元素的下一个元素
pollFirst():获取并且移除第一个元素,pollLast():获取并且移除最后一个元素
SortedSet接口的subSet(a,b):返回指定区域的元素,范围为[a,b)
SortedSet接口的headSet(first,b):返回指定元素之前的所有元素,范围为[first,b);tailSet(b,end):返回指定元素后的所有元素,范围为[b,end]
3.常用实现类
HashSet:可以放入空值;向HashSet集合中传入元素时,HashSet会调用该对象的HashCode方法获取Hash值,然后决定存储位置(无序)
LinkedHashSet:HashSet的子类,不允许重复的值,使用HashCode确定在集合中的位置,使用链表的方式确定位置(有序,按照输入的顺序输出)
TreeSet:1.默认情况下,直接使用TreeSet无参构造器创建Set的对象,在其中放入元素时,必须实现Comparable接口(用于排序),按照compareTo方法排序;
2.若创建TreeSet对象时,传入了一个实现Comparator接口的类,则TreeSet使用Comparator接口的compare方法排序.此时集合中的元素无需实现
Comparable接口;如果放入了实现Comparable接口的元素,以Comparator为标准
注:<1>Object类提供的toString方法总是返回该对象实现类的类名+@+hashCode(16进制数)值,可以通过重写toString方法来输出自己希望的形式。
<2>如果把一个对象放入HashSet中时,如果重写该对象equals()方法,也应该重写其hashCode()方法。
4.实例
import static org.junit.Assert.*;
import java.util.Comparator;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.TreeSet;
import org.junit.Test;
public class SetTest {
@Test
// HashSet实现类可以放入空值;向HashSet集合中传入元素时,HashSet会调用该对象的HashCode方法获取Hash值,然后决定存储位置(无序)
public void testHashSet() {
Set c1=new HashSet();
c1.add(new Customer(1,"AAA"));
c1.add(new Customer(1,"AAA"));
c1.add(new Customer(2,"AAA"));
c1.add(null);
System.out.println(c1.size());
for(Object c:c1){
System.out.println(c);
}
}

@Test
//linkedHashSet是HashSet的子类,不允许重复的值,使用HashCode确定在集合中的位置,使用链表的方式确定位置(有序,按照输入的顺序输出)
public void testLinkedHashSet(){
Set c2=new LinkedHashSet();
c2.add(new Customer(1,"AAA"));
c2.add(new Customer(3,"CCC"));
c2.add(new Customer(2,"BBB"));
for(Object c:c2){
System.out.println(c);
}
}

@Test
/* TreeSet内部排序:
默认情况下,直接使用TreeSet无参构造器创建Set的对象,在其中放入元素时,必须实现Comparable接口(用于排序),按照compareTo方法排序*/
public void testTreeSet1(){
TreeSet c3=new TreeSet();
c3.add(new Customer(1,"AAA"));
c3.add(new Customer(3,"CCC"));
c3.add(new Customer(2,"BBB"));
Customer c31=new Customer(4,"DDD");
c3.add(c31);
for(Object c:c3){
System.out.println(c);
}
Object obj;
//first返回第一个元素,last返回最后一个元素
obj=c3.first();
System.out.println(obj);
//lower返回指定元素的上一个元素,higher指定元素的下一个元素
obj=c3.lower(c31);
System.out.println(obj);
//SortedSet接口的subSet方法返回指定区域的元素,范围是[a,b)
Set c32=c3.subSet(c3.first(), c31);
System.out.println(c32);
//SortedSet接口的headSet方法返回指定元素之前的所有元素,范围为[first,b);tailSet返回指定元素后的所有元素,范围为[b,end]
obj=c3.headSet(c31);
System.out.println(obj);
}

@Test
/*TreeSet内部排序:
若创建TreeSet对象时,传入了一个实现Comparator接口的类,则TreeSet使用Comparator接口的compare方法排序。此时集合中的元素无需实现Comparable接口;
如果同时放入了实现Comparable接口的元素,以Comparator为标准。*/
public void testTreeSet2(){
Comparator comparator=new CustomerComparator();
TreeSet c4=new TreeSet(comparator);
c4.add(new Customer(1,"AAA"));
c4.add(new Customer(3,"CCC"));
c4.add(new Customer(2,"BBB"));
Customer c41=new Customer(4,"DDD");
c4.add(c41);
for(Object c:c4){
System.out.println(c);
}
}
}
涉及的完整代码:http://www.cnblogs.com/jfl-xx/p/4707643.html
Java集合——Set接口的更多相关文章
- Java集合Map接口与Map.Entry学习
Java集合Map接口与Map.Entry学习 Map接口不是Collection接口的继承.Map接口用于维护键/值对(key/value pairs).该接口描述了从不重复的键到值的映射. (1) ...
- java集合类型接口和实现类个人总结
转载:http://blog.csdn.net/qingchunbusanchang/article/details/39576749 java的集合是一个比较综合的概念,相关的知识有很多的博客里面做 ...
- JAVA集合--Iterator接口
本文首发于cartoon的博客 转载请注明出处:https://cartoonyu.github.io/cartoon-blog 上一篇文章中我在集合元素的遍历中已经有涉及到I ...
- JAVA集合--Collection接口
本文首发于cartoon的博客 转载请注明出处:https://cartoonyu.github.io/cartoon-blog 在概述里面也说过:Collection是jav ...
- java集合——Collection接口
Collection是Set,List接口的父类接口,用于存储集合类型的数据. 2.方法 int size():返回集合的长度 void clear():清除集合里的所有元素,将集合长度变为0 Ite ...
- Java集合——Map接口
1.定义 Map用于保存存在映射关系<key,value>的数据.其中,key值不能重复(使用equals()方法比较),value值可以重复 2.方法 V put(key,value) ...
- Java集合——List接口
1.定义 List是Collection的子接口,元素有序并且可以重复,表示线性表. 2.方法 add(int index,Object e):在指定索引(和数组下标类似,为0,1,2....)放入元 ...
- Java 集合-List接口和三个子类实现
List List:有序的 collection(也称为序列).此接口的用户可以对列表中每个元素的插入位置进行精确地控制.用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素.与 ...
- Java 集合-Collection接口和迭代器的实现
2017-10-30 00:30:48 Collection接口 Collection 层次结构 中的根接口.Collection 表示一组对象,这些对象也称为 collection 的元素.一些 c ...
随机推荐
- python_way day17 html-day3 前端插件(fontawsome,easyui,bootstrap,jqueryui,bxslider,jquerylazyload),web框架
python_way day17 一.模板插件 图标的插件 fontawsome: 后台管理: easyui jqueryui 很多网站都会用: bootstrap :引入jQuery:(2.x,1. ...
- HDU 1247 Hat's Words (map+string)
Hat’s Words Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tota ...
- git学习笔记07-冲突了怎么办-那就解决冲突呗
比如一个人自己创建了分支feature1进行修改提交之后提交,另一个人在master上修改然后提交. master分支和feature1分支各自都分别有新的提交,变成了这样: 这种情况下,Git无法执 ...
- 浅谈Android手机木马手工查杀
这篇文章主要是浅谈,所以会从简单方面开始讲起. 关于手机木马查杀,有些人会说安装手机杀毒软件不就解决了吗? 其实不然.因为手机和PC不一样,手机反木马技术没有PC端那么强. 就算你把目前市面上的所有手 ...
- poj1434Fill the Cisterns!(二分)
链接 题目说给你n个水箱,初始是没有水的,每个的高低位置可能不同,给了你初始的水箱底部所处的水平线位置,问给你V体积水时,水的水平线位置. 直接二分位置p,对于每一个底部低于水平线位置的水箱,里面的水 ...
- String.join()方法的使用
String.join()方法是JDK1.8之后新增的一个静态方法,使用方式如下所示: String result = String.join("-","java&qu ...
- date 笔记
1 语法 # date --help 用法:date [选项]... [+格式] 或:date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]] 1.1 ...
- aliyun CentOS6.5 上 svn 安装笔记
为了方便管理自己的一些学习资料.总结等,在CentOS6.5上安装SVN,记录过程如下: 1.1 安装方式 独立服务器 fsfs SVN服务器有2种运行方式:独立安装.SVN+Apache.独立 ...
- hiho_99_骑士问题
题目大意 给定国际象棋8x8棋盘上三个起始点,三个骑士分别从三个起始点开始移动(骑士只能走日字,且骑士从任意一点出发可以走遍整个棋盘).现要求三个骑士汇聚到棋盘上某个点,且使得骑士到达该点所移动的次数 ...
- MYSQL 【汇总数据】 【分组数据】 学习记录
分组数据 1,创建分组: