set集合(接口)extends Collection接口
特点:
1.set集合无序。(有自己特有的顺序存储数据);
2.不允许有重复数据,会去重复。
3.没有索引,也不能使用普通for循环遍历。
HashSet集合(由哈希表支持的无序集合)
特点
1.不允许有重复数据,会去重复。
2.没有索引,也不能使用普通for循环遍历
3.是一个无序集合,存储与储存顺序有可能不一致
4.底层是哈希表结构(查询速度非常快)
使用迭代器遍历 Iterator 或者增强for
哈希表:特点(查询速度快)
哈希表=数组+链表+红黑树(提高查询的速度)
数组结构:把元素进行了分组(相同哈希值是一组)
链表/红黑树结构:把相同哈希值的元素连接到一起;
元素不同,哈希值相同就叫哈希冲突;
如果链表长度超过了8位,那么就会把链表转换为红黑树(提高查询速度)。
不重复的原理:
Set集合在调用add方法的时候,add方法会调用元素的hashCode方法和equals方法,判断元素是否重复。
存储的元素必须重写hashCode方法和equals方法。
HashSet存储自定义类型的元素
首先定义一个类,添加equals和hashcode方法(用hashset就必须重写)
测试类创建一个hashset集合存储自定义类型
创建自定义对象,存储。
LinkedHashSet集合 extends hashset集合
特点:
底层是一个哈希表(数组+链表+红黑树)+链表:多了一条链表,保证元素有序
有序的,但也不允许重复。
可变参数:
使用前提:当方法的参数列表数据类型已经确定,但是参数个数不确定,就可以使用可变参数,
使用格式:定义方法时使用
修饰符 返回值类型 方法名(数据类型...变量名){}
可变参数原理
终极写法(Object...i)
Add(1,2,34,5,5,);
Public static int add(int...arr){
Sout(arr)//地址值
Sout(arr.length);//
可变参数注意事项
1.一个方法的参数列表,只能有一个可变参数;
2.如果方法的参数有多个,那么可变参数必须写在参数列表的末尾。
如:public static void method(String s,int...a)
Collections集合工具类的方法
1.addAll,往集合中添加多个元素;
Collections.addAll(list,a,d,f)
2.打乱集合中的元素顺序shuffle;
3.Sort(list)方法(排序方法);默认升序排列;
使用前提,被排序的集合里边的接口必须实现im comparable,并重写compareTo方法
Public int compareto(自定义类型 o){
Return this.getAge()—o.getAge();//按升序排,降序相反
}
自己-参数就是升序;
4.Sort(list,comparator)
comparator与comparable的区别
Comparable:自己this和别人参数比较,自己需要实现comparable接口,重写比较规则compareto方法;
Comparator:相当于找第三方比较两个。
Collections.sort(list,new Comparator<自定义类型>()){
Public int compare(类型名 a,类型名 b)
Return a.Getage()-b.Getage();//升序
}
Map集合
Map<K,V> K:代表键的类型 V:代表值的类型
特点:
1.键唯一的(值可以重复)
2.是一个双列集合,一个元素包含两个值
3.K与V的数据类型可以不同
4.K与V一一对应。
Map的常用子类(实现类)
1.HashMap<K,V>:
特点:
1.底层是哈希表,查询速度非常快;
2.是一个无序集合,存储元素和取出元素顺序有可能不一致;
2.LinkedHashMap<K,V> extends HashMap<K,V>;
特点:
1.底层是哈希表+链表;
3.是一个有序的集合,存储与取出元素顺序是一致的
Map中的常用方法
1.put(K key, V value) 将指定的值与此映射中的指定键关联(可选操作)。
存储键值对的时候,key不重复,返回值v是null;
Key重复,会使用新的value替换到存在的value,返回被替换的值。
2.remove(Object key) 如果存在一个键的映射关系,则将其从此映射中移除
Key存在,v返回被删除的值;
Key不存在,v返回null。
3.get(Object key) 返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null。
4.containsKey(Object key) 如果此映射包含指定键的映射关系,则返回 true。不包含返回false。
5.keySet() 返回此映射中包含的键的 Set 视图
获取map中所有的key,封装成set集合;
使用迭代器or增强for遍历set集合;
Get(key)获取v值;
第一种遍历方式,键找值:
第二种遍历方式,
Entry键值对对象
Map.Entry<K,V>
作用:
当map集合一创建,那么就会在map几何中创建一个entry对象,用来记录键与值;
相当于结婚证。
方法:
Entryset();把map集合内部多个entry对象取出来存储到一个set集合中;
遍历set集合,获取set集合中的每一个entry对象
Getkey();getvalue();获取key与value
Hashmap存储自定义类型键值;
作为key的元素必须重写hashcode方法和equals方法以保证键的唯一;
1.Map.put(key,new 自定义类型());
2.Key为自定义类型必须重写hashcode方法和equals方法以保证键的唯一;
Map.put(new 自定类型(),value);
Linkedhashmap extends hashmap
底层原理:
哈希表+链表 有序的集合;
Key不允许重复,但有顺序。
|
|