• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

java集合(二)—集合框架与算法详解

java 搞代码 4年前 (2022-01-09) 17次浏览 已收录 0个评论

java集合(一)——数据结构详解:http://www.gaodaima.com/java-article-354226.html

框架是指一个类的集,在集中有很多超类和接口,这些超类中实现了很多高级的机制、功能和策略。框架的使用者可以创建子类来实现和扩展超类,而不用来重新创建这些基本的机制。在日常工作中,我们用到的技术基本都是框架,我们去使用那些包,去调用那些函数时都会用到这种框架的思想。在集合(一)中分析完集合的数据结构,今天我们就一起来继续讨论一下集合的框架。

(一)集合数据结构回顾

基本 类型 实现接口 说明
List 链表LinkedList Deque,List,Queue 通过存放前后结点的引用,实现双向链表
数组列表ArrayList List,RandomAccess 数据传入动态数组中,自动扩充数组大小
Set 散列集HashSet Set 哈希法存储数据,无序但查找时效率高
树集TreeSet NavigableSet,Set,SortedSet 按照一定方法排序,输出有顺序的集合
Queue 优先级队列PriorityQueue Queue 按照堆排序的方法排序的队列树
双端队列ArrayDeque Deque, Queue 可以在两端添加和删除,不能操作中间的队列
Map 散列表HashMap Map 用哈希法存放的,键值映射的表
树表TreeMap Map,NavigableMap,SortedMap 将键按照一定方法排序的表
注:前六种(不包括Map)都实现了Collection和Iterator接口,因为篇幅限制没有写出。

(二)视图

在集合类库中,我们已经用了非常大的比例来构建实现类的接口,那么这些接口有什么用呢?如果我们直接把接口中方法写在实现类中不也起到一样的效果么?实际情况远非我们想的这么简单,有很多复杂的东西需要我们通过这些接口来操作。比如,我们把某些类的公有接口类型的对象称为视图对象。这些对象的类型并不是具体的某个实现类,而是一些实现类的公有接口。视图有很多作用,主要本文来源[email protected]搞@^&代*@码)网5的有以下这几点:

1. 视图是轻量级的集包装器

我们可以通过方法,将普通数组包装成类型为List的视图对象。这个视图对象的类型是List,这听上去可能有些不可思议,因为List是一个接口,并不能实例化。但这就是视图对象的优势,这个视图对象可以通过一定的方法被赋予到任何实现了List接口的集合类中,比如常见的ArrayList、LinkedList等等,从而达到我们将一个普通类包装成集合类的目的。

package SetViews;import java.util.Arrays;import java.util.Collections;import java.util.LinkedList;/** *  * @author QuinnNorris * 视图是一个轻量级的集包装器,下面有两个例子 */public class Views {    /**     * @param args     */    public static void main(String[] args) {        // TODO Auto-generated method stub        //-----------------------例1----------------------        int[] arr = new int[10];        //创建一个普通的int数组        Arrays.asList(arr);        //通过asList方法,我们将一个普通的数组转换成List类型的视图对象。        //-----------------------例2-----------------------        List<String> ll = new LinkedList<>();         //创建一个LinkedList对象ll。        ll.addAll(Collections.nCopies(10, "ok"));                //nCopies是Collections类的静态方法,可以将“ok”复制10次,并返回一个List类型的视图对象。        //在这里我们不可以直接把Collections.nCopies的类型强转成LinkedList,因为语法不能上转下        //我们通过addAll方法将这个内容填充到LinkedList对象ll中。        ll.set(2, "no");        //我们看看它是否能正常工作,我们试着将第三个链表中的String换成no。        //请注意,链表最好不要使用get和set方法,这里只是为了实验。        for(String s : ll){            System.out.println(s);        }        //输出结果第三个是no,其他全是ok,没有任何问题。    }}

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:java集合(二)—集合框架与算法详解
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址