A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 唐磊TL 初级黑马   /  2018-12-12 10:26  /  790 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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不允许重复,但有顺序。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马