Java集合类的使用

集合框架有何好处

集合弥补了数组的缺陷,他比数组更灵活更实用,可大大提高软件的开发效率,而且不同的集合可使用与不同场合

数组和集合的区别

  1. 数组长度固定,集合长度可以动态改变
  2. 定义数组时必须指定元素类型,集合默认所有元素都是Object
  3. 无法直接获取数组中实际元素的个数,集合可以通过size()直接获取元素个数
  4. 集合有多种实现方式和不同的适合场合,而不像数组仅采用分配连续空间方式。
  5. 集合以接口,类的形式存在,具有面向对象的三大特征,提高了软件的开发效率

Hashtable和HashMap的异同

实现原理、功能相同,可以互用
主要区别

  • Hashtable继承Dictionary类,HashMap实现Map接口
  • Hashtable线程安全,HashMap线程非安全
  • Hashtable不允许null值,HashMap允许null值

泛型集合的好处

  • 严格限制存入元素的数据类型,从集合中取出元素时无需进行强制类型转换,避免了ClassCastException异常。

Collections算法类

  1. Collections和Collection不同,前者是集合的操作类,后者是集合接口
  2. Collections提供的常用静态方法
  3. sort():排序
  4. binarySearch():查找
  5. max()\min():查找最大\最小值

集合类有哪些

  • Collection(接口)(由List和Set两部分组成)

  • List(接口)

    • LinkedList(类)
    • ArrayList(类)
    • Vector(类)
    • stack(类)
  • Set接口

  • Map接口

    • Hashtable(类)
    • HashMap(类)
    • WeakHashMap(类)

如何使用集合类

  1. 如果涉及到堆栈、队列等操作,应当考虑List,对于需要快速插入,删除元素,应该使用LinkedList,如果需要快速随机访问元素,应该使用ArrayList
  2. 哈希表的操作,作为Key的对象要正确复写equals和hashCode方法
  3. 尽量返回接口而非实际的类型,如返回List而非ArrayList,这样如果将来要将ArrayList换成LinkedList时,客户端代码不用改变
  4. List可以有类似数组的下标操作,且允许有相同的元素存在;Map是以键值对(KeyValue)的形式存在,不能存在相同的键

常用集合类

  1. ArrayList类:
    ArrayList实现可变大小的数组,长度随着元素的增加而变化,而且可以存在重复的元素
  2. HashMap类:
    允许null,即null key,null value。且存在的形式是key-value形式,不允许有key重复

Collection的使用

Collection接口是什么

  • Collection接口是可以理解成动态的数组、集合,和数组类似,但不同的是集合可以任意扩充大小
  • Collection是最基本的接口,Java SDK提供的类都是继承自Collection的子接口,例如“List”、“Set”

Collection接口特点

  • 性能高
  • 易扩展
  • 易修改

List接口的使用

List接口的特点

  • List接口可以存放任意的数据,且在接口中,内容可以重复
  • List中提供了高效的插入和移除多个元素的方法

List常用(实现)子类

  • ArrayList(实现类)
    例:List list = new ArrayList<>();
  • Vector(实现类)
    例:List list = new Vector<>();

ArrayList和Vector区别

||ArrayList|Vector|
|--|--|--|
|推出时间|JDK1.2后|JDK1.0后|
|性能|异步处理,性能高|同步处理,性能低|
|线程安全|非线程安全|线程安全|

Set的使用

Set接口的特点

Set接口可以存放任意的数据,且在接口中,数据不可以重复(注意和List进行区别)

Set接口常用子类

  • HashSet
    Set sets = new HashSet<>();
  • TreeSet
    Set sets = new TreeSet<>();

HashSet和TreeSet的区别

  • HashSet与TreeSet都是间接实现了Set接口,同样拥有add、remove等方法
  • HashSet是无序存放的、而TreeSet实现是有序存放(ASCII顺序存放)

Map的使用

Map的特点

  • Map接口存放数据是以键值对的形式存放,例如:

    key -> value
    "name" -> "尼古拉斯赵四"
    "age" -> "33"

  • 键(key)的类型要一致,值(value)的类型也要一致。

Map常用实现类(实现类的方法和List、Set的方法不一样)

  • HashMap

    Map<String,String> maps = new HashMap<>();
    maps.put("name","詹姆斯刘能");
    maps.put("age","24");

List接口常用方法

  • boolean add(Object o) 在列表的末尾顺序添加元素,起始索引位置从0开始
  • void add(int index,Object o) 在指定的索引位置添加元素。索引位置必须介于0和列表中元素个数之间
  • int size()返回列表中的元素个数
  • Object get(int index)返回指定索引位置处的元素。取出的元素是Object类型,使用前需要进行强制类型转换
  • boolean contains(Object o) 判断列表中是否存在指定元素
  • boolean remove(Object o) 从列表中删除元素
  • Object remove(int index) 从列表中删除指定位置元素,起始索引位置从0开始

LinkedList常用方法

  • void addFirst(Object o) 在列表的首部添加元素
  • void addLast(Object o) 在列表的末尾添加元素
  • Object getFirst() 返回列表中的第一个元素
  • Object getLast() 返回列表中的最后一个元素
  • Object removeFirst() 删除并返回列表中的第一个元素
  • Object removeLast() 删除并返回列表中的最后一个元素

Map接口常用方法

  • Object put(Object key, Object val) 以“键-值”对的方式进行存储
  • Object get(Object key) 根据键返回相关联的值,如果不存在指定的键,返回null
  • Object remove(Object key) 删除由指定的键映射的“键-值对”
  • int size() 返回元素个数
  • Set keySet() 返回键的集合
  • Collection values() 返回值的集合
  • boolean containsKey(Object key) 如果存在由指定的键映射的“键-值对”,返回true

迭代器iterator的使用(接口)

  • iterator自带常用方法

    • hasNext:如果仍有元素可以迭代,则返回true

    • next:返回迭代下一个元素

    • remove:从迭代器指向的collection中移除迭代器返回的最后一个元素(可选操作)

      Set sets = maps.keySet();
      Iterator iterator = sets.iterator();
      while(iterator.hasNext()){
      System.out.println("key=" + iterator.next());
      }

    Collection collection = maps.values();
    Iterator iterator = collection.iterator();
    while(iterator.hasNext()){
    System.out.println("value=" + iterator.next());
    }

结尾

posted @ 2018-08-02 16:14  skylinelin  阅读(2291)  评论(0编辑  收藏  举报