Java集合总结

本文详细介绍了Java集合框架的各种集合类型,包括List、Set、Queue、Map等,以及它们的主要实现类如ArrayList、HashSet、LinkedList、HashMap等。同时,还探讨了集合的操作方法、遍历方式及工具类的使用。

1.
Collection
Set 无序,不可重复;
List 有序,重复;
Queue 队列集合;
Map
Map 映射关系;

2.Collection 接口
boolean add(Object o);
boolean addAll(Collection c);
void clear();
boolean contains(Object o);
boolean containsAll(Collection c);
boolean isEmpty();
Iterator itreraror();
boolean remove(Object o);
boolean removeAll(Collection c);
boolean retainAll(Collection c);
int size();
Object[] toArray();

removeIf(Predicate filter);       Predicate 是函数式接口,可为 Lambda 表达式;

3.集合遍历

1.forEach(Consumer action);  参数为 Lambda 表达式;
    例:collection.forEach(obj -> System.out.println(obj));

2.Iterator 接口
    boolean hasNext()       集合没有被遍历完,返回 true;
    Object next()           下一个元素;
    void remove()           删除集合里上一次 next 方法返回的元素;
    void forEachRemaining(Consumer action)  使用 Lambda 表达式来遍历集合;

    例:
        Iterator it = collection.iterator();
        while(it.hasNext())
        {
            System.out.println(it.next());
        }

        Collection 集合里的元素不能被改变;只有通过 Iterator 的 remove()方法删除上一次 next() 方法返回的集合才可以;

    例:
        Iterator it = collection.iterator();
        it.forEachRemaining(obj -> System.out.println(obj));

3.使用 foreach 循环

    for(Object obj : collection)
    {
        System.out.println(obj);
    }

4.Stream 操作集合

5.set
不允许包含相同元素

1.HashSet
    不保证元素排列顺序;
    不是同步的;
    元素值可为 null;

    元素相等判断标准:两个对象通过 equals() 方法比较相等,hashCode() 方法返回值相等;

    LinkedHashSet 类  按元素的添加顺序来访问集合元素;

2.TreeSet
    元素集合处于排序状态;
    Comparator comparator();    重写 compare()方法  定制排序;
    Object first();
    Object last();
    Object lower(Object e);
    Object higher(Object e);
    SortedSet subSet(Object fromElement, Object toElement);
    SortedSet headSet(Object toElement);
    SortedSet tailSet(Object fromElement);


    TreeSet 最好只添加一种类型对象;

    Comparable 接口:
        BigDecimal,BigInteger,Character,Boolean,String,Date,Time;
        自然排序:升序;
        定制排序:
            Comparator 对象 或 Lambda 表达式;

3.EnumSet
    为枚举设计的集合类,创建完对象,不可变;

    EnumSet allOf(Class elementType);           包含指定枚举类里所有枚举值的 EnumSet 集合;
    EnumSet complementOf(EnumSet s);            原集合不包含的,剩余的枚举值;
    EnumSet copyOf(Collection c);               使用普通集合创建 EnumSet 集合;
    EnumSet copyOf(EnumSet s);                  创建相同元素类型,相同集合元素的 EnumSet 集合;
    EnumSet noneOf(Class elementType);          空 EnumSet 集合;
    EnumSet of(E first, E...rest);              一个或多个枚举值的 EnumSet 集合;
    EnumSet range(E from, E to);                从 from 枚举值到 to 枚举值范围的所有枚举值;

6.List 集合

1.方法

    void add(int index, Object element);            
    boolean addAll(int index, Collection c);
    Object get(int index);
    int indexOf(Object o);                          返回对象 o 在 List 集合中第一次出现位置的索引;
    int lastIndexOf(Object o);                      返回对象 o 在 List 集合中最后一次出现位置的索引;
    Object remove(int index);                       删除并返回 index 索引处的元素;
    Object set(int index, Object element);          将 index 索引处的元素替换成 element 对象,返回被替换的旧元素;
    List subList(int fromIndex, int toIndex);       返回从 fromIndex 到 toIndex 所有集合元素的子集和;
    void replaceAll(UnaryOperator operator);        根据 operator 指定的计算规则重新设置 List 集合的所有元素;
    void sort(Comparator c);                        

2.ListIterator 接口新加方法

    boolean hasPrevious();
    boolean previous();
    void add(Object o);

3.ArrayList 和 Vector 

    重新分配 Object[] 数组;

        void ensureCapacity(int minCapacity);       将 Object[] 数组长度增加大于或等于 minCapacity;
        void trimToSize();                          调整 Object[] 数组长度为当前元素个数;

    少用 Vector 实现类,线程安全,性能低;

    Stack 子类: -> ArrayDeque
        Object peek();
        Object pop();
        void push(Object item);

7.Queue 集合

1.Queue 接口方法 
    void add(Object e);             将元素加入队尾;
    Object element();               返回队头元素;
    boolean offer(Object e);        将元素加入队尾;(有容量限制好)
    Object peek();                  返回队头元素;(空 null)
    Object poll();                  返回队头元素,并删除该元素;(空 null)
    Object remove();                返回队头元素,并删除该元素;

