集合常见的类

  • 接口和实现类的关系图:

 集合和数组的区别:

  1. 数组只能存储一种数据类型,集合可以存储多种数据类型(但是在使用的时候还是只存储一种类型)
  2. 数组的数据可以是基本数据类型,也可以是引用类型,集合的数据必须是引用类型
  3. 数组的长度是固定的,但集合的长度是可变的。

list接口:

  • 是个有序的集合(有下标),可以存放重复的元素,判断两个引用类型是否相等,就需要看他们重写的equals方法的内容。(根据元素equals方法)
  • 实现类:ArrayList:是以数组的形式保存数据的,所以在内存里面是连续的,特点是:查询速度快,修改的速度慢;
  • 实现类:linkedList:是以链表的形式保存数据的,在内存里面是分散存在的,特点是:查询速度慢,修改速度快;

 ArrayList:

注意:虽然list是个有序的集合,但是,不可以通过下标直接去访问

1.增加,查询,长度

增加一堆:

注意:

 2.删除

  • 只删除一个:

  •  删除一堆:

 3.遍历:(Arrays.toString不可以,这个是只适用于数组的)

  • 法一:

  • 法二:迭代器:
    迭代即 Collection 集合元素的通用获取方式。在取元素之前先要判断集合中有没有元素,如果有,就把这个元 素取出来,继续在判断,如果还有就再取出出来。一直把集合中的所有元素全部取出。这种取出方式专业术语称为迭

注意: 当使用 Iterator 迭代器访问 Collection 集合元素时 (所以,集合都可以用迭代器进行遍历),Collection 集合里的元素不能被改变,只能通过Iterator 的 remove()方法删除上一次 next()方法返回的集合元素才可以, 否则将会引发并发修改异常:java.util.ConcurrentModificationException。
  • 迭代器进行访问的时候,只能进行删除,不能进行除此之外的其他操作,比如add等(原理)源码分析:
  • 迭代器的原理:当hasnext是false的时候就会退出迭代。

 4.重置:

 5.包含,清空,查找第一个,最后一个。

 6.变成数组:

 7.如果集合里面是不同的数据类型,要变成相应的类型,需要一个个转:

instanceof运算符:(上转型对象不会改变其对象的本质)

LinkedList 类是 List 接口的实现类,因此可根据索引来随机访问集合中元素。LinkedList 还实现了 Deque 接口,因此可被当做双端队列来使用,同样也可以被当做“栈”来使用。

set:(没有顺序,不能含有重复的元素)

 Hashset:

底层逻辑:(hashmap和hashset的底层原理)

遍历:

 案例:相同的数字,就会出现一次,Hashset会通过相应的equals方法去判断。

 注意:字符串和八种包装类重写的equals方法比较的都是值,不是地址。

Treeset:

优点:这个是可以保持集合内部的顺序的,向其内部添加数据时候,默认调用对象的compareTo()方法(自然排序)

注意:这个数据类型的所有的类都必须都写了compareable下的compareTo(单参)方法或者实现comparetor下的compare(双参数);

包装类和string:对于包装类和string都是已经实现Comparable接口并重写了compareTo()方法的。)比较的准则如下:

 compareable接口:

  • 自然排序,每个引用类型都有,继承Object类;

  • 在每个类的内部都可以直接写的,Tree类型的集合在调用的时候就会默认调用这个方法去排序

comparetor接口:

  • 是单独的排序器,当集合trre类使用有参构造的时候默认调用的是这个方法,不会调用数据的compareable接口的方法

关于两者之间的升降序问题:(左-右)

compare(T t1, T t2)两个参数比较时,如果 t1 比 t2 的要大,返回 1,如果 t1 比 t2 要小返回-1,相等返回 0,就可以实现升序排序。如果将这种规则进行更改,就可以实现降序排序。

源码:

两者构造方法:一个是不带compareable(自然排序),一个是带compareable的(定制排序)。关键是看比较方法的位置。

Map接口:

Hashmap:

  1. 创建:
  2. 增加:
  3. 遍历:
  4. 怎么优化Hashmap:

 数据结构常见的问题:

  1. 如果空间利用率高,那么经过的哈希算法计算存储位置的时候,会发现很多存储位置已经有数据了(哈希冲突),冲突越大,那么,查找是越费劲的,加载因子存在的原因就是减缓哈希冲突而存在的;
  2. 如果为了避免发生哈希冲突,增大数组容量,就会导致空间利用率不高。

Treemap: (与treeset一样,都含有两者排序的方式)

WeakHashMap:这种让垃圾回收机制进行回收的时候,当不在局部变量的引用的时候,就会当成垃圾一样回收。

Queue 接口(队列) :

成员方法:

  1. void add(Object obj):将指定元素加入此队列的尾部。
  2. boolean offer(Object obj):(不会抛出异常)将指定元素加入此队列的尾部,当使用有容量限制的队列时,此方法比 add() 方法更好。
  3. Object element():获取队列头部的元素,但不删除该元素。
  4. Object peek():获取队列头部的元素,但不删除该元素。如果此队列为空,返回 Null。
  5. Object remove():获取队列头部的元素,并删除该元素。
  6. Object poll():获取队列头部的元素,并删除该元素,如果此队列为空,返回 Null。

