Java集合类

Java集合类

集合基础

集合概述

img

点击并拖拽以移动

ArrayList构造和添加

img

点击并拖拽以移动

ArrayList常用方法

img

点击并拖拽以移动

集合体系结构

集合类的特点:提供一种存储空间可变的存储模型,存储的数据容量可以随时发生改变

集合类的体系结构

img

点击并拖拽以移动

Collection集合概述和使用

img

点击并拖拽以移动

img

点击并拖拽以移动

Collection集合常用方法

img

点击并拖拽以移动

Collection集合的遍历

img

点击并拖拽以移动

集合的使用步骤

img

点击并拖拽以移动

List集合概述和特点

img

点击并拖拽以移动

img

点击并拖拽以移动

List集合的特有方法

img

点击并拖拽以移动

img

点击并拖拽以移动

List的并发修改异常

img

点击并拖拽以移动

img

点击并拖拽以移动

List列表迭代器Listlterator

img

点击并拖拽以移动

img

点击并拖拽以移动

增强for循环

img

点击并拖拽以移动

List集合三种遍历方式

img

点击并拖拽以移动

List集合子类的特点

img

点击并拖拽以移动

img

点击并拖拽以移动

LinkedList集合的特有功能

img

点击并拖拽以移动

Set集合概述和特点

img

点击并拖拽以移动

img

点击并拖拽以移动

哈希值

img

点击并拖拽以移动

img

点击并拖拽以移动

HashSet集合概述和特点

img

点击并拖拽以移动

img

点击并拖拽以移动

HashSet集合保证元素唯一性源码分析

HashSet集合添加一个元素的过程

img

点击并拖拽以移动

img

点击并拖拽以移动

常见数据结构之哈希表

img

点击并拖拽以移动

img

点击并拖拽以移动

首先比较哈希值,哈希值不一样可以直接存放,如果哈希值一样,再比较内容,内容不一样就可以存放,同一个位置可以存放多个元素。底层HashMap默认初始容量为16,负载因子为0.75

img

点击并拖拽以移动

LinkedHashSet集合概述和特点

img

点击并拖拽以移动

img

点击并拖拽以移动

TreeSet集合概述和特点

img

点击并拖拽以移动

img

点击并拖拽以移动

自然排序Comparable的使用

img

点击并拖拽以移动

img

点击并拖拽以移动

比较器排序Comparator的使用

img

点击并拖拽以移动

img

点击并拖拽以移动

Map集合

Map集合概述和使用

img

点击并拖拽以移动

img

点击并拖拽以移动

Map集合的基本功能

img

点击并拖拽以移动

Map集合的获取功能

img

点击并拖拽以移动

Map集合的遍历(方式1)

img

点击并拖拽以移动

Map集合的遍历(方式2)

img

点击并拖拽以移动

HashMap集合练习

img

点击并拖拽以移动

img

点击并拖拽以移动

统计字符串中每个字符出现的次数

img

点击并拖拽以移动

img

点击并拖拽以移动

img

点击并拖拽以移动

Entry类概述

Java的entry是一个静态内部类,实现Map.Entry< K ,V> 这个接口,通过entry类可以构成一个单向链表。

一.java中Map及Map.Entry (1).Map是java中的接口,Map.Entry是Map的一个内部接口。 (2).Map提供了一些常用方法,如keySet()、entrySet()等方法。 (3).keySet()方法返回值是Map中key值的集合;entrySet()的返回值也是返回一个Set集合,此集合的类型为Map.Entry。 (4).Map.Entry是Map声明的一个内部接口,此接口为泛型,定义为Entry<K,V>。它表示Map中的一个实体(一个key-value对)。接口中有getKey(),getValue方法。

二.Entry类的实现源码

//源码
private static class Entry<K,V> implements Map.Entry<K,V> {
        int hash;
        final K key;
        V value;
        //next 可构成单向链表
        Entry<K,V> next;

