Java 集合框架_中
Set接口
特点:
【1】Set接口表示一个唯一、无序的容器(和添加顺序无关)
Set接口常用实现类有
HashSet
【1】HashSet是Set接口的实现类,底层数据结构是哈希表。
【2】HashSet是线程不安全的(不保证同步)

【3】根据哈希表的工作原理,请存储一个自定义对象到HashSet中。一定要实现hashCode方法和equals方法
【4】优点:添加、删除、查询效率高;缺点:无序
LinkedHashSet
【1】LinkedHashSet是Set接口的实现类,底层数据结构哈希表+链表哈。希表用于散列元素;链表用于维持添加顺序
【2】如果要添加自定义对象元素,也需要重写hashCode和equals方法。
TreeSet
【1】TreeSet 是Set接口的实现类,底层数据结构是二叉树
【2】TreeSet 存储的数据按照一定的规则存储。存储规则让数据表现出自然顺序。
【3】输出时按照一定的规则:左子树->根节点->右子树
特殊:【4】比较策略分两种:内部比较器和外部比较器
内部比较器
(1)当一个自定义对象实现Comparable并实现compareTo方法时,通过指定具体的比较策略,此时称为内部比较器。
(2)比较策略一般当前对象写在前面,待比较对象也在后面,比较结果默认升序
return this.getAge() - o.getAge() ; 如果想要降序,改变两个比较对象的位置即可
(3)也可以多种比较因素
@Override
public int compareTo(Student o) {
/*if(this.getAge()<o.getAge()) {
return -1;
}else if(this.getAge() == o.getAge()) {
return 0;
}else {
return 1;
}*/ // return this.getAge() - o.getAge() ; if(this.getAge()<o.getAge()) {
return -1;
}else if(this.getAge() == o.getAge()) {
return this.getName().compareTo(o.getName());
}else {
return 1;
}
}
外部比较器
(1)当实际开发过程中不知道添加元素的源代码、无权修改别人的代码,此时可以使用外部比较器。
(2)Comparator 位于java.util包中,定义了compare(o1,o2) 用于提供外部比较策略。TreeSet接受一个指定比较策略的构造方法,这些比较策略的实现类必须实现Comparator
(3)使用匿名内部类优化
public class Test02 {
public static void main(String[] args) {
TreeSet<String> set2 = new TreeSet<String>(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.length() - o2.length();
}
});
set2.add("banana");
set2.add("coco");
set2.add("apple");
set2.add("apple");
System.out.println(set2);
}
}
Java 集合框架_中的更多相关文章
- 浅入深出之Java集合框架(中)
Java中的集合框架(中) 由于Java中的集合框架的内容比较多,在这里分为三个部分介绍Java的集合框架,内容是从浅到深,如果已经有java基础的小伙伴可以直接跳到<浅入深出之Java集合框架 ...
- Java 集合框架_上
集合框架被设计成要满足以下几个目标. 该框架必须是高性能的.基本集合(动态数组,链表,树,哈希表)的实现也必须是高效的. 该框架允许不同类型的集合,以类似的方式工作,具有高度的互操作性. 对一个集合的 ...
- Java 集合框架_下
Map接口 特点: [1]Map接口称为键值对集合或者映射集合,其中的元素(entry)是以键值对(key-value)的形式存在. [2]Map 容器接口中提供了增.删.改.查的方式对集合进行操作. ...
- 浅入深出之Java集合框架(上)
Java中的集合框架(上) 由于Java中的集合框架的内容比较多,在这里分为三个部分介绍Java的集合框架,内容是从浅到深,如果已经有java基础的小伙伴可以直接跳到<浅入深出之Java集合框架 ...
- 浅入深出之Java集合框架(下)
Java中的集合框架(下) 由于Java中的集合框架的内容比较多,在这里分为三个部分介绍Java的集合框架,内容是从浅到深,哈哈这篇其实也还是基础,惊不惊喜意不意外 ̄▽ ̄ 写文真的好累,懒得写了.. ...
- Java集合框架之Set接口浅析
Java集合框架之Set接口浅析 一.java.util.Set接口综述: 这里只对Set接口做一简单综述,其具体实现类的分析,朋友们可关注我后续的博文 1.1Set接口简介 java.util.se ...
- Java集合框架中Map接口的使用
在我们常用的Java集合框架接口中,除了前面说过的Collection接口以及他的根接口List接口和Set接口的使用,Map接口也是一个经常使用的接口,和Collection接口不同,Map接口并不 ...
- Java集合框架中List接口的简单使用
Java集合框架可以简单的理解为一种放置对象的容器,和数学中的集合概念类似,Java中的集合可以存放一系列对象的引用,也可以看做是数组的提升,Java集合类是一种工具类,只有相同类型的对象引用才可以放 ...
- 【java集合框架源码剖析系列】java源码剖析之java集合中的折半插入排序算法
注:关于排序算法,博主写过[数据结构排序算法系列]数据结构八大排序算法,基本上把所有的排序算法都详细的讲解过,而之所以单独将java集合中的排序算法拿出来讲解,是因为在阿里巴巴内推面试的时候面试官问过 ...
随机推荐
- C# 获取外网IP和运营商和城市
/// <summary> /// 获取客户端外网IP,省份,城市,运营商 /// 2012年12月18日 15:07 /// </summary> public class ...
- Working Experience - WPF 中 DataGrid 控件的应用
问题: 添加控件后, 编辑单元格会出现异常 绑定 ItemsSource 属性后, 更新绑定对象的数据, UI 不刷新 如何显示控件中 ComboBox 类型 解决方法: 绑定 ItemsSource ...
- js选中select
function selected(id, val) { $('#' + id + ' option[value="' + val + '"]').attr('selected', ...
- PHP正则表达式,看这一篇就够啦!
前言 不知道你们有没有这个感觉,看正则表达式就像看天文数字一样,什么电话号码.邮箱的正则表达式,上网复制一下粘贴下来就搞定了.完全不知道这写的是什么玩意.后来我自己也想学一下,因为感觉用处还是挺大的. ...
- 剑指Offer的学习笔记(C#篇)-- 跳台阶
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果). 一 . 解题思路. 由题目可知,青蛙一次可以跳一阶或者两阶.假设台阶为 ...
- 笔记-JavaWeb学习之旅16
增强对象的功能 动态代理:在内存中形成代理类 实现步骤: 代理对象和真实对象实现相同的接口 代理对象 = Proxy.newProxyInstance(); 使用代理对象调用真实对象的方法 增强方法 ...
- mysql5.6数据库同步,单向双向同步问题
windows下MySQL5.6实现主从数据库同步数据 mysql5.6数据库同步,单向双向同步问题 一.单向同步 主数据库(mysql5.6)192.168.1.104 从数据库(mysql5. ...
- 解决java中按照数字大小来排序文件
我们想要输出(1.jpg.2.jpg.3.jpg.10.jpg.11.jpg.20.jpg.21.jpg.31.jpg) 突然看到网上一些写法 总结:既然自己按照定义的文件名规则来处理,也可以进行使用 ...
- python进阶05 常用问题库(1)json os os.path模块
python进阶05 常用问题库(1)json os os.path模块 一.json模块(数据交互) web开发和爬虫开发都离不开数据交互,web开发是做网站后台的,要跟网站前端进行数据交互 1.什 ...
- ruby Iconv.iconv编码方法
#定义一个UTF-8=>GBK的方法def encoding inStr Iconv.iconv("GBK","UTF-8",inStr)end#定 ...