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

来源:互联网 发布:手机辅助软件 编辑:程序博客网 时间:2024/05/29 07:18

        集合代表了一组对象(和数组一样,但数组长度不能变,而集合能)。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
原创粉丝点击