美文网首页
Java基础之集合

Java基础之集合

作者: 小任务大梦想 | 来源:发表于2018-04-27 17:56 被阅读0次

    什么是集合?

            集合类存放在java.util包中,集合主要分为Collection和Map(映射)2个基本接口 ,Collection接口分别被List和Set继承。List接口是一个允许存在重复元素的有序集合。Set接口是一个不允许存在重复元素有序集合,但对增删改查有很高的效率,由于元素不允许重复,所以必须重写equles()方法进行比较。Map接口是用来控制键值对的(key/value),不允许出现重复的键,且key和value存在单向一对一的关系。key是用来检索值得对象。

    集合图例

    Collection接口有两个基本的方法add()iterator()【迭代器】


            add()方法用于向集合中添加元素,如果添加的元素使集合发生了改变,则返回true,反之,返回false。如果向集合中添加添加一个对象,但是该对象已经在集合中存在了,则这个请求就没有实效,因为集合中是不允许有重复的对象


            iterator(),该方法实现了Iterator接口,可以使用iterator()方法依次访问集合中的对象。Iterator接口包含了三个方法,next(),hasNext(),remove()。调用next()方法可以逐个访问集合中的元素,但是如果访问到最后一个元素,则会抛出NoSunchElementException的异常,所以next()方法应该和hasNext()方法配合使用。hasNext()方法返回boolean类型的值。例如:

    正常运行 抛出NoSunchElementException异常

    同时运用“for each”循环可以更加简单的表示同样的循环操作。或者以更简单的方式实现循环操作

    循环操作

    元素被访问的顺序取决于集合的类型。如果对ArrayList进行迭代,迭代器将从索引0开始,每迭代一次,索引值就加1,如果访问的是HashSet中的元素,每个元素将会按照某种随机次序出现。

    Iterator接口的remove()方法,是用来删除上一个调用next()方法后返回的元素,并且这两个方法是相互依赖的,在调用remove()之前没有调用next()会抛出IllegalStateException异常。

    除上述两种基本方法外,Collection接口还提供了int size(),boolean removeAll(),boolean isEmpty(),void clear(),toArray()等等很多方法,这里就不做一一介绍了。


    List接口

            List接口是一个有序集合,元素可以添加到容器中的某个特定的位置,LIst接口定义了add(),remove(),get()随机访问的方法,这些随机访问方法并不管它们对某种特定的实现是否高效。但是RandomAccess标记接口可以用来检测一个特定的集合是否支持高效的随机访问。ArrayList类和Vector类都实现了此接口。

    什么是ArrayList?什么是LinkedList?什么是Vector?它们有什么异同?

    List是一个有序集合。ArrayList和LinkedList都实现了List接口。且都是线程不安全。其中ArrayList是一种可以动态增长和缩减的索引序列。它采用的是数组的形式来保存数据的,将对象放在连续的位置中存储,所以插入数据和删除数据的效率低,但是索引数据的效率高,可快速定位元素的位置。而 LinkedList 使用双向链表实现存储,按序号索引数据需要进 行前向或后向遍历,比ArrayList消耗更多的内存,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。Vector是Java第一版遗留下来的类,Vector和ArrayList一样也是使用数组的形式来存储数据的,与ArrayList的用法几乎完全相同,但Vector使用sychronized方法(线程安全),所有性能要稍低于ArrayList类。


    Set接口

            set接口是不允许重复元素存在的有序结合,它的add方法拒绝添加重复的元素。集的equals方法定义两个集相等的条件是它们包含相同的元素但是顺序不必相同,hashCode方法定义应该保证具有相同元素的集将会得到相同的散列码。

    HashSet与TreeSet

    HashSet创建一个类集,该类集运用散列表进行存储,它不保存元素的加入顺序

    HashSet使用

    由上面的图例看出元素并没有按照顺序存储。如果需要排序存储,需要用到另一个类集-----TreeSet。TreeSet的对象是按升序来存储的,访问和检索的效率是很高的。

    TreeSet自动排序

    正如上图所示,TreeSet按树存储其元素,因此它们被按照排序次序自动排序。


    Map接口

    Map接口映射唯一关键字到值。关键字是以后用于检索值得对象。可以使用keySet()方法【键集合】来获得所有键的类集"视图",是实现了Set接口的某个其他类的对象。可以values()【值集合】方法获得所有值得类集"视图"。entrySet()方法返回包含了映射中项的集合,该集合包含了类型Map.Entry对象,entrySet()【键值对集合】方法返回Map.Entry对象的集视图,即映射表中的键值对集合”。

    对keySet(),values(),entrySet()方法的应用

    映射表的操作过程:

    1、将键值对添加到映射表中。 

    2、从映射表找那个删除一个键,同时键对应的值也将被删除。

    3、修改与某一键对应的值,并调用get()方法查看这个值。

     4、对条目集进行迭代。

    映射表操作过程

     Hashtable 与 HashMap

    HashMap 与 Hashtable 都实现的 Map 接口,HashTable与HashMap一样,也是将键值对存储到散列表中,但HashTable 是线程安全,HashMap 线程不安全。并且HashMap允许空(null)键值(key)但是Hashtable不允许,由于HashMap非线程安全,在只有一个线程访问的情况下,效率要高于Hashtable。  


    Collection 和 Collections的区别。   

    Collection是集合类的上级接口,继承它的接口主要有Set 和List. Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作,并且这些方法的参数和返回值都是集合。




    相关文章

      网友评论

          本文标题:Java基础之集合

          本文链接:https://www.haomeiwen.com/subject/rnuylftx.html