文档章节

Java 复习 —— 集合

learn_more
 learn_more
发布于 2015/08/05 15:35
字数 1007
阅读 93
收藏 12

1、类的基本结构

Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set

    |-HashSet

    |-TreeSet


Map
├Hashtable
├HashMap
└WeakHashMap


2、基本概念

0)Collection : 顶层接口,它都支持一个iterator()的方法,该方法返回一个迭代子,使用该迭代子即可逐一访问Collection中每一个元素。public interface Collection<E> extends Iterable<E>

1)Set(集合):集合中的对象不按特定方式排序,并且没有重复对象。它的有些实现类(TreeSet)能对集合中的对象按特定方式排序。
2)List(列表):集合中的对象按索引位置排序,可以有重复对象,允许按照对象在集合中的索引位置检索对象。
3)Map(映射):集合中的每一个元素包含一对键对象和值对象,集合中没有重复的键对象,值对象可以重复。


3、实现类的重要区别

1)ArrayList 和Vector是采用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,都允许直接序号索引元素,但是插入数据要设计到数组元素移动等内存操作,所以索引数据快插入数据慢;这就是线性表的顺序表的优点和缺点,即查询快,删除、插入较慢。

2)Vector由于使用了synchronized方法(线程安全)所以性能上比ArrayList要差,但是在一些安全方法里面他是很有用的。想要把一个List作为同步的线性表时,可以这样使用:Collections.synchronizedList(list);

3)LinkedList使用双向链表实现存储,按序号索引数据需要进行向前或向后遍历,但是插入数据时只需要记录本项的前后项即可,所以插入数度较快!这就是线性表的链表的优点和缺点,即查询慢,但是删除插入快。可以用它作为队列。

4)Stack继承自Vector,实现一个后进先出的堆栈。Stack提供5个额外的方法使得Vector得以被当作堆栈使用。基本的push和pop方法,还有peek方法得到栈顶的元素,empty方法测试堆栈是否为空,search方法检测一个元素在堆栈中的位置。Stack刚创建后是空栈。

5)Queue 是一个Collection的子接口,Deque 是1.6 新增的接口继承了Queue接口,他的子类主要就是完成队列的栈的功能,相比之前的采用Stack或List(LinkedList实现了Deque)作为队列与栈效果都要好,而且,Deque 是可以同时作为队列和堆栈,他与List的一个很大区别是他没有Index索引查找元素。所以,如果需要使用队列或堆栈时可以考虑Deque的子类:ArrayDeque

6)Set的实现其实和Map有着重大关系,看源代码你就会发现,Set就是Map的key部分,Map的value则是一个常量替代。


4、其他注意事项

注意,开始学习的时候大家都认为,集合给我们最大的好处就是什么对象都可以存入,如果是数组的话只能存入特定类型的对象,其实这个特点是集合的缺点,这也就是为什么有泛型的出现,对于数组来说,集合的最大有点是集合可以边长存储元素!!如果是一个Object类型的数组不也一样可以存储任何数据类型的对象吗?但是这样又有什么用呢?类型转换是一个危险操作。


5、集合遍历与删除

 private void print(Collection<String> list ){
  Iterator<String> iter = list.iterator();
  while(iter.hasNext()){
   String str = iter.next();
   if(str.equals("key")){
    iter.remove();
   }
  }
 }

不能采用其他方式的for循环删除元素,否则会发生异常:java.util.ConcurrentModificationException

© 著作权归作者所有

上一篇: Java 复习 —— OOP
下一篇: jQuery Ajax 使用
learn_more
粉丝 93
博文 240
码字总数 210196
作品 0
深圳
程序员
私信 提问
JAVA基础再回首(三十)——JAVA基础再回首完美结束,感概万千!

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m366917/article/details/52724939 JAVA基础再回首(三十)——JAVA基础再回首完美结束,感概万千! 经过了几...

Aduroidpc
2016/10/02
0
0
java的class类文件结构

利用五一小假期,看了一下java的类class文件结构,在此记录一下学习笔记。 字节码 程序的存储格式。语言无关。 跨平台。 class文件 — 概述 包含了Java虚拟机指令集和符号表,以及若干其他辅...

小王穷遊
2018/05/01
0
0
复习 2 个月拿下大厂 Offer,Java 面试指南带你通关跳槽季

作者 | 码匠笔记 责编 | 仲培艺 去年的这个时候,笔者通过两个月的复习拿到了阿里巴巴的 Offer,有一些运气,也有一些心得,借着跳槽季来临特此分享出来。本文既是复习思路,亦可当做学习思路...

CSDN资讯
02/16
0
0
【目录导航】JAVA零基础进阶之路

【JAVA零基础入门系列】(已完结)导航目录 Day1 开发环境搭建 Day2 Java集成开发环境IDEA Day3 Java基本数据类型 Day4 变量与常量 Day5 Java中的运算符 Day6 Java字符串 Day7 Java输入与输出...

MFrank
2018/06/21
0
0
Java程序员从笨鸟到菜鸟之——总结和声明

前段时间经过大约二十天的时间把javaSE的内容总结了一下,最近由于个人原因和一些乱七八糟的事情,一直没在更新,首先感谢那些一如既往支持我的朋友。最近不知道为什么,一直很懒,做东西也一...

长平狐
2012/11/12
98
0

没有更多内容

加载失败,请刷新页面

加载更多

Python爬虫也能用手机进行抓包?没错!这个技巧我只告诉你

今天要说说怎么在我们的手机抓包 我们知道了 HTTP 的请求方式 以及在 Chrome 中摸清了一些套路 但是 除了对数据进行解析之外 有时候我们想 对请求的数据或者响应的数据进行篡改 怎么做呢? ...

计算机编程
20分钟前
1
0
趣图:听说996工作可以获得巨大成长

听说996工作可以获得巨大成长 。 。 。 这成长也忒快了吧 扩展阅读 趣图:菜鸟程序员的工作状态… 趣图:当计算机可以更新的时候 趣图:什么?需求文档又改了

Java面经
23分钟前
3
0
influxdb 学习

InfluxDB 学习 安装 brew install influxdb 启动 influxd -config /usr/local/etc/influxdb.conf 入门 $ influx -precision rfc3339Connected to http://localhost:8086 version 1.2.xI......

solate
29分钟前
3
0
快速掌握mongoDB(三)——mongoDB的索引详解

  1 mongoDB索引的管理      2 mongoDB中常用的索引类型      1 单键索引      2 复合索引      3 多键索引      4 哈希索引      3 mongoDB中常用的索引属性   ...

SEOwhywhy
30分钟前
1
0
JackJson中自定义JsonSerializer的使用

最近在做一个需求,一个时间字段,数据库类型为timestamp,默认值为'1970-01-01 08:00:01',产品要求这种情况展示为“-1”,实体类中的属性类型为Date,我也不能把Date属性值设置为“-1”,又...

Coder顾
32分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部