Lis集合
1.特征:有序(有次序,有下标),可重复
2.常用实现类:
ArrayList:
-
第一个构造方法:初始容量,默认为10
-
第三个构造方法:已知容量,设置初始容量,避免大量扩容
-
第二个构造方法:把其他集合转换为ArrayList
-
特征:查找效率高,,查询某个下标的元素,只需要计算下标的地址码,插入删除效率低,需要移位操作。底层为:数组,连续空间
-
原理:扩容,移位
-
面试题:
-
底层是数组,数组在什么时候初始化?
-
ArrayList扩容为多少?1.5倍,容量最大值为Integer-8 21亿左右
-
LinkedList:
-
单向链表:上一个结点查找下一个结点
-
双向链表:上一个结点查找下一个结点,下一个结点查找上一个结点
-
特征:底层为双向链表,查找效率低,插入删除效率高,不需要移位,只需要改变指针的值,相对ArrayLIst多了一些对头尾的操作
-
使用方法
-
创建List对象,一般使用父接口类接收,这样后面调用的方法都是通用方法,每个子类都要,修改子类,不需要修改后面的代
public class Test5 { public static void main(String[] args) { List list = new ArrayList<>(); }
-
常用方法:
-
增加元素
-
arraylist.add()//先装箱,再向上转型为Object类型
list.add("aaa");
-
addAll(collection)//末尾添加,把另一个集合的元素全加进去
-
add(int 下标,元素)//在指定位置插入元素
-
-
查询元素
-
判断某个元素是否存在//Boolean contains
-
查询某个元素第一次出现的位置//indexOf()找不到返回-1
-
查询某个元素最后一次出现的位置//lastindexOf()找不到返回-1
-
获取指定位置的元素 get(int 下标)
-
-
删除元素
-
删除指定位置上的元素remove(int 下标)返回被删除元素
-
删除指定元素remove(“元素”)
-
删除元素1remove((object)1)向上转型为object类型
-
清空:arrayList.clear();
-
删除多个元素:arraylist1.removeAll(arraylist3)删除arraylist1中arrayList3有的元素
-
-
修改元素
-
set(int 下标,元素)
-
-
其他方法
-
集合元素个数 size()
-
集合是否为空 isEmpty()//true表示为空 false不为空
-
转换为数组 arrayList.toArray();
-
遍历循环LIst fori循环 配合get()
-
Set集合
-
无序(没下标,没有次序),唯一
-
HashSet
-
使用场景,去重复,底层为HashMap,Hashset把HashMap的key上面
-
添加元素
-
set.add()//元素存在就不做任何操作
-
-
判断重复
-
==判断地址码
-
调用对象的equals()与hashCode()方法,从object类继承,equals()方法底层是调用==方法
-
HashSet判断对象相等执行流程
-
1.判断两个对象hashCode码是否一样,如果不一样,不是同一个对象
-
2.如果一样,还不能判断是否是同一个对象,需要调用equals方法
-
如果自定义类型,实际开发中需要将两个方法都重写
-
-
面试题:怎么让一个对象在HashSet中添加两次
-
答案:让hashcode方法通过随机数每次产生不一的hash值
-
-
-
-
-
TreeSet
-
可排序,红黑树,存储的元素,自动排序,基于TreeMap
-
TreeSet treeSet = new TreeSet(new MyCompare()); treeSet.addAll(list);
-
-
LinkedHashset
-
有序唯一,无下标,如商品的浏览历史,添加的顺序和获取的顺序一致
-
他是HashSet子类,有HashSet的所有的功能,保证添加元素的顺序,与获取元素的顺序一致,保证次序:LInkedHashSet在Hashset基础上
-
-
-
-
默认容量16
Map集合
-
map的key是唯一的,value不一定是唯一的
-
map的key和value的数据类型类类型,可以是任意数据类型
-
map添加数据时,如果key已存在,执行覆盖value
-
map的key可以是null,但是只能一个,实际开发中,不会使用null作为key
-
map接口的常用实现类
-
HashMap(最常用)
-
properties(后期使用到)
-
TreeMap
-
-
Map常用方法:
-
put(key,value)
-
如果key 不存在,执行添加操作
-
如果key存在,执行修改value操作
-
-
remove(key)//根据key删除key/value对
-
get(key)根据key 获取value
-
containsvalue/key:判断value是否存在
-
clear()清空
-
size()元素个数
-
isEmpty
-
Map<String, User> map = new HashMap<>();
-