Map与Set

一、Set接口的特点
使用HashSet存储字符串并遍历
Set set = new HashSet();//父接口引用指向子类对象
//添加元素对象
set.add("hello");
set.add("world");
set.add("java");
//遍历集合对象
//Colleaction三种:转数组、迭代器、foreach,List有四种,由于List是有序的,多了一种索引,Set也是三种,Set没有索引
1.转数组

Object[] obj = set.toArray();
for(int i = 0; i < obj.length; i++){
System.out.println(obj[i]);
}
2.迭代器
Iterator it = set.iterator();
while(it.hasNext()){
String s = it.next();
System.out.println(s);
}
3. 增强for
for(String s : set){
System.out.println(s);
}
4.Set集合的特点:
(1)无序(存储和读取的顺序有可能不一样)
(2)不允许重复(要求元素唯一)
(3)没有索引,因为没有顺序
5.HashSet中add()方法不能去重的原因:
HashSet()的add()方法,首先会使用当前集合中的每个元素和新添加的元素进行hash值比较
如果hash值不一样,直接添加新的元素
如果hash值一样,比价地址值或者使用equals方法进行比较
比较结果一样,则认为是重复不添加
送油的比较结果不一样则添加。
由于创建自定义对象时,传的参数是地址值,每个地址值都不同,即使对象的属性一致,也会添加进LinkedList
6.重写hashCode()和equals()方法实现HashSet存储自定义对象去重
(1)根据新添加的元素的hashCode()返回值计算出hash值
(2)先比较hash值,hash值不一样if语句结束
(3)如果hash值一样,则比较地址或者使用equals方法进行比较
(4)由此可以看出先重写hashCode()使hash值一致,在重写equals()比较对象中属性值。
二、Collections
1.面试题:Collection和Collections的区别:
(1)Collection是集合体系的最顶层,包含了集合体系的共性
(2)Collections是一个工具类方法都是用于操作Collection
2.Collections的常用方法
(1)static int binarySearch(List list, Object key)//使用二分查找指定元素在指定列表的索引位置,List是有序的

List list = new ArrayList();
list.add(1); //JDK1.5特性自动装箱
list.add(2);
list.add(3);
list.add(4);
int index = Colleaction.binarySearch(list,4);
(2)static void copy(List dest, List src):把源列表的数据覆盖到目标列表

List src = https://www.it610.com/article/new ArrayList();
src.add("hello");
src.add("world");
src.add("java");
List dest = new ArrayList();
dest.add("");
dest.add("");
dest.add("");
Collections.copy(dest,src);
注意:目标列表的长度至少等于源列表的长度
(3)static void fill(List list, Object obj):使用指定对象填充指定列表的所有元素
List list = new ArrayList();
list.add("hello");
list.add("world");
list.add("java");
Colleactions.fill(list,"android");
(4)static void reverse(List list)
List list = new ArrayList();
list.add("hello");
list.add("world");
list.add("java");
Colleactions.reverse(list);
(5)static void shuffle(List list):使用指定的随机源对指定列表进行置换
(6)static void sort(List list):根据元素的自然顺序对指定列表按升序进行排序。
(7)static void swap(List list, int i, int j):在指定列表的指定位置处交换元素。
三、Map接口
为了提现有对应关系的数据,Java提供了一种专门用于存储对应关系的集合。
Map:将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值
1.Map和Collection 的区别
Map:是一个双列集合,常用语处理有对应关系的数据,key是不可以重复的,称之为夫妻集合
Colleaction:是单列集合,Collection有不同的字体系,有的允许重复有索引有序,有的不允许重复且无序,称之为单身汉集合
2.Map的常用功能:
Map map = new HashMap();
(1)映射功能:
V put (K key,V value)//就是将key映射到value,如果key存在,则覆盖value,并将原来的value返回
System.out.println(map.put("001","zhangsan"));
System.out.println(map.put("001","wangwu"));
输出:nullzhangsan
(2)获取功能:
V get(Object key)
Set keySet()
Collection values()
int size()
System.out.println(map.size()); //返回对应关系的个数
输出结果:2
System.out.println(map.get("001")); //根据指定的key返回对应的value
map.put("001","zhangsan");
map.put("002","lisi");
(map.put("003","wangwu"));
Set keys = map.keySet();
for(String key : keys){
System.out.println(key);
}
输出结果:001
002
003
map.put("001","zhangsan");
map.put("002","lisi");
(map.put("003","lisi"));
Colleaction values = map.values();
for(String value : values){
System.out.println(value);
}
输出结果:zhangsan
lisi
lisi
(3)判断功能
boolean containsKey(Object key)
boolean containsValue(Object value)
boolean isEmpty()
System.out.println(map.containsKey("001"));
输出结果:true
System.out.println(map.containsVaule("zhangsan"));
输出结果:false
System.out.println(map.isEmpty());
输出结果:false
(4)删除功能
void clear()

v remove(Object key)
map.clear(); //清空所有的对应关系
System.out.println(map.remove("001")); //根据指定的key删除对应关系,并返回key所对应的值,如果没有删除成功返回null
输出结果:wangwu
(4)遍历功能:
Map的第一种遍历方式:
先找到所有的key,遍历所有的key,获取每一个key,去找key对应的value
map.put("001","zhangsan");
map.put("002","lisi");
(map.put("003","wangwu"));
Set keys = map.keySet();
for(String key : keys){
String value = https://www.it610.com/article/map.get(key);
}
Map的第二种遍历方式:
Set> entrySet()

【Map与Set】Entry是Map中的内部类
Set entrys = map.entrySet();
for(Map.Entry entry: entrys){
String key = entry.getKey();
String value = https://www.it610.com/article/entry.getValue();
}

    推荐阅读