Java中的集合框架

之前自己自学了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);  
    }    
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值