set接口
Set接口继承了Collection接口。
Set中所存储的元素是不重复的,但是是无序的, Set中的元素是没有索引的
● Set接口有两个实现类
● HashSet HashSet类中的元素不能重复元素是无序的(既不是添加顺序,也不是按元素的自然顺序)
向Hashset中添加元素时,是如何判断元素是否重复的
添加元素时 调用equals()判断, 效率低(一个一个字符判断)
底层用到hashCode() 和 equals() 方法
xsadasdsadsasa 用内容计算一个hash值(整数),用hash值比较速度快
但是hash是不安全,有可能内容不同,计算的hash值相同,
当hash相同时,调用equals()判断内容是否相等
这样既效率提高了 也保证安全
● TreeSet 可以给Set集合中的元素进行指定方式的排序。存储的对象必须实现Comparable接口底层是树形结构 有一个根节点, 每一个节点有两个子节点, 大的元素向右放,小的元素向左放
添加进来的元素可以排序 (有序的 不是添加的顺序,是元素的自然顺序)
实现
HashSet添加时,判断会调用类中hashCode()计算hash值, 类中,没有hashCode(),会调用父类中的hashCode()
Object类中的 public native int hashCode(); native本地方法(操作系统提供的)
所以只要是new出来的,调用Object类中hash值,是内存地址,肯定不相同
如果我们想要对象中的内容相等就判定为重复元素,就必须在我们的类中重写hashCOde() equals() 用对象中的内容来计算hash值
TreeSet<Integer> set = new TreeSet<>();
set.add(3);
set.clear();
set.size();
set.contains(1);
System.out.println(set.first());//删除并返回第一个元素
set.isEmpty();
set.remove(1);//删除指定内容的元素
System.out.println(set.pollLast());//删除并返回最后一个元素
Map接口:
lMap接口概述 将键映射到值的对象 一个映射不能包含重复的键 每个键最多只能映射到一个值
Map的常用方法
System.out.println(map.get("x"));//通过key获取到key对应的value
map.clear(); 删除所有的键值映射
System.out.println(map.remove("x"));删除键值映射,并返回改键对应的值
System.out.println(map.containsKey("x")); //判断键是否存在
System.out.println(map.containsValue("hh"));//判断值是否存在
System.out.println(map.isEmpty());//判断是否是空的
System.out.println(map.size());
Collection<String> values = map.values();
System.out.println(values);
Set<String> keys = map.keySet();
System.out.println(keys);
System.out.println(map);
● HashMap HashMap中元素的key值不能重复, 排列顺序是不固定的,可以存储一个 为null的键。 ● TreeMap TreeMap中所有的元素都保持着某种固定的顺序,如果需要得到一个有序 的Map就应该使用TreeMap,key值所在类必须实现Comparable接口。
● HashTable 实现了同步。 不能存储为null的键
Map集合遍历 l
方式1:根据键找值
• 获取所有键的集合
• 遍历键的集合,获取到每一个键
• 根据键找值 l
方式2:根据键值对对象找键和值
• 获取所有键值对对象的集合
• 遍历键值对对象的集合,获取到每一个键值对对象
• 根据键值对对象找键和值
● TreeMap 适用于按自然顺序或自定义顺序遍历键(key)。
TreeMap根据key值排序,
key值需要实现Comparable接口, 重写compareTo方法。
TreeMap根据compareTo的逻辑,对 key进行排序。
键是红黑树结构,可以保证键的排序和唯一性
Collections类
● Collections是集合类的工具类,与数组的工具类Arrays类似.
addAl l(Col lection c, T... elements);
binarySearch(List> l ist, T key)
sort(List l ist)
sort(List l ist, Comparator c)
swap(List l ist, int i, int j)
copy(List dest, List src) ; 注意 dest size需大于等于src.size
fi l l(List l ist, T obj)
max(Col lection col l)
min(Col lection col l)
replaceAl l(List l ist, T oldVal, T newVal)
reverse(List l ist) shuffle(List l ist) 随机排序
copy(dest,src)集合复