zoukankan      html  css  js  c++  java
  • java中List、Set和Map三个接口及其主要实现类

    三个接口都在java.util包下

    List与Set具有相似性,它们都是单列元素的集合,所以,它们有一个共同的父接口,叫Collection,Map没有继承Collection接口

    1、List接口:

    List表示有先后顺序的集合,一个对象可以被反复存储进List中,每调用一次add方法,这个对象就被插入进集合中一次

    其实,并不是把这个对象本身存储进了集合中,而是在集合中用一个索引变量指向这个对象,当这个对象被add多次时,即相当于集合中有多个索引指向了这个对象

    List除了可以用Iterator接口取得所有的元素,再逐一遍历各个元素之外,还可以调用get(index i)来明确说明取第几个。

    常用方法:add()、remove()等

    主要实现类:ArrayList、Vector、LinkedList

    • Vector是线程安全的,也就是说是它的方法之间是线程同步的(synchronized)
    • ArrayList是线程不安全的,它的方法之间是线程不同步的,因为它不考虑线程安全,效率会高些
    • LinkedList也是线程不安全的,LinkedList提供了一些方法,使得LinkedList可以被当作堆栈和队列来使用

    ArrayList与Vector都有一个初始的容量大小,当存储进它们里面的元素的个数超过了容量时,就需要增加ArrayList与Vector的存储空间

    Vector默认增长为原来两倍,而ArrayList的增长策略在文档中没有明确规定(从源代码看到的是增长为原来的1.5倍)

    2、Set接口:

    Set里面不允许有重复的元素,即不能有两个相等(通过equals()判断),内部排序

    Set取元素时,不能细说要取第几个,只能以Iterator接口取得所有的元素,再逐一遍历各个元素

    常用方法:add()、remove()等

    3、Map接口:

    Map与List和Set不同,它是双列的集合,Map中存储的数据是没有顺序的,其中有put方法,定义如下:put(obj key,obj value),每次存储时,要存储一对key/value

    不能存储重复的key,这个重复的规则也是按equals比较相等,取则可以根据key获得相应的value,即get(Object key)返回值为key所对应的value,它的值是可以有重复的

    另外,也可以获得所有的key的结合,还可以获得所有的value的结合,还可以获得key和value组合成的Map.Entry对象的集合

    常用方法:put()、remove()等

    主要实现类:HashMap、Hashtable

    • HashMap是Hashtable的轻量级实现,Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的
    • HashMap允许将null作为一个entry的key或者value,而Hashtable不允许
    • HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解
    • Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的
  • 相关阅读:
    学点 C 语言(39): 函数 使用函数的代价与内联函数(inline)
    学点 C 语言(35): 函数 递归
    学点 C 语言(34): 函数 关于变量(auto、static、register、extern、volatile、restrict)
    学点 C 语言(37): 函数 常量(const)参数
    带进度的文件复制 回复 "冷风无泪" 的问题
    如何把一个程序中 Edit 中的文本赋给另一个程序的 Edit ? 回复 "Disk_" 的问题
    学点 C 语言(32): 函数 返回值
    博客园电子期刊2011年12月刊发布啦
    上周热点回顾(12.261.1)
    上周热点回顾(1.21.8)
  • 原文地址:https://www.cnblogs.com/yanguobin/p/11603938.html
Copyright © 2011-2022 走看看