Java Collections

Java集合类如图所示

1. Iterator

迭代器接口,是一种设计模式,用来遍历序列对象。

1.1 ListIterotr

可双向遍历。

2. Collection

  • 最基本的集合接口,继承于Iterator,自身不被直接继承,两个子接口List和Set

2.1 List

  • 有序Collection
  • 提供基于索引的随机访问,内容可重复。
  • 实现了ListIterator接口,可向前遍历

2.1.1 ArrayList

  • 可变数组,允许随机访问
  • 允许含null,只能存对象
  • 非同步,线程不安全
  • 有容量Capacity,每次扩充原来的一半。创建ArrayList时最好指定Capacity,提高插入效率。存在空间浪费。
    private void grow(int minCapacity) {
      // overflow-conscious code
      int oldCapacity = elementData.length;
      int newCapacity = oldCapacity + (oldCapacity >> 1);
      if (newCapacity - minCapacity < 0)
          newCapacity = minCapacity;
      if (newCapacity - MAX_ARRAY_SIZE > 0)
          newCapacity = hugeCapacity(minCapacity);
      // minCapacity is usually close to size, so this is a win:
      elementData = Arrays.copyOf(elementData, newCapacity);
    }
    

2.1.2 LinkedList

  • 可变链表,允许随机访问
  • 允许含null
  • 可双向遍历,头尾操作快,可以用作Stack、Queue、双向Queue
  • 非同步,线程不安全
  • 比ArrayList更占空间,每个节点存储两个引用,分别指向前后元素

2.1.3 Vector

  • 与ArrayList类似。
  • Vector很多方法由synchronized修饰,是同步的,线程安全。
    • 如果遍历Vector过程中,另一个线程改变了Vector,则会报错。
  • 扩充容量为原来的一倍,并且可以自己设置扩充因子
    private void grow(int minCapacity) {
      // overflow-conscious code
      int oldCapacity = elementData.length;
      int newCapacity = oldCapacity + ((capacityIncrement > 0) ?
                                       capacityIncrement : oldCapacity);
      if (newCapacity - minCapacity < 0)
          newCapacity = minCapacity;
      if (newCapacity - MAX_ARRAY_SIZE > 0)
          newCapacity = hugeCapacity(minCapacity);
      elementData = Arrays.copyOf(elementData, newCapacity);
    }
    

2.1.4 Stack

  • 继承于Vector,Vector的堆栈实现,包括empty、peek、pop、push、search等方法。

2.2 Set

  • 成员不可重复
  • 可以有序

2.2.1 HashSet

  • 基于HashMap,key存值,value存系统默认的Object对象,可快速查找
  • 不保证有序,非同步
  • 成员为Object子类对象
  • 可以放一个null

2.2.2 TreeSet

  • 基于TreeMap,默认有序
  • 自定义对象要实现Comparable接口才能放入TreeSet

2.2.3 LinkedHashSet

  • 在HashSet基础上,维护一个链表来记录插入顺序。这使得它访问顺序比HashSet好,但插入顺序相比稍差。

3. Map

键值对,键不能重复,快速查找

3.1 HashMap

  • 可含有一个key为null的键值对
  • 非同步,若让HashMap同步,使用Collections.synchorniezMap(),
  • 去除了contains方法
  • 扩容为2的幂

3.2 TreeMap

  • 基于红黑树,有序
  • 遍历value时尽量使用entrySet遍历,这样防止二次查找(keySet找value极慢)
  • 可以返回一个子树

3.3 LinkedHashMap

  • HashMap子类,于LinkedHashSet类似,额外添加双向链表来保证顺序
时间: 2024-09-17 03:44:29

Java Collections的相关文章

关于Java Collections API您不知道的5件事,第1部分

定制和扩展 Java Collections 对于很多 Java 开发人员来说,Java Collections API 是标准 Java 数组及其所有缺点的一个非常需要的替代品.将 Collections 主 要与 ArrayList 联系到一起本身没有错,但是对于那些有探索精神的人来说,这只是 Collections 的冰山一角. 虽然 Map(以及它的常用实现 HashMap)非常适合名-值对或键-值对,但是没有理由让自己局限于这些熟悉的工具.可以使用适当的 API,甚至适当的 Colle

