主要内容:HashSet集合、HashMap集合以及可变参数
1.HashSet集合类
HashSet是实现了Set接口的类,属于Set集合分支的一员,具备①去重②无序(存入集合的顺序和取出集合的顺序可能不一致)③无索引的特点。
HashSet的去重原理:
规则:将新添加的元素(add.(Object o)与集合中的元素逐一比较,如果哈希值不同(hashCode()方法)则添加元素,如果哈希值相同,再用equals()方法判断,因此如果要实现添加对象的去重效果,就需要重写hashCode()和equals()方法,否则就会根据根类Object中的hashCode()和equals()方法判断是否存入元素重复。
Collections:一个工具类,成员方法主要是对集合进行操作。
int binarySearch(List list, T key) :二分查找元素; 根据传入的元素,在指定的集合对象中查找是否有元素存在;
void copy(List dest, List src) :复制集合; 把src集合中的所以元素赋值到dest集合中;
注意:dest集合中的元素个数要大于或者等于src集合中的元素个数;
void fill(List list, T obj) :填充集合; 把传入的元素(obj)全部填充到指定的list集合中;
void reverse(List list):反转集合;把传入的集合对象中的元素反转;
void shuffle(List list) :傻否; 随机打乱list集合中元素的位置;
void swap(List list, int i, int j) :交换集合中的元素; 把集合中索引i位置的元素和索引j位置的元素交换;
void sort(List<T> list):根据列表中元素的自然顺序进行排序;
void swap(List list, int i, int j) :交换集合中的元素; 把集合中索引i位置的元素和索引j位置的元素交换;
2.HashMap集合类
Map集合是所有双列集合的根接口---->HashMap<K,V> K:键 V:值
HashMap类实现了Map接口,这是一个新的集合体系与Collection并列存在,所以它所存储元素的方式与Collection完全不同HashMap类存储的是一对值(键与值),一个键对应一个值,其中键不允许重复,值可以重复,键的去重原理与签名所说的HashSet去重原理是一样的,因此也需要类重写hashCode()和equals()方法。
常用方法:
映射功能:(添加)
V put(K key, V value) :向Map集合中添加元素,若添加的元素键有重复,则把原Value替换成为新的Value;
获取功能:
V get(Object key) :根据传入的键找对应的元素值;
int size() :获取Map集合中键值对的个数;
判断功能:
boolean containsKey(Object key) :判断集合中是否包含传入的键;
boolean containsValue(Object value) : 判断集合中是否包含传入的值;
boolean isEmpty() :判断集合是否为空;
删除功能:
void clear() :清空集合中的所有元素;
V remove(Object key) :根据传入的键删除对应的值,并返回删除的值;
Map集合的遍历方式:
第一种:KeySet()方法,将Key值存入Set集合,再用for增强语句遍历Key值结合get(key)方法获取value。
HashMap<String,String> hm = new HashMap<>();
//添加键值对
hm.put("郭靖", "黄蓉");
hm.put("杨过", "小龙女");
hm.put("令狐冲", "任盈盈");
Set<String> keySet = hm.keySet();//获取set集合,里面有所有的key(键)
//遍历键 集合
for (String key : keySet) {
//key 代表的是键
String value = hm.get(key);//通过key(键) 取出对应的value(值)
System.out.println(key+"="+value);
}
第二种:entrySet() 方法,将键值存入Entry对象中,在对Entry对象遍历获取Key和Value.(这种方法更符合面向对象的思想)。
HashMap<String,String> hm = new HashMap<>();
//添加键值对
hm.put("郭靖", "黄蓉");
hm.put("杨过", "小龙女");
hm.put("令狐冲", "任盈盈");
//获取一个Set集合,里面存入的都是Entry对象, 每个entry对象都有一个键(key)和一个值(value)
Set<Entry<String, String>> entrySet = hm.entrySet();
//遍历键 集合
for (Entry<String, String> entry : entrySet) { //遍历所有的entry对象
String key = entry.getKey(); //取出entry中的键
String value = entry.getValue();//取出entry中的值
}
本质:一个长度可变的数组(可以调用.length获取长度),当参数不确定的时候,类型明确,就用可变参数,在调用方法的时候更方便。
public static void main(String[] args) {
//这里调用可变参数的方法,不需要传入一个数组,直接往里面传入数据就可以,相对来说方便很多
int result = sum(1,2,3,4,5,6);
}
//可变参数:当参数不确定的时候,类型明确,arr就相当于是一个数组,这样写的好处是调用方法起来比较方便
public static int sum(int...arr) {
int sum = 0;
for (int i = 0; i < arr.length; i++) {
sum += arr[i];
}
return sum;
}