黑马程序员_集合体系(二)
来源:互联网 发布:携程大数据分析笔试题 编辑:程序博客网 时间:2024/06/06 03:59
一.set集合
特点:元素无序,唯一.
目前所学它有2个子类,HashSet和TreeSet
(1) HashSet存储自定义对象并遍历
结果是有重复的,那么如何保证元素唯一型呢>
由于HashSet的底层是哈希表,通过分析我们发现是add方法出问题了,并且跟以下这个判断有关
e.hash == hash && ((k = e.key) == key || key.equals(k))..
只用重写HashCode方法和equals方法,才能保证元素唯一,
HashSet存储字符串,并遍历,输入的元素是无序,和唯一的,
(2)TreeSet存储自定义对象并遍历,如何保证元素唯一型呢
因TreeSet的底层结构是二叉树,
Treeset是如何存储数据的呢?
A:第一个添加的数据作为根节点
B:从第二个开始: 每一个数据从根节点开始比较. 如果大了,往右边放
如果小了,往左边放
如果相同了,就替换
从二叉树结构中取数据的内存规则
原则:从根结点开始.按照数据的 左,中 ,右原则
有两种方式:A:自然排序 让对象所属的类去实现Comparable接口。无参构造
并重写接口中的compareTo方法。
根据返回值:
正数:元素比以前的大.放后面(正序)
负数:元素比以前的小,放前面(倒序)
0 :元素不添加到集合中, 就只有一个
B:比较器接口 Comparator。带参构造。
public int compare( ) return num;
{ //需求是比较姓名的长度
int num = this.name.length() - s.name.length() ;
//很多时候,别人给我们的需求其实只是一个主要需求
//还有很多的次要需求是需要我们自己进行分析的。
//比较姓名的内容
int num2 = ( num == 0 ) ? ( this.name.compareTo( s.name ) ) : num ;
//继续分析,姓名长度和内容都相同的情况下,年龄还可能不一样呢。
//所以,当姓名长度和内容都相同的时候,我们在比较下年龄就好了。
int num3 = ( num2 == 0 ) ? ( this.age - s.age ) : num3 ;
return num3;
}
二.Collections工具类的使用
Collection和Collections的区别?
A:Collection 是一个集合的顶层的接口,定义集合的共性方法
B:Collections,是一个工具类,针对集合操作的功能排序,查找,反转.定义对象用ArrayList.
功能:
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 )
随机置换
三.Map接口概述
Map优点:最大的优点其实就是体现了对应关系,一对儿一对儿的
Map集合是键值对形式的,它的数据不能是单个的,必须同时存在有键和值。
Map和Collection的区别?
Map:是双列集合,键必须是唯一的,值可以重复 可以看成是幸福的集合。
Collection:是单列集合,它的第一个儿子List可以存储重复元素,它的小儿子Set,元素唯一,
单身集合
Map集合中的具体实现类的数据结构,是针对键有效.
功能:
A:增加功能。
V put(K key, V value)
当key在集合中不存在时,直接添加键值对儿,返回null
当key在集合中存在时,根据键 替换指定键值对儿,返回被替换的值 也就是value
B:删除功能。
void clear()
清空集合中所有的元素
V remove( Object key )
删除指定的键 所对应的键值对儿 返回的是删除的键值对的值
如果要删除的键不存在的话,返回null
C:判断功能。
boolean containsKey( Object key )
判断指定的键在集合中是否存在.
boolean containsValue( Object value )
判断指定的值在集合中是否存在
boolean isEmpty()
判断集合是否为空
D:获取功能。
Set<Map.Entry<K,V>> entrySet()
获取键值对 对象的集合
Object get( Object key )
根据键获取值
Set<K> keySet():
获取键值对集合中键的集合
Collection<V> values()
获取键值对集合中值的集合
E:长度功能。
int size()
获取集合键值对的个数。
Map集合遍历方式有2种
第一种:思路:键找值
A:获取键的集合, Set<K> keySet()
B:遍历键的集合,获取到每一个键,用增强for遍历
C:在遍历的过程中让键找值, 用 Object get(Object ket)
第二种:通过entryset 键值对对象
A:获取所有结婚证.Set<Map.entry<k.v>> 通过entry()方法获取到键值对对象,.
B:遍历键值对对象, 获取键值对对象
C:通过键值对对象调用getkey().getvalue()方法来获取键或值
HashMap和Hashtable的区别
Hashtable<K,V>从JDK1开始.不同布,效率低,安全,不允许使用null键和值
HashMap<K,V>从JDK1.3开始,效率高.不安全,允许使用Null键和值
HashMap存储自定义对象并遍历(用自定义对象做键)
要重写 hashCode()方法和equals()方法.是为了保证键的唯一性.
TreeMap存储自定义对象并遍历(自定义对象做键)
如果一个自定义对象做键,用TreeMap遍历
就必须要首先自己排序,有2种方式
实现排序方式一:让自定对象所属的类去实现Comparable接口
实现排序方式二:使用带参构造方法创建TreeMap,接收Comparator接口参数
TreeMap tm = new TreeMap(new Comparator(){
public int accept(对象1, 对象2)
int num = 对象1-对象2;正序 ----对象2-对象1 为倒序
return num;}
- 黑马程序员_集合体系(二)
- 黑马程序员_集合体系(一)
- 黑马程序员-集合体系
- 黑马程序员 集合体系
- 黑马程序员_集合框架(二)
- 黑马程序员_集合框架(二)
- 黑马程序员_集合(二)_Map
- 黑马程序员_集合(二)_Map
- 黑马程序员_集合框架(二)
- 黑马程序员_集合框架(二)
- 黑马程序员_异常体系
- 黑马程序员_异常体系
- 黑马程序员-集合体系汇总
- 黑马程序员--集合框架体系
- 黑马程序员_9_集合体系
- 黑马程序员_学习日记七_集合二
- 黑马程序员_集合
- 黑马程序员_集合
- Valid Parentheses (栈的符号匹配)
- android-pulltorefresh 下拉加载中使用gif动图
- Android数据库步骤
- 乘法表c代码
- Socket使用TCP/IP如何实现通信
- 黑马程序员_集合体系(二)
- Objective-c开发教程--如何在项目中使用AFNetworking
- [黑马程序员]——Java线程
- 正则表达式
- R语言ggplot2包之画折线图
- mysql + unidac 使用事务例子
- DBUtils – BeanProcessor扩展,支持自定义字段映射
- Exe4j破解_Exe4j注册码
- 黑马程序员——Java基础---Collections,Arrays工具类以及其他对象