本帖最后由 丶唯萌Pro 于 2017-10-24 23:01 编辑
Set
使用HashSet存储字符串并遍历
创建集合对象
添加元素对象
遍历集合对象
Set集合的特点:
无序(存储和读取的顺序有可能不一样)
唯一(不允许重复)
没有索引
使用HashSet存储自定义对象并遍历
创建集合对象
创建元素对象
添加元素对象
遍历集合对象
通过查看源码发现:
HashSet的add()方法,首先会使用当前集合中的每一个元素和新添加的
元素进行hash值比较,如果hash值一样,比较地址和值或者使用equals方法
进行比较,比较结果一样,则认为是重复不添加
所有比较结果都不一样则添加
创建Person类
给set/get方法,有参,无参构造
重写toString方法
重写hashcode以及equals方法
//我们发现,当hashCode方法永远返回整数1时,所有对象的hash值都是一样的
有一些对象他的成员变量完全不同,但是他们还需要进行hash和equals方法比较
如果我们可以让成员变量不同的对象,他们的hash值也不同,这就可以减少一部分
equals方法的比较从而可以提高我们程序的效率
可以尝试这让hashCode方法的返回值和对象的成员变量有关
可以让hashcode返回所有成员变量之和,让基本数据类型直接
相加然后引用数据类型获取hashcode方法返回值后在相加
//就是说当我们的hashcode相同时,我们在让其使用equals判断是否是相同的元素
Collection:
面试题:
Collection和Collections
Collection:是集合体系的最顶层,包含了集合体系的共性,List和Set
Collections:是一个工具类,方法用于操作Collection
Collections工具类:
static intbinarySearch(List list,Object key):二分查找法查找指定元素在指定列表的索引位置
//创建一个List对象
static void copy(List dest,List src):是把源列表中的数据覆盖到目标列表
//目标列表的长度至少等于源列表的长度
//创建源列表
//创建目标列表
static void fill(List list,Object obj):使用指定的对象填充指定列表的所有元素
static void reverse(List<?> list):反转
static void shuffle(List list):随机置换
static void sort(List<T> list):按照列表中数据 的自然顺序进行排序
static void swap(List list,int i,int j):将指定列表中的索引进行位置互换
Map接口的概述:
需求:实现学号和姓名这样有对应关系的数据存储
为了体现这种有对应关系的数据,我们使用以前所学的内容是可以实现的,
但是略有不变,所以java又给我们提供了一种专门用于存储对应关系的集合,Map
Map:将键映射到值的对象,一个映射不能包含重复的键;每个键最多只能映射到一个值
Map和Collection有什么区别?
Map:是一个双列集合,常用于处理有对应的数据,Key是不可以重复的,我们也称之为夫妻对集合
Collection:是单列集合,Collection有不同的子体系,有的允许重复有索引有序,有的不允许重复而且无序,那么我们也称之为单身汉集合
一对一:一个学号对应一个姓名
Map的常用功能;
Map的常用功能:
映射功能:
V put(K key, V value)
获取功能:
V get(Object key)
int size()
判断功能:
boolean containsKey(Object key)
boolean containsValue(Object value)
boolean isEmpty()
删除功能:
void clear()
V remove(Object key)
遍历功能:
Set<Map.Entry<K,V>> entrySet()
Set<K> keySet()
Collection<V> values()
map获取所有d的key或者values
Set<K> keySet()
Collection<V> vlaues()
遍历Map:
第一种方式:
//获取所有的key
Set<String> keys = map.keySet();
for(String key : keys){
//根据key去获取value
String value = map.get(key);
}
第二种方式:
使用entrySet()
使用HashMap存储数据并遍历(字符串做为key)
使用HashMap存储数据并遍历(自定义对象做为key):
步骤:
创建map对象
创建key对象
添加映射关系
遍历map对象
需求:定义一个方法,参数为两个int类型的变量,对参数求和并返回
定义一个方法,参数为三个int类型的变量,对参数求和并返回
。。。
JDK1.5特性:可变参数:
当参数不确定时,类型要明确,java可以把多个参数直接帮我们转成数组
实参:一个参数一个参数的传递
形参:类型...变量名
注意:在可变参数的后面不能追加参数
参数的数量自定义,可以给多个,也可以一个也不给。
|
|