【JAVA基础】集合框架(collections framework)

        集合代表了一组对象(和数组一样,但数组长度不能变,而集合能)。java中的集合框架定义了一套规范,用来表示、操作集合,使具体操作与实现细节解耦。

        其实说白了,可以把集合看成一个微型数据库,操作不外乎“增删改查”四种操作,我们在学习使用一个具体的集合类时,需要把四个操作的空间复杂度弄清楚了,基本上就可以说掌握这个类了。

集合和数组的区别

1、长度限制

        数组长度是固定不变的,集合的大小是可动态变化的

2、存储类型之别

        一个数组存储的元素可以是基本类型,也可以是引用类型,且只能存储同一种类型的元素;一个集合存储的元素只能是引用类型,但集合可以存储不同类型的元素(但集合一般存储同一类型,可以用泛型加以控制)

Java集合框架体系

        java的集合类主要由两个接口派生:Collection和Map,Collection和Map是java集合框架的父接口,这两个接口又包含了一些接口或实现类。


Collection接口

(1)是List、Set和Queue接口的父接口

(2)定义了可用于操作List、Set和Queue的方法--增删改查

1、List接口及其实现类---ArrayList

(1)List(序列),元素有序,并且可重复

(2)List可以青雀控制元素的插入位置,或删除制定位置的元素

(3)ArrayList--数组序列,是List的一个重要实现类

(4)ArrayList地城是由数组实现的

注意:泛型集合中,不能添加泛型规定的类型及其子类型意外的对象,否则会报错。泛型集合中的限定类型,不能使用基本类型,必须用基本的包装类。

2、Set接口及其实现类--HashSet

(1)Set(集),元素无序,并且不可以重复

(2)HashSet--哈希集,是Set的一个重要实现类


Collection接口定义操作集合元素的具体方法大家可以参考API文档,这里通过一个例子来说明Collection的添加元素、删除元素、返回集合中元素的个数以及清空集合元素的方法

public class TestCollection
{
    public static void main(String[] args) 
    {
        Collection c = new ArrayList();
        //添加元素
        c.add("孙悟空");
        //虽然集合里不能放基本类型的值,但Java支持自动装箱
        c.add(6);

        System.out.println("c集合的元素个数为:" + c.size());
       
     //删除指定元素
        c.remove(6);
       
     System.out.println("c集合的元素个数为:" + c.size());
        //判断是否包含指定字符串
        System.out.println("c集合的是否包含孙悟空字符串:" + c.contains("孙悟空"));

        c.add("轻量级J2EE企业应用实战");

        System.out.println("c集合的元素:" + c);        

     Collection books = new HashSet();

        books.add("轻量级J2EE企业应用实战");
        books.add("Struts2权威指南");

        System.out.println("c集合是否完全包含books集合?" + c.containsAll(books));

        //用c集合减去books集合里的元素
        c.removeAll(books);

        System.out.println("c集合的元素:" + c);

        //删除c集合里所有元素
        c.clear();

        System.out.println("c集合的元素:" + c);

        //books集合里只剩下c集合里也同时包含的元素
        books.retainAll(c);

        System.out.println("books集合的元素:" + books);
    }
}

Map接口

(1)Map提供了一种映射关系,元素是以键值对(key-value)的形式存储的,能根据key快速查找value

(2)Map中的键值对以Entry类型的对象实例形式存在

(3)key值不能重复,value值可以重复

(4)key对value是多(一)对一的关系

(5)Map接口提供了返回key值集合、value值集合、Entry值集合,的方法

(6)Map支持返回,形式如:Map<K,V>

HashMap类

(1)HashMap是Map的一个重要实现类,也是最常用的,是基于哈希表实现

(2)HashMap中的Entry对象是无序排列的

(3)Key值和value值都可以为null,但是一个HashMap只能有一个Key值为null的映射(Key值不可重复)

// 创建HashMap集合类,其操作泛型为Sring数据类型  
    HashMap<string, string=""> map = new HashMap<string, string="">();  
    map.put("01", "关羽");  
    map.put("02", "关羽");  
    map.put("03", "关羽");  
/** 
 * Map集合获取元素的两种方式,(原理:将map集合转换成set,再使用迭代器) 
 * 1、keySet:将map中所有的键存入到set(set具备迭代器)集合,在根据get方法, 
 *    获取每一个健对应的值 。  
 * 2、entrySet 
 */  
// 1、通过KeySet()方法获取map集合中所有键Set集合  
    Set<string> set = map.keySet();  
    Iterator<string> iter = set.iterator();  
    while (iter.hasNext()) {  
        // 获取键key  
        String key = iter.next();  
        // 通过键key获取值(value)  
        String value = map.get(key);  
        System.out.println("key:" + key + " " + "value:" + value);  
    }  
// 2、使用for()循环获取key-value  
    for (String key : set) {  
        System.out.println("键:" + key + " " + "值:" + map.get(key));  
    }  
// 3、使用entrySet()方法,循环获取key-value  
    Set<entry<string, string="">> entrySet = map.entrySet();  
    Iterator<entry<string, string="">> iter1 = entrySet.iterator();  
    // 简写: Iterator<entry<string, string="">> iter1=map.entrySet().iterator();  
    while (iter1.hasNext()) {  
        Entry<string, string=""> en = iter1.next();  
        String key = en.getKey();  
        String value = en.getValue();  
        System.out.println("键1:" + key + " " + "值1:" + value);  
    }  
    // 获取Map值(value)视图  
    Collection coll = map.values();  
    Iterator iter2 = map.values().iterator();  
    while (iter2.hasNext()) {  
        System.out.println("遍历获取value值:" + iter2.next());  
    }


Set、List和Map可以看做集合的三大类:

List集合使有序集合,集合中的元素可以重复,访问集合中的元素可以根据元素的索引来访问。

Set集合使无序集合,集合中的元素不可以重复,访问集合中的元素只能根据元素本身来访问(也是集合里的元素不允许重复的原因)。

Map集合中保存Key-value对形式的元素,访问时只能根据每项元素的key来访问其value。



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 89
    评论
评论 89
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值