java的类集框架

来源:互联网 发布:日本wonderchef 知乎 编辑:程序博客网 时间:2024/05/02 23:46


类集就是一个动态对象数组,可以存放基本数据类型,也可以存放对象,Java中实现类集的包是java.util.*,使用类集必须先导入这个包 import java.util.*;

三大集合:List、Set、Map

 类集就是一个动态对象数组,可以存放基本数据类型,也可以存放对象,Java中实现类集的包是java.util.*,使用类集必须先导入这个包 import java.util.*;

三大集合:List、Set、Map

 

概述:

保存单个值的集合:Collection,它有两个子类List,Set

  |-List :允许有重复元素,有序(按输入的顺序存放和输出)

      |-ArrayList:异步处理,只能用Iterator输出

           |-LinkedList:使用链表结构的集合

      |-Vector:同步处理,能用Iterator和Enumeration同时输出

  |-Set: 不允许有重复元素

      |-HashSet:散列,无序

      |-TreeSet:有序,按Compareable接口排序,由小到大

保存一对值:Map

  |-HashMap:异步处理的,新类

  |-Hashtable:同步处理,旧类

  |-TreeMap:按Key进行排序的集合

输出:|-Iterator:新的输出类,方法名称短,一般多用它输出

      |-Enumeration:旧的输出类,方法名称长,少用

 

1.Collection接口:在开发中一般都不直接使用它,而使用它的子接口List、Set

List实现由它的ArrayList类完成,ArrayList继承AbstractList类并实现List接口,ArrayList是动态数组, 采用异步处理方式,有序(按输入顺序排放),数据可以重复,由于用数组实现,所以查询快,增删慢

创建: List list=new ArrayList();

加入数据:add(Object obj);加入数据的顺序就是输出数据的顺序 

删除数据:remove(Object obj);

 

LinkedList类提供了链表数据结构,其操作与ArrayList无异,由于用链表实现,所以增删快,查询慢

两者都使用Iterator(迭代器,循环器)输出,因为集合的长度不固定,所以Iterator采用一个一个的判断输出,有则输出。判断是否有下一个元素:hasNext()      取内容:next()

如果想让集合中指加入某一种对象,使用泛型<E>  List<String> list=new ArrayList<String>这样只能存放字符串对象

List的另一个子类:Vector,它是同步的,线程安全,但是效率低

Collection集合的主要操作方法:add(),remove(),size(),iterator(),get()

 

2.HashSet类继承AbstractSet类并且实现Set接口,无序,散列存放,数据不可以重复 Set set=new HashSet();

Set的使用基本与List一致,但是HashSet是无序的,如果希望存放时有序的,使用TreeSet,自动排序(与List不一样),它使用了Compareable接口排序。

 

注:HashSet的底层是由HashMap实现的

 

Java类集框架

 

 

 

 

3.Map相当于电话本,通过键值一一对应,key-value,Map的主要功能是作为查找使用,而不是输出使用,

 Map map=new HashMap()     Map存放数据的方法:put(key,value)     取数据的方法:get(key)

Map接口的对象不能直接使用Iterator输出,如果非要使用Iterator对象输出集合中的内容,使用一下步骤:

               Map—Set—Iterator—Map.Entry—key,value

 

TreeMap与HashMap无异,但是它可以对数据进行排序,可以快速检索

Hashtable与HashMap类似,但Hashtable是同步的,同时不支持迭代函数(iterator)

 

4.Enumeration枚举类(一一列出所有可能),与Iterator功能相同,都是输出集合中的内容,List和Set都不能使用Enumeration输出,但是List的一个子类Vector可以使用它输出。

Vector v=new Vector();      Enumeration e=v.elements();

判断是否有下一个内容:hasMoreElements    取值:nextElement()

 

5.栈是一个先进后出的存储结构,进栈(push),出栈(pop)

 

 

属性类:Properties,与Hashtable不同的是,它主要保存字符串,而Hashtable保存对象。

存数据:setProperty(key,value)    取数据getProperty(key)



概述:

保存单个值的集合:Collection,它有两个子类ListSet

  |-List :允许有重复元素,有序(按输入的顺序存放和输出)

      |-ArrayList:异步处理,只能用Iterator输出

           |-LinkedList:使用链表结构的集合

      |-Vector:同步处理,能用IteratorEnumeration同时输出

  |-Set 不允许有重复元素

      |-HashSet:散列,无序

      |-TreeSet:有序,按Compareable接口排序,由小到大

保存一对值:Map

  |-HashMap:异步处理的,新类

  |-Hashtable:同步处理,旧类

  |-TreeMap:按Key进行排序的集合

