1、Set集合的特点:
(1)无序(存储和读取的顺序有肯不一样);
(2)不允许重复(要求元素唯一);
(3)没有索引
2、HashSet有三种遍历集合对象的方式:
(1)转换成数组;
(2)迭代器;
(3)增强for
例:
package com.itheima;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class HashSetDemo {
public static void main(String[] args) {
//创建集合对象
//HashSet<String> hs=new HashSet<String>();
Set<String> set=new HashSet<String>();//父接口引用指向指向子类对象
//添加元素对象
set.add("hello");
set.add("world");
set.add("java");
//遍历集合对象
//method(set);
//method1(set);
for(String s:set) {
System.out.println(s);
}
}
public static void method1(Set<String> set) {
//迭代器
Iterator<String> it=set.iterator();
while(it.hasNext()) {
String s=it.next();
System.out.println(s);
}
}
public static void method(Set<String> set) {
//转换成数组
Object[] obj=set.toArray();
for(int i =0;i<obj.length;i++) {
System.out.println(obj[i]);
}
}
}
3、HashSet的add()方法的去重功能:
(1)当前集合中的每一个元素和新添加的元素进行hash值比较;
(2)如果hash值不一样,则直接添加新元素;如果hash值一样,则比较地址值或者使用equals方法进行比较;
(3)如果比较的结果一样,则认为是重复不添加;如果比较的结果不一样,则添加
以Person类为例:
@Override
public String toString() {
return "Person [name=" + name + ", age="+ age + "]";
}
@Override
public int hashCode() {
return age+name.hashCode();
}
@Override
public boolean equals(Object obj) {
System.out.println("---------");
//提高效率
if(this==obj) {
return true;
}
if(this.getClass()!=obj.getClass()) {
return false;
}
//向下转型
Person p=(Person)obj;
if(!this.name.equals(p.name)) {
return false;
}
if(this.age!=p.age) {
return false;
}
return true;
}
注意:
去重中提高程序效率的方法:
让成员变量不同的对象,他们的返回值也不同,即让HashCode()方法的返回值和对象的成员变量有关,可以让HashCode()方法返回所有成员变量之和(基本数
据类型直接相加;引用数据类型获取HashCode()方法返回值后再相加(boolean不可以参与运算))
4、Collection和Collections的区别:
(1)Collection是集合体系的最顶层,包含了集合体系的共性;
(2)Collections是一个工具类,方法都是用于操作Collection
Collections中的一些基本操作:
(1)static void swap(List list,int i,int j):将指定列表中的两个索引进行位置互换;
(2)static void sort(List<T> list):按照列表中元素的自然顺序进行排序;
(3)static void shuffle(List list):随机置换;
(4)static void reverse(List list):反转;
(5)static void fill(List list,Object obj):使用指定的对象填充指定列表的所有元素;
(6)static void copy(List dest,List src):把源列表中的数据覆盖到目标列表中;
(7)static void binarySearch(List list,Object key):使用二分查找法查找指定元素在指定列表的索引位置
5、Map:专门用于存储对应关系的集合
Map和Collection的区别:
(1) Map:是一个双列集合,常用于处理有对应关系的数据,其中key是不能重复的;
(2)Collection:是单列集合,有不同的子体系,有的允许重复索引,有序;有的不允许重复索引,无序
注意:
Map是将键映射到值的对象。一个映射不能包含重复的键,每个键最多只能映射到一个值(一对一关系)
Map的常用功能:
(1)V put(K key,V value):将key映射到value,如果key存在,则覆盖value,并将原来的value返回;
(2)void clear():清空所有的对应关系;
(3)V remove(Object key):根据指定的key删除对应关系,并返回key所对应的值,如果没有删除成功,则返回null;
(4)boolean containsKey(Object key):判断指定key是否存在;
(5)boolean containsValue(Object value):判断指定value是否存在;
(6)boolean isEmpty():判断是否有对应关系;
(7)int size():返回对应关系的个数;
(8)V get(Object key):根据指定的key返回对应的value;
(9)Collection<V> values():以collection的形式返回所有的value;
(10)Set<K> keySet():以set的形式返回所有的key
遍历Map的两种方式:
例:
(1)遍历Map对象(第一种方式)
Set<String> keys=map.keySet();
for(String key:keys) {
String value=map.get(key);
System.out.println("编号:"+key+"姓名:"+value);
(2)遍历Map对象(第二种方式)
Set<Map.Entry<String, String>> entrys=map.entrySet();
for(Map.Entry<String, String> entry:entrys) {
String key=entry.getKey();
String value=entry.getValue();
System.out.println("编号:"+key+"姓名:"+value);
注:HashMap的遍历和Map一样,并且可以实现去重,相同编号的后面会覆盖前面的