        protected Entry(int hash, K key, V value, Entry<K,V> next) {
            this.hash = hash;
            this.key =  key;
            this.value = value;
            this.next = next;
        }

        protected Object clone() {
            return new Entry<>(hash, key, value,(next==null ? null : (Entry<K,V>) next.clone()));
        }

        // Map.Entry Ops
        public K getKey() {
            return key;
        }

        public V getValue() {
            return value;
        }

        public V setValue(V value) {
            if (value == null)
                throw new NullPointerException();

            V oldValue = this.value;
            this.value = value;
            return oldValue;
        }

        public boolean equals(Object o) {
            if (!(o instanceof Map.Entry))
                return false;
            Map.Entry<?,?> e = (Map.Entry)o;

            return key.equals(e.getKey()) && value.equals(e.getValue());
        }

        public int hashCode() {
            return hash ^ value.hashCode();
        }

        public String toString() {
            return key.toString()+"="+value.toString();
        }
    }

Collections

Collections概述和使用

img

点击并拖拽以移动

img

点击并拖拽以移动

Java Vector 类

Vector 类实现了一个动态数组。和 ArrayList 很相似,但是两者是不同的:

  • Vector 是同步访问的。
  • Vector 包含了许多传统的方法,这些方法不属于集合框架。

Vector 主要用在事先不知道数组的大小,或者只是需要一个可以改变大小的数组的情况。

Vector 类支持 4 种构造方法。

第一种构造方法创建一个默认的向量,默认大小为 10:

Vector()

第二种构造方法创建指定大小的向量。

Vector(int size)

第三种构造方法创建指定大小的向量,并且增量用 incr 指定。增量表示向量每次增加的元素数目。

Vector(int size,int incr)

第四种构造方法创建一个包含集合 c 元素的向量:

Vector(Collection c)

除了从父类继承的方法外 Vector 还定义了以下方法:

序号方法描述
1void add(int index, Object element) 在此向量的指定位置插入指定的元素。
2boolean add(Object o) 将指定元素添加到此向量的末尾。
3boolean addAll(Collection c) 将指定 Collection 中的所有元素添加到此向量的末尾,按照指定 collection 的迭代器所返回的顺序添加这些元素。
4boolean addAll(int index, Collection c) 在指定位置将指定 Collection 中的所有元素插入到此向量中。
5void addElement(Object obj) 将指定的组件添加到此向量的末尾,将其大小增加 1。
6int capacity() 返回此向量的当前容量。
7void clear() 从此向量中移除所有元素。
8Object clone() 返回向量的一个副本。
9boolean contains(Object elem) 如果此向量包含指定的元素,则返回 true。
10boolean containsAll(Collection c) 如果此向量包含指定 Collection 中的所有元素,则返回 true。
11void copyInto(Object[] anArray) 将此向量的组件复制到指定的数组中。
12Object elementAt(int index) 返回指定索引处的组件。
13Enumeration elements() 返回此向量的组件的枚举。
14void ensureCapacity(int minCapacity) 增加此向量的容量(如有必要),以确保其至少能够保存最小容量参数指定的组件数。
15boolean equals(Object o) 比较指定对象与此向量的相等性。
16Object firstElement() 返回此向量的第一个组件(位于索引 0) 处的项)。
17Object get(int index) 返回向量中指定位置的元素。
18int hashCode() 返回此向量的哈希码值。
19int indexOf(Object elem) 返回此向量中第一次出现的指定元素的索引,如果此向量不包含该元素,则返回 -1。
20int indexOf(Object elem, int index) 返回此向量中第一次出现的指定元素的索引,从 index 处正向搜索,如果未找到该元素,则返回 -1。
21void insertElementAt(Object obj, int index) 将指定对象作为此向量中的组件插入到指定的 index 处。
22boolean isEmpty() 测试此向量是否不包含组件。
23Object lastElement() 返回此向量的最后一个组件。
24int lastIndexOf(Object elem) 返回此向量中最后一次出现的指定元素的索引;如果此向量不包含该元素,则返回 -1。
25int lastIndexOf(Object elem, int index) 返回此向量中最后一次出现的指定元素的索引,从 index 处逆向搜索,如果未找到该元素,则返回 -1。
26Object remove(int index) 移除此向量中指定位置的元素。
27boolean remove(Object o) 移除此向量中指定元素的第一个匹配项,如果向量不包含该元素,则元素保持不变。
28boolean removeAll(Collection c) 从此向量中移除包含在指定 Collection 中的所有元素。
29void removeAllElements() 从此向量中移除全部组件,并将其大小设置为零。
30boolean removeElement(Object obj) 从此向量中移除变量的第一个(索引最小的)匹配项。
31void removeElementAt(int index) 删除指定索引处的组件。
32protected void removeRange(int fromIndex, int toIndex) 从此 List 中移除其索引位于 fromIndex(包括)与 toIndex(不包括)之间的所有元素。
33boolean retainAll(Collection c) 在此向量中仅保留包含在指定 Collection 中的元素。
34Object set(int index, Object element) 用指定的元素替换此向量中指定位置处的元素。
35void setElementAt(Object obj, int index) 将此向量指定 index 处的组件设置为指定的对象。
36void setSize(int newSize) 设置此向量的大小。
37int size() 返回此向量中的组件数。
38List subList(int fromIndex, int toIndex) 返回此 List 的部分视图,元素范围为从 fromIndex(包括)到 toIndex(不包括)。
39Object[] toArray() 返回一个数组,包含此向量中以恰当顺序存放的所有元素。
40Object[] toArray(Object[] a) 返回一个数组,包含此向量中以恰当顺序存放的所有元素;返回数组的运行时类型为指定数组的类型。
41String toString() 返回此向量的字符串表示形式,其中包含每个元素的 String 表示形式。
42void trimToSize() 对此向量的容量进行微调,使其等于向量的当前大小。

实例

下面的程序说明这个集合所支持的几种方法:

import java.util.*;

public class VectorDemo {

   public static void main(String args[]) {
      // initial size is 3, increment is 2
      Vector v = new Vector(3, 2);
      System.out.println("Initial size: " + v.size());
      System.out.println("Initial capacity: " +
      v.capacity());
      v.addElement(new Integer(1));
      v.addElement(new Integer(2));
      v.addElement(new Integer(3));
      v.addElement(new Integer(4));
      System.out.println("Capacity after four additions: " +
          v.capacity());

      v.addElement(new Double(5.45));
      System.out.println("Current capacity: " +
      v.capacity());
      v.addElement(new Double(6.08));
      v.addElement(new Integer(7));
      System.out.println("Current capacity: " +
      v.capacity());
      v.addElement(new Float(9.4));
      v.addElement(new Integer(10));
      System.out.println("Current capacity: " +
      v.capacity());
      v.addElement(new Integer(11));
      v.addElement(new Integer(12));
      System.out.println("First element: " +
         (Integer)v.firstElement());
      System.out.println("Last element: " +
         (Integer)v.lastElement());
      if(v.contains(new Integer(3)))
         System.out.println("Vector contains 3.");
      // enumerate the elements in the vector.
      Enumeration vEnum = v.elements();
      System.out.println("\nElements in vector:");
      while(vEnum.hasMoreElements())
         System.out.print(vEnum.nextElement() + " ");
      System.out.println();
   }
}

以上实例编译运行结果如下:

Initial size: 0
Initial capacity: 3
Capacity after four additions: 5
Current capacity: 5
Current capacity: 7
Current capacity: 9
First element: 1
Last element: 12
Vector contains 3.

Elements in vector:
1 2 3 4 5.45 6.08 7 9.4 10 11 12
end
  • 作者:AWhiteElephant(联系作者)
  • 发表时间:2022-05-10 11:13
  • 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
  • 转载声明:如果是转载栈主转载的文章,请附上原文链接
  • 评论