输出:|-Iterator:新的输出类,方法名称短,一般多用它输出

      |-Enumeration:旧的输出类,方法名称长,少用

 

1.Collection接口:在开发中一般都不直接使用它,而使用它的子接口List、Set

List实现由它的ArrayList类完成,ArrayList继承AbstractList类并实现List接口,ArrayList是动态数组, 采用异步处理方式,有序(按输入顺序排放),数据可以重复,由于用数组实现,所以查询快,增删慢

创建: List list=new ArrayList();

加入数据:add(Object obj);加入数据的顺序就是输出数据的顺序 

删除数据:remove(Object obj);

 

LinkedList类提供了链表数据结构,其操作与ArrayList无异,由于用链表实现,所以增删快,查询慢

两者都使用Iterator(迭代器,循环器)输出,因为集合的长度不固定,所以Iterator采用一个一个的判断输出,有则输出。判断是否有下一个元素:hasNext()      取内容:next()

如果想让集合中指加入某一种对象,使用泛型<E>  List<String> list=new ArrayList<String>这样只能存放字符串对象

List的另一个子类:Vector,它是同步的,线程安全,但是效率低

Collection集合的主要操作方法:add(),remove(),size(),iterator(),get()

 

2.HashSet类继承AbstractSet类并且实现Set接口,无序,散列存放,数据不可以重复 Set set=new HashSet();

Set的使用基本与List一致,但是HashSet是无序的,如果希望存放时有序的,使用TreeSet,自动排序(与List不一样),它使用了Compareable接口排序。

注:HashSet的底层是由HashMap实现的

 


 

3.Map相当于电话本,通过键值一一对应,key-value,Map的主要功能是作为查找使用,而不是输出使用,

 Map map=new HashMap()     Map存放数据的方法:put(key,value)     取数据的方法:get(key)

Map接口的对象不能直接使用Iterator输出,如果非要使用Iterator对象输出集合中的内容,使用一下步骤:

               Map—Set—Iterator—Map.Entry—key,value

TreeMap与HashMap无异,但是它可以对数据进行排序,可以快速检索

Hashtable与HashMap类似,但Hashtable是同步的,同时不支持迭代函数(iterator)

 

4.Enumeration枚举类(一一列出所有可能),与Iterator功能相同,都是输出集合中的内容,List和Set都不能使用Enumeration输出,但是List的一个子类Vector可以使用它输出。

Vector v=new Vector();      Enumeration e=v.elements();

判断是否有下一个内容:hasMoreElements    取值:nextElement()

5.栈是一个先进后出的存储结构,进栈(push),出栈(pop)

属性类:Properties,与Hashtable不同的是,它主要保存字符串,而Hashtable保存对象。

存数据:setProperty(key,value)    取数据getProperty(key)

 

 

主要有两大类。CollectionMap

1.Collection

Collection是一个集合的接口,他下面的子类有:

1.1 List接口:有序,有索引,可重复

1.1.1 ArrayList:底层以数组实现,增删满,查询快,不同步

1.1.2 LinkedList:底层以链表实现,增删快,查询满,不同步

1.1.3 Vector:以数组实现,被ArrayList取代,线程同步

Note:对于是否存在以及删除等操作,依赖的方法是元素的HashCode()equals()方法;

ArrayList对于判读存在以及删除等,用的只有equals()方法

1.2 Set接口:无序,无索引,不可重复

1.2.1 HashSet无序,不重复,高效,底层以哈希表实现。不同步

保证元素唯一性的实现原理:HashCode方法和equals方法,如果HashCode相同,直接存入;如果HashCode的值相同,则调用equals方法,看是不是返回true,如果true就是相同元素了。

1.2.1.1 LinkedHashSet:有序,是HashSet的子类

1.2.2 TreeSet有序,不重复,底层以二叉树实现。不同步

保证元素唯一性的实现原理:ComparablecompareTo()方法的返回值。

TreeSet的排序方法:

1.默认方法:自然排序,通过实现Comparable接口compareTo()方法来完成

2.比较器:如果添加的元素本身不具备可比较性或是不是自己想要的比较方式,将比较器作为参数传递进去。

通过实现Comparator接口的compare()方法,当主要条件相同时,比较次要条件

如果同时存在两种排序方法,采用第二种

2.Map

Collection的单一元素不同,Map存储的是键值对元素,他下面的子类有:

2.1 HashTable:有序,不可存Null的值和键,同步

PropertiesHashTable的子类,他是集合和IO流的结合产物,可以保存在流中或者从流中加载

2.2 HashMap:底层以哈希表实现,可存Null值的键值对,无序(只能自定义通过key排序),高效,不同步

2.3 TreeMap;底层以二叉树实现,可排序,不同步

 

0 0