Java学习day17
来源:互联网 发布:程序员入门基础 编辑:程序博客网 时间:2024/05/19 06:15
一 Set接口
(1)Set的特点:元素无序,唯一。
注意:这里的顺序是指存储和取出顺序。
set接口有两个实现类:HashSet和TreeSet
二 HashSet类
(1)HashSet:不保证元素的迭代顺序。并且,不保证该顺序恒久不变。(2) HashSet底层数据结构是哈希表。
它依赖两个方法:hashCode()和equals()
顺序:
首先,判断hashCode()值是否相同。
相同:
继续走equals()方法,根据其返回值:
true:说明元素重复,不添加到集合。
false:说明元素不重复,添加到集合。
不同:直接添加到集合。
(3)怎么重写hashCode()和equals()方法呢?
hashCode():
把对象的所有成员变量值相加即可。
如果是基本类型,就加值。如果是引用类型,就加哈希值。
equals():
A:this==obj //判断是否是同一个对象
B:!(obj instanceof Student) //判断传进来的对象是否在此类中
C:强转,所有成员变量的值比较。基本类型用==,引用类型用equals()。
三 TreeSet类
(1)TreeSet:根据构造方法的不用,选择使用自然排序或者比较器排序。按照实际的需求,可以对元素进行排序。并且保证唯一。
(2)怎么保证的呢?
排序:底层结构是二叉树。按照树节点进行存储和取出。
两种实现:
A:自然排序(元素具备比较性)
TreeSet的无参构造,要求对象所属的类实现Comparable接口。
B:比较器排序(集合具备比较性)
TreeSet的带参构造,要求构造方法接收一个实现了Comparator接口的对象。
唯一:根据返回值是否为0。
四 Collection体现的集合总结
Collection|--List
|--ArrayList
底层数据结构是数组,查询快,增删慢
线程不安全,效率高。
|--LinkedList
底层数据结构是链表,查询慢,增删快
线程不安全,效率高。
|--Vector
底层数据结构是数组,查询快,增删慢
线程安全,效率低。
|--Set 唯一
|--HashSet
底层数据结构是哈希表。
如何保证元素唯一性呢?
依赖两个方法。hashCode()和equals()。
以后都自动生成。
|--TreeSet
底层数据结构是二叉树。
如何保证元素唯一性呢?如何保证元素排序呢?
根据返回值是否是0,判断元素是否重复。
排序有两种方案:
元素具备比较性 实现Comparable接口
集合具备比较性 实现Comparator接口
五 在集合中的数据结构问题
ArrayXxx:底层数据结构是数组。查询快,增删慢。LinkedXxx:底层数据结构是链表。查询慢,增删快。
HashXxx:底层数据结构是哈希表。跟两个有关。hashCode()和equals()
TreeXxx:底层数据结构是二叉树。两种排序方式。Comparable接口和Comparator接口
六 使用集合总结
什么时候,使用哪种Collection集合。
元素唯一吗?唯一:
Set
需要排序吗?
需要:TreeSet
不需要:HashSet
不知道,用HashSet。
不唯一:
List
需要安全码?
需要:Vector
不需要:ArrayList和LinkedList
查询多:ArrayList
增删多;LinkedList
七 Collections工具类
(1)Collections是针对Collection集合操作的工具类。(2)Collections类用于对list集合进行操作的功能:
排序:
public static void sort(List list)
二分查找:
public static <T> int binarySearch(List list,T key)
反转:
public static void reverse(List list)
最大值:
public static T max(Collection coll)
随机置换:
public static void shuffle(List list)
0 0
- Java学习day17
- java学习day17
- 传智播客-Java学习笔记day17
- HashSet、LinkedHashSet、TreeSet+JAVA学习笔记-DAY17
- Day17毕向东java学习笔记-Collections 的使用。
- 传智播客学习日记Day17
- day17/ArraysDemo1.java
- day17/CollectionsDemo1.java
- day17/CollectionsDemo2.java
- day17/CollectionsDemo3.java
- day17/CollectionsDemo4.java
- day17/CollectionToArray.java
- day17/ForEachDemo.java
- day17/ParameterMethodDemo.java
- day17/StaticImport.java
- [Java视频笔记]day17
- day17
- day17
- Docker 传奇之 dotCloud
- 数据结构-线性结构-堆栈
- 隐藏基类成员
- Github.com快捷键操作
- maya2014中uvlayout2.08安装
- Java学习day17
- 基类里不具体实现,派生类中重写实现功能
- (六)抽象工厂模式
- cocos2dx-v3.0命令行创建工程
- 光流法
- maven如何打包源代码
- 简单库函数的实现
- Quartz Spring 报错!自动注解! Couldn't retrieve trigger: ORA-00942: 表或视图不存在
- 网络流 -- Shooting Contest(二分匹配)