队列的底层:

 PriorityQueue(Queue 接口实现类) :(优先队列)

特点: PriorityQueue 的排序不是普通的排序,而是堆排序,也就是,每次只会把最大或者最小的排上去。,其他的还是保持原来的相对位置。,该实现类也是包含:自然排序和定制排序。

Deque接口(双队列):允许从两端来操作队列元素

  1. void addFirst(Object obj):将指定元素插入到该队列的首部。
  2. void addlast(Object obj):将指定元素插入到该队列的尾部。
  3. Iterator desceningIterator():返回双端队列对应的迭代器,迭代器将以逆向顺序来迭代队列中的元素。
  4. Object getFirst():获取双端队列的第一个元素。
  5. Object getLast():获取双端队列的最后一个元素。
  6. Boolean offerFirst(Object obj):将指定元素插入到双端队列的开头。
  7. Boolean offerLast(Object obj):将指定元素插入到双端队列的末尾。
  8. Object peekFrist():获取但不删除双端队列的第一个元素。
  9. Object peekLast():获取但不删除双端队列的最后一个元素。
  10. Object pollFrist():获取并删除双端队列的第一个元素。
  11. Object pollLast():获取并删除双端队列的最后一个元素。
  12. Object pop():获取并删除该双端队列的第一个元素。
  13. void push(Object obj):将一个元素插入到该双端队列的队首位置,相当于 addFrist()
  14. Object removeFirst():获取并删除该双端队列的第一个元素。
  15. Object removeLast():获取并删除该双端队列的最后一个元素。
  16. 实现类:ArrayDeque 和 LinkedList 实现类

Collections 集合工具类:(set,list,map都可以操作)

排序:

  1. static void reverse(List list):反转指定 List 集合中元素的顺序。
  2. static void shuffle(List list):对 List 集合元素进行随机排序。
  3. static void sort(List list):根据元素的自然顺序对指定 list 集合的元素按升序进行排序。
  4. static void sort(List list,Comparator comp):根据指定 Comperator 产生的顺序对 List 集合元素进行排序。
  5. static void swap(List list,int i,int j):将指定 List 集合中的 i 处元素和 j 处元素进行交换。
  6. static void rotate(List list,int distance):当 distance 为正数时,将 list 集合的后 distance 个元素“整体”移动到前面,当 distance 为负数时,将 list 集合的前 distance 个元素“整体”移动到后面

 查找:

  1. Static int binarySearch(List list,Object key):使用二分法搜索指定的 List 集合,用来获得指定对象 key在 List 集合中的索引。如果要使该方法可以正常工作,则必须保证 List 中的元素已经处于有序的状态。
  2. Static Object max(Collection coll):根据元素的自然顺序,返回给定集合中的最大元素。
  3. Static Object max(Collection coll,Comparator comp):根据 Comparator 指定的顺序,返回给集合中的最大的元素。 
  4. Static Object min(Collection coll):根据元素的自然顺序,返回给集合中的最小元素。
  5. Static Object min(Collection coll,Comparator comp):根据 Comparator 指定的顺序,返回给集合中的最小的元素。
  6. Static void fill(List list,Object obj):使用指定元素 obj 替换指定 List 集合中的所有元素。
  7. Static int frequency(Collection c,Object o):返回指定集合中指定元素的出现次数。 
  8. Static int indexOfSubList(List parent,List child):返回子 List 对象在父 List 对象中第一次出现的位置索引;如果父 List 中没有出现这样的子 List,则返回-1。
  9. Static int lastIndexOfSubList(List source,List target):返回子 List 对象在父 List 对象中最后一次出现的位置索引,如果父 List 中没有出现这样的子 List,则返回-1。
  10. Static boolean replaceAll(List list,Object oldVal,Object newVal):使用一个新值 newVal 替换 List 对象的所有旧值 oldVal

不可变的集合: 

  1. emptyXxx():返回一个空的,不可变的集合对象,此处的集合即可以是 List,也可以是 Set,还可以是 Map。
  2. singletonXxx():返回一个包含指定对象的,不可变的集合对象,此处的集合即可以是 List,也可以是 Set,还可以是 Map。
  3. unmodifiableXxx():返回指定集合对象的不可变视图,此处的集合既可以是 List,也可以是 Set,还可以是 Map。

Statck 栈结构:

  1. Object peek():返回“栈”的第一个元素,单并不将元素弹出“栈”,仍在“栈”中存放。
  2. Object pop():返回“栈”的第一个元素,同时将元素对象弹出“栈”。
  3. void push(Object item):将元素对象加入到“栈”中。

泛型:

注意:这里的通配符<?>可以换成<E>等等任何字符

泛型擦除:(当同意集合虽然内部要求的数据不同,但是getclass仍然是true,侧面揭示了数据的父子关系不会影响集合的平级关系)

 泛型参考:java 泛型详解-绝对是对泛型方法讲解最详细的,没有之一_s10461的博客-CSDN博客_java 泛型方法

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值