JAVA集合
- IT业界
- 2025-09-07 21:06:02

List(ArrayList、LinkedList、Vector) Map(HashMap->LinkedHashMap,TreeMap,HashTable) Set(HashSet->LinkedHashSet,TreeSet)
List接口特点:单列数据的集合;可以存放同一种类型的元素、元素之间有序、元素允许重复的集合,集合中每个元素都有其对应的顺序索引。
ArrayList1.内部存储用的数据结构是用**数组(动态调整大小)**实现,默认初始容量为10。动态扩容
优点:使用数组实现,因此内部元素可以通过索引实现快速随机访问(检索集合中特定索引位置的元素)。 缺点: 1. 从ArrayList中间位置插入和删除元素,都需要循环移动其他元素元素的位置。
2. 数组空间不够需要扩容时,会开辟一个新的数组把旧的数组元素拷贝过去,比较耗性能。
3.线程不安全
LinkedList内部存储用的数据结构是用双向链表实现
优点:使用链表实现,适合动态的插入和删除。缺点:1.随机访问元素的速度相对较慢。 2.基于链表数据结构的实现,占用的内存空间比较大(除了保存数据本身,还要保存指针信息)。 Vector基于 数组(动态调整大小) 数据结构实现,初始容量是10。
优点:线程安全缺点:效率低,增加元素、删除元素、查找元素都很慢。 ArrayList内部方法 方法描述add(Object obj)将数据元素插入到ArrayList的指定位置上addAll()将一个新集合中的所有元素添加到ArrayList中clear()删除ArrayList中所有的元素contains()判断元素是否在ArrayList中get()通过索引值获取ArrayList中的元素indexOf()返回ArrayList中某个元素的索引值removeAll(ArrayList list)删除ArrayList中指定集合的所有元素remove(int index || Object obj)删除ArrayList里的单个元素size()返回ArrayList的元素数量isEmpty()判断ArrayList是否为空subList()截取ArrayList的部分元素set(int index, Object obj)替换ArrayList中指定索引的元素sort()--Collections.sort(ArrayList)对ArrayList的数据元素进行排序toArray()将ArrayList转换为数组toString()将ArrayList转换为字符串ensureCapacity()设置指定容量大小的ArrayListlastIndexOf()返回指定元素在ArrayList中最后一次出现的位置retainAll()保留指定集合中的数据元素containsAll()查看ArrayList是否包含了指定集合的所有元素trimToSize()将ArrayList的容量调整为数组的元素个数removeRange()删除ArrayList中指定索引间存在的元素replaceAll()用给定的数据元素替换掉指定数组中每个元素removeIf()删除所有满足特定条件的ArrayList元素forEach()遍历ArrayList中每个元素并执行特定操作 Linked List内部方法 方法描述public void addFirst(E e)将元素添加到集合的头部。public void addLast(E e)将元素添加到集合的尾部。public boolean offer(E e)向链表的末尾添加元素,成功为true,失败为false。public boolean offerFirst(E e)在链表头部插入元素,成功为true,失败为false。public boolean offerLast(E e)在链表尾部插入元素,成功为true,失败为false。public void clear()清空链表。public E removeFirst()删除并返回链表的第一个元素。public E removeLast()删除并返回链表的最后一个元素。public boolean remove(Object o)删除某一元素,成功为true,失败为false。public E remove(int index)删除指定位置的元素。public E poll()删除并返回第一个元素。public E remove()删除并返回第一个元素。public E getFirst()返回第一个元素。public E getLast()返回最后一个元素。public int lastIndexOf(Object o)查找指定元素最后一次出现的索引。public E peek()返回第一个元素。public E element()返回第一个元素。public E peekFirst()返回头部元素。public E peekLast()返回尾部元素。public Iterator descendingIterator()返回倒序迭代器。public ListIterator listIterator(int index)返回从指定位置开始到末尾的迭代器。 Map特点:有键值对,键不能重复, 没有继承Collection接口;HashMap中的Entry对象是无序排列的; Map的entrySet()方法返回一个实现Map.Entry接口的对象集合: (1) Object getKey(): 返回条目的关键字 (2) Object getValue(): 返回条目的值 (3) Object setValue(Object value): 将相关映像中的值改为value,并且返回旧值
HashMap此类不保证映射的顺序,特别是它不保证该顺序恒久不变。
方法描述Object put(Object key, Object value)将元素添加到Map。Object remove(Object key)从映像中删除与key相关的映射。void putAll(Map t)将来自特定映像的所有元素添加给该映像。void clear()从映像中删除所有映射。Object get(Object key)获得与关键字key相关的值。boolean containsKey(Object key)判断映像中是否存在关键字key。boolean containsValue(Object value)判断映像中是否存在值value。int size()返回当前映像中映射的数量。Set keySet()返回映像中所有关键字的视图集。Collection values()返回映像中所有值的视图集。Set entrySet()返回Map.Entry对象的视图集,即映像中的关键字/值对。(Entry en : Map.EntrySet()) TreeMap 键的自然顺序(如果键实现了 Comparable 接口)或根据指定的比较器(Comparator)排序。键值对始终以排序后的顺序存储,并且在遍历时会按照升序返回键值对TreeMap 提供了一些额外的功能,如 firstKey()、lastKey()、headMap()、tailMap() 等方法,便于按范围查询或按顺序访问键值对。
基于红黑树实现的;TreeMap就没有调优选项,因为红黑树总是处于平衡的状态
HashTable 和HashMap一样,Hashtable 也是一个散列表,它存储的内容是键值对(key-value)映射。它的key、value都不可以为null。此外,Hashtable中的映射不是有序的和HashMap的继承不同,线程安全不同,遍历内部实现不同,允不允许null值不同等 Set HashSet特点:无序,元素不重复,可以有空值
TreeSet特点:有序,元素不能重复,不能有空值;它可以确保元素按照升序或降序排列
LinkedHashSet是HashSet的一个子类,需要保持元素的插入顺序,可以选择使用 LinkedHashSet(不能按照升序或降序排列)