Java中的集合框架

来源:互联网 发布:php求和函数 编辑:程序博客网 时间:2024/06/16 15:18

之前自己自学了Java,学到集合框架的时候就一脸懵逼,这次在培训班,老师带着复习了一遍,感觉学的还不是很好,所以根据自己的理解总结一下。如果有写的不好的地方欢迎大家批评指正。

1.为什么要引入集合类

目的是为了克服数组的局限性,数组主要有以下两点局限性

  • 存储元素个数固定
  • 元素类型固定

2.集合概述

  • Java中集合类是用来存放对象的
  • 集合相当于一个容器,里面包容着一组对象 —— 容器类
  • Java API提供的集合类位于java.util包内
  • 可以把集合理解为一个微型数据库,既然是数据库,主要操作无外乎“增删改查”

3.集合框架层次结构

这里写图片描述

4.集合框架基本理解

从层次图中可以看到,顶层有两大基类:Collection和Map

  • Collection表示一组纯数据
  • Map表示一组Key-Value键值对

Collection

Collection下有两个接口,List接口和Map接口,

  • List : 有序的集合,允许重复
  • Set :无序的集合,不允许重复

对于List接口,有若干种实现,常用的类有ArrayList、Vector、LinkedList、Stack.

  • ArrayList与LinkedList的对比:
    (1)ArrayList适用于随机访问,LinkedList适用于顺序访问;
    (2)LinkedList更加适用于插入、删除大量元素的情形;
    (3)两者都是线程不安全的
  • 如果在多线程的程序中要使用到集合框架,并且不希望线程与线程之间相互干扰,那么Vector是不错的选择,Vector是线程安全的。

Map

Map中,key值是唯一的(不能重复),而key对象是与value对象关联在一起的

Map接口有两个实现:

  • HashMap — key/value对是按照Hash算法存储的
  • TreeMap — key/value对是排序(按key排序)存储的

Iterator

迭代也叫遍历,对于有下标可通过for循环遍历即可,但是Set集合是没有下标的,为此Java提供了迭代器Iterator,专门用于集合的遍历。

  • 使用方法iterator()要求容器返回一个Iterator。
  • 使用next()获得序列中的下一个元素。
  • 使用hasNext()检查序列中是否还有元素。
  • 使用remove()将迭代器新返回的元素删除。
import java.util.ArrayList;import java.util.Iterator;import java.util.List;public class TestIterator {  public static void main(String[] args) {        List l = new ArrayList();          l.add("aa");          l.add("bb");          l.add("cc");          Iterator it = l.iterator();          while (it.hasNext()) {              String str = (String) it.next();              System.out.println(str);          }    }}  

Collections

注意:Colllections不是Collection的复数

区别:

  • Collection是接口,是List和Set的父接口
  • Collections是工具类,提供了排序,混淆等等很多实用方法

类Collections是一个包装类。它包含有各种有关集合操作的静态多态方法。此类不能实例化,就像一个工具类,服务于Java的Collection框架。

里面有一些常用的方法,示例代码如下:

import java.util.*;  public class Test{      public static void ret(Object obj)      {          System.out.println(obj);      }     public static void main(String [] args){          List<String> ls = new ArrayList<String>();           ls.add("aaa");          ls.add("bbb");          ls.add("ccc");          ls.add("ddd");          ret(ls);          Collections.sort(ls);          ret(ls);          String tmp = Collections.max(ls);          ret("max :"+tmp);          int index = Collections.binarySearch(ls,"bbb");          ret("index :" + index);            //替换           Collections.replaceAll(ls, "aaa","KK");          ret(ls);          //反转,逆置          Collections.reverse(ls);          ret(ls);          //fill 方法可以将list集合中所有元素转换成指定元素          Collections.fill(ls,"pp");          ret(ls);      }    }