2.Queue 接口实现类 PriorityQueue
    大小排序顺序;
    不允许插入 null 元素; 
    自然排序,定制排序;

 3.Deque 接口实现类 ArrayDeque LinkedList

    void addFirst(Object e);                    插入双端队列开头;
    void addLast(Object e);                     插入双端队列末尾;
    Iterator descendingIterator();              返回双端队列对应的迭代器,逆向顺序;
    Object getFirst();                          返回双端队列第一个元素;
    Object getLast();                           返回双端队列最后一个元素;
    boolean offerFirst(Object e);               将元素插入双端队列开头;
    boolean offerLast(Object e);                将元素插入双端队列末尾;
    Object peekFirst();                         返回双端队列第一个元素;(空 null)
    Object peekLast();                          返回双端队列最后一个元素;(空 null)
    Object pollFirst();                         返回并删除双端队列第一个元素;(空 null)
    Object pollLast();                          返回并删除双端队列最后一个元素;(空 null)
    Object pop();(栈方法)                      pop 出该双端队列栈顶元素;
    void push(Object e);(栈方法)               将一个元素 push 进双端队列栈顶;
    Object removeFirst();                       返回并删除双端队列第一个元素;
    Object removeFirstOccurrence(Object o);     删除双端队列第一次出现的元素 o;
    Object removeLast();                        返回并删除双端队列最后一个元素;
    Object removeLastOccurrence(Object o);      删除双端队列最后一次出现的元素 o;


    LinkedList 是 List 接口,Dequqe 接口实现类       (链表实现)
        可以当成双端队列,栈,队列使用;

8.Map 集合

1.Map 接口方法

    void clear();                           删除所有 key-value 对;
    boolean containsKey(Object key);        查询是否包含指定 key ;
    boolean containsValue(Object value);    查询是否包含一个或多个 value ;
    Set entrySet();                         返回 key-value 对所组成的 Set 集合,每个集合元素都是 Map.Entry 对象;
    Object get(Object key);                 返回指定 key 所对应的 value;
    boolean isEmpty();                      查询 Map 是否为空;
    Set keySet();                           返回所有 key 组成的集合;
    Object put(Object key, Object value);   添加一个 key-value 对,会覆盖;
    void putAll(Map m);                     将指定 Map 中的 key-value 对复制到本 Map 中;
    Object remove(Object key);              删除指定 key 对应的 key-value 对,并返回删除的 value;
    boolean remove(Object key, Object value);删除指定 key-value 对;
    int size();                             返回 key-value 对个数;
    Collection values();                    返回所有 value 组成的 Collection;

    Map 接口内部类 Entry
        Object getKey();                    返回 Entry 里包含的 key 值;
        Object getValue();                  返回 Entry 里包含的 value 值;
        Object setValue(V value);           设置 Entry 里包含的 value 值,并返回新值;


2.HashMap 和 Hashtable 

    Hashtable 线程安全,不允许使用 null 作为 key 和 value ;
    HashMap 借助工具类 Collection 变成线性安全;可以使用 null 作为 key 或 value, 性能略高;

    HashMap 的子类 LinkedHashSet (双向链表,迭代顺序与插入顺序一致)
        遍历:forEach((key, value) -> System.out.printn(key + "-->" + value));

    Properties 类是 Hashtable 类的子类 (读写属性文件)
        String getProperty(String key);
        String getProperty(String key, String defaultValue);
        Object setProperty(String key, String value);

        void load(InputStream inStream);
        void store(OutputStream out, String comments);

3.TreeMap 实现类(SortedMap 接口)

    Map.Entry firstEntry();
    Map.Entry lastEntry();
    Object firstKey();
    Object lastKey();

4.WeakHashMap 实现类
    弱引用,如果 WeakHashMap 对象的 key 所引用的对象没有被其他强引用变量所引用,则 key 所引用的对象
    可能被垃圾回收,WeakHashMap 会自动删除这些 key-value 对;
  IdentityHashMap 实现类
    两个 key 严格相等才认为相等;

5.EnumMap 实现类

9.Collections 工具类

1.排序操作
    void reverse(List list);
    void shuffle(List list);                随机排序;
    void sort(List list);
    void sort(List list, Comparator c);
    void swap(List list, int i, int j);
    void rotate(List list, int distance);   distance 为正数,集合后 distance 个元素移到前面;负数,前 distance 个元素移到后面;

2.查找,替换操作

    int binarySearch(List list, Object key);
    Object max(Collection coll);
    Object min(Collection coll);
    Object max(Collection coll, Comparator comp);
    Object min(Collection coll, Comparator comp);
    void fill(List list, Object obj);
    int frequency(Collection c, Object o);
    int indexOfSubList(List source, List target);
    int lastIndexOfSubList(List source, List target);
    boolean replaceAll(List list, Object oldVal, Object newVal);

3.同步控制

    synchronizedXxx()方法
    HashSet,TreeSet,ArrayList,ArrayDeque,LinkedList,HashMap,TreeMap 线程不安全;

    例:Set s = Collections.synchronizedSet(new HashSet);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值