关于Java Collections API您不知道的5件事,第2部分

注意可变对象 java.util 中的 Collections 类旨在通过取代数组提高 Java 性能.如您在 第 1 部分 中了解到的,它们也是多变的,能够以各种方 式定制和扩展,帮助实现优质.简洁的代码. Collections 非常强大,但是很多变:使用它们要小心,滥用它们会带来风险. 1. List 不同于数组 Java 开发人员常常错误地认为 ArrayList 就是 Java 数组的替代品.Collections 由数组支持,在集合内随机查找内容时性能较好. 与数组一样,集合使用整序

java Collections Arrays ArrayList 类的运用 进行对象排序

   /*  Collections类的所有方法都是静态的 sort方法 可以为一个列表进行排序   List 接口从 Collection派生来的  ArrayList类实现了  List接口 所以有iterator方法  Arrays类的sort方法是给一个数组进行排序  Collections类封装了静态方法 对列表操作 Arrays 类可以对数组进行排序等等  */  import java.util.*;  class  Test  {       public static void

java的collections集合

下面这张表格(表一)总结了用一个集合能做的所有事情(亦可对Set和List做同样的事情,尽管List还提供了一些额外的功能).Map不是从Collection继承的,所以要单独对待. boolean add(Object) *保证集合内包含了自变量.如果它没有添加自变量,就返回false(假) boolean addAll(Collection) *添加自变量内的所有元素.如果没有添加元素,则返回true(真) void clear() *删除集合内的所有元素 boolean contains(

详解java中的Collections类_java

一般来说课本上的数据结构包括数组.单链表.堆栈.树.图.我这里所指的数据结构,是一个怎么表示一个对象的问题,有时候,单单一个变量声明不堪大用,比如int,String,double甚至一维数组.二维数组无法完全表达你要表达的东西,而定义一个类Class有太过麻烦,这时候,你可以考虑一下用Java中的Collections类.使用Collections类,必须在文件头声明import java.util.*; 一.动态.有序.可变大小的一维数组Vector与ArrayList  Collectio

JournalDev 博客的 Java 教程集合(JournalDev Java Tutorials Collections)

Tutorials I have written a lot of posts here into many categories and as the number of post grows, keeping track of them becomes harder. So I have provided a summary post for most of the categories where you can read them in the order for better unde

值得关注:Java 1.4 即将发布版本的性能和新功能一览(转自IBM developerWorks)

性能 dW at JavaOne: 下一波 -- Java 1.4英文原文内容:JSR 在 1.4 版本中的删除部分XML API 发展得太快用户有一个参数选择断言培训记录新世界"N" 代表"新的"数据库的库到达内核进入所需的认证路径利用 WebStart 的快速开始"Tiger" 的眼睛超越 JSR考虑转向 1.4参考资料关于作者对本文的评价相关内容:一个识别用户的三向解决方案使用类属在编译时找出更多的错误Merlin 的魔力:Swing 的新

Java中对HashMap的深度分析

在Java的世界里,无论类还是各种数据,其结构的处理是整个程序的逻辑以及性能的关键.由于本人接触了一个有关性能与逻辑同时并存的问题,于是就开始研究这方面的问题.找遍了大大小小的论坛,也把<Java 虚拟机规范>,<apress,.java.collections.(2001),.bm.ocr.6.0.shareconnector>,和<Thinking in Java>翻了也找不到很好的答案,于是一气之下把JDK的 src 解压出来研究,扩然开朗,遂写此文,跟大家分享感

初学者必读:Java集合接口综述

初学|集合|接口 集合总是需要迭代的,我们确实需要探察集合中的每一个元素,所以集合接口都无一例外的继承了Iterable<T> 接口 ,而该接口的唯一方法 : Iterator<T> iterator()           返回一个在一组 T 类型的元素上进行迭代的迭代器. 可以返回一个所有集合接口都继承了的Iteraor接口,如此集合框架的所有子类都可以迭代显示其元素! 例如下:集合的根接口Collection继承了Iterator接口: public interface Co