类集框架学习

java集合

public interface Collection<E>  extends Iterable<E>  

collection 重要的子接口

 List<E>,Queue<E>Set<E>SortedSet<E>    SortedSet  (不可重复且有序)

重要的方法

boolean add​(E e)   --->   集合中追加数据
boolean addAll​(Collection<? extends E> c)   --->   在集合中追加一组数据
void clear()    --->    清空集合
boolean contains​(Object o)    --->    数据查询
Iterator<E> iterator()    ---->    获取Iterator实例
default Stream<E> parallelStream()    ---->    并行运算留
boolean remove​(Object o)   --->    数据的删除
int size()   --->    数据个数
Object[] toArray()     --->    将集合转换为对象数组

List

void add​(int index, E element)   ---->     可确定位置插入
E get​(int index)     ---->     获取索引上为数据
int indexOf​(Object o)     ---->    查找对象的索引位置
ListIterator<E> listIterator()  ---->    获取list的Iterator的示例
E set​(int index, E element)    ----->     插入一个数据
default void sort​(Comparator<? super E> c)    ----->    实现list的集合排序

常用子类   ArrayListLinkedListVector

ArrayList

public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, Serializable

ArrayList的集合默认开辟长度为10,如果不够以50%向上增加,并且在长度增加后会产生垃圾

LinkedList

public class LinkedList<E> extends AbstractSequentialList<E>
implements List<E>, Deque<E>, Cloneable, Serializable

Vector

public class Vector<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, Serializable

CopyOnWriteArrayList

读写List,很多场景下读取数据的次数远远大于写数据,如果都加上锁会对性能有很大影响,看这CopyOnWrite可以理解对写加锁对读不加锁

Set

set与list的最大区别就是set无法保存重复元素

public interface Set<E> extends Collection<E>

主要实现有    HashSet LinkedHashSet(链表、有序)TreeSet(树状有序)

public TreeSet()   ----->    构造
public TreeSet​(Comparator<? super E> comparator)    ------>   使用其他排序方法

在使用其他排序时覆写Comparable的compareTo 方法,覆写是要实体内全量比较

集合输出

四种输出模式  Iterator(常用)、ListIterator、Enumeration、foreach(一般使用)

Iterable

default void forEach​(Consumer<? super T> action)
Iterator<T> iterator()   --->   返回一个Iterator接口实例

得到Iterator接口后有如下方法

boolean hasNext()    ---->    判断是否有下一个内容
E next()    ---->    获取当前内容
default void remove()    ----->    删除

如何遍历对象?

将对象实现Iterable接口,将对象转换为Iterator进行输出,其中是使用内部类进行实现Iterator输出

Map集合

主要方法

V put​(K key, V value)     ---->    向集合中插入数据,如果key存在则覆盖
V get​(Object key)      ----->     通过key查询
V remove​(Object key)      ----->    根据key移除
int size()    ---->   获取结合长度
Collection<V> values()    ---->    返回所有内容
Set<K> keySet()     ----->     返回所有的key
Set<Map.Entry<K,​V>> entrySet()    ------>   将所有的内容以  Map.Entry<K,​V>  的方式返回

常见的子类 : HashMap、LinkedHashMap、TreeMap、HashTable(线程安全)

HashMap

public class HashMap<K,​V> extends AbstractMap<K,​V>
implements Map<K,​V>, Cloneable, Serializable

HashMap  的初始容量是16,扩充原理是oldCap  << 1 (每次扩容一倍),当存储75%的时候就会扩容,也就是第一次扩容是12,当数据存储容量超过8位,HashMap将会把链表转为红黑树结构

LinkedHashMap

public class LinkedHashMap<K,​V> extends HashMap<K,​V>
implements Map<K,​V>

Map的迭代

实例

Map<String,String> map = new HashMap<>();
        map.put("a","t");
        map.put("s","r");
        map.put("d","t");
        map.put("t","t1");
        map.put("y","r1");
        map.put("i","t1");

        Set<Map.Entry<String, String>> entries = map.entrySet();
        Iterator<Map.Entry<String, String>> itemap = entries.iterator();

        while(itemap.hasNext()){
            Map.Entry<String, String> formap = itemap.next();
            System.out.println("key = "+formap.getKey()+"--- value = "+formap.getValue());
        }

​
​

Stack(栈)先进后出

public class Stack<E> extends Vector<E>    (同步)

重要方法

public E push​(E item)    --->   入栈
public E pop()    --->    出栈

Collections 类集操作工具类

public class Collections extends Object

Queue    先进先出

public interface Queue<E> extends Collection<E>

方法

boolean add​(E e)    ---->    [Exception] 增加
boolean offer​(E e)     ---->     追加数据成功为true
E remove()   ---->     [Exception] 取出,返回取出值
E poll()    ---->     从队列中获取数据

常用子类     LinkedList PriorityQueue(优先级队列)

Deque  双向队列

public interface Deque<E> extends Queue<E>

常见子类   ArrayDequeLinkedList

常见方法(可以头、尾进行操作)

void addFirst​(E e)    ---->    头部添加
void addFirst​(E e)    --->      尾部添加

Stream  流    1.8

  • 并行数据流计算     default Stream<E> parallelStream()
  • 数据流计算      default Stream<E> stream()

其主要是避免迭代操作造成的性能浪费


public interface Stream<T> extends BaseStream<T,​Stream<T>>
int sum = widgets.stream()
                      .filter(w -> w.getColor() == RED)
                      .mapToInt(w -> w.getWeight())
                      .sum();

主要方法

Stream<T> filter​(Predicate<? super T> predicate)    --->    断言型数据处理
<R,​A> R collect​(Collector<? super T,​A,​R> collector)   --->   (收集器)收集流为新的集合

用法   .collect(Collectors.toList()) 等

Stream<T> distinct()    --->   消除重复
Stream<T> limit​(long maxSize)    ------>    设置取出的最大数据量
Stream<T> skip​(long n)     ----->   跳过多少数据量

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yzzzjj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值