以前一直对于java中容器的概念不理解,虽然学习过,但始终没有认真理解过,这几天老师提出了这样一个问题,你怎么理解java中的容器。瞬间就蒙了。于是各种搜资料学习了一下,下面是我学习后整理出来的的一些心得。欢迎各路大神指教

  在书写程序时,我们常常需要对大量的对象引用进行管理。为了实现有效的归类管理,我们常常将同类的引用放置在同一个数据容器中。

java容器的组成

  一、Collection接口:定义了存取一组对象的方法,他的子接口Set和List分别定义了存取方法。Set中的数据对象没有顺序且不可重复;List中的数据对象有顺序且可重复。List又被细分为LinkedList和ArrayList,LinkedList以链表的方式来存取数据,ArrayList是以数组方式来存储数据。

Collection接口定义的方法
返回值 方法名(参数类型 参数) 描述
int  size() 容器中对象的数目
boolean isEmpty() 是否为空
void clear() 清空
boolean contains(Object element) 是不是包含element对象
boolean add(Object element) 添加element的对象
boolean remove(Object element) 移除element对象
Iterator iterator() 返回一个Iterator对象,用于遍历容器中的对象
boolean containsAll(Collection c) 是否包含c容器中的所有对象
boolean addAll(Collection c) 把c容器中的所有对象添加到容器中
boolean removeAll(Collection c) 从容器中移除C容器中存在的所有对象
boolean retainAll(Collection c) 求当前的集合类与C容器的交集
Object[] toArray() 把容器中的所有对象转换到对应的数组中

    1、List:List容器的中的元素没有顺序,可以重复。List容器中的元素都对应一个整型序号记载着其在容器中的位置。List主要分为ArrayList和LinkedList,Vector是一个已经被弃用的类,因为他是线程同步的,而我们平时使用的时候都是非同步的,使用同步的坏处就是会在记录上加锁,防止多个程序访问同一条数据导致数据不同步。这样会导致访问速度变慢。Stack是满足“后进先出”规则的容器。

List常用方法
返回值 方法名(参数类型 参数) 描述
void sort(List) 对List中的元素进行排序
void shuffle(List) 对List中的元素进行随机排序
void reverse(List) 对List中的元素进行逆袭排序
void fill(List, Object) 用一个特定的对象重写List容器
void copy(List dest, List src) 将src容器中的元素拷贝到dest容器中
int binarySearch(List, Object) 对顺序的List容器,采用折半查找法寻找特定的对象

       (1).LinkedList:其数据结构采用的是链表,这种结构的优势是删除和添加的效率很高,但随机访问元素时效率较ArrayList类低。可以实现所有的栈功能。

       (2).ArrayList:是一个可以动态增长的数组,其数据结构采用的是线性表,此种结构的优势是访问和查询十分方便,但添加和删除的时候效率很低。(底层是数组)

    2、Set:Set接口没有提供额外的方法,但实现了Set接口的容器类中的元素是没有顺序,并且不可以重复的。Set容器类似于数学中集合的概念。

       (1).HashSet:Set类不允许其中存在重复的元素(集),无法添加一个重复的元素。HashSet利用Hash函数进行了查询效率上的优化,其中contain()方法经常被调用,以用于判断相关元素是否被添加过。

       (2).TreeSet:底层使用的是红黑树。

    3、Queue(队列):是一个满足“先进先出”的数据结构。

LinkedList提供了方法支持队列操作,并实现了Queue接口,所以LinkedList是队列的一种实现。

  二Map接口:Map提供的是一种键值对的方式存储数据(键和值之间是一一对应的),Map的键值都可以为null。Map可以多维扩展,例如一个人拥有多个宠物,可以这样定义:Map<Person,List<pet>>

Map常用方法
返回值 方法名(参数类型 参数) 描述
Object put(Object key, Object value) 添加元素
Object get(Object key) 取出键值key对应的value值
Objest remove(Object key) 移除键值key对应的value值
boolean containsKey(Object key) 判断Map容器中是否存在键值key
boolean containsValue(Object value) 判断Map中是否存在value值
int  size() 返回Map容器的长度
boolean isEmpty() 判断Map容器是否为空
void clear() 清空Map容器

    (1)HashMap:提供了key-value的键值对的数据存储机制,可以很方便的通过键值查找相应的元素,而且通过Hash散列机制,查找很方便。

  Iterator接口:是一对象可以遍历并选择序列中的对象所有实现了Collection接口的容器都有一个iterator方法,用于返回一个实现了Iterator的对象。Iterator对象为迭代器,用于实现对容器中元素的遍历。

感谢为我提供学习资料、博客的大神们!!

java中容器的学习与理解的更多相关文章

  1. 2017.12.25 Java中面向对象思想的深刻理解

    今日内容介绍 1.面向对象思想 2.类与对象的关系 3.局部变量和成员变量的关系 4.封装思想 5.private,this关键字 6.随机点名器 01面向对象和面向过程的思想 * A: 面向过程与面 ...

  2. Java中的不可变类理解

    一.Java中的不可变类 不可变类(Immutable Objects):当类的实例一经创建,其内容便不可改变,即无法修改其成员变量. 可变类(Mutable Objects):类的实例创建后,可以修 ...

  3. 关于高淇JAVA中SORM总结学习笔记详细个人解释

    代码来源于高淇JAVA教学视频 谢谢高淇老师的教学. 因为自己在学习的过程中发现了很多困难点,总结下希望对自己接下来学框架提升.给像我一样得初学者方便. SORM框架是一个简单的ORM,关系对象映射, ...

  4. JAVA中关于并发的一些理解

    一,JAVA线程是如何实现的? 同步,涉及到多线程操作,那在JAVA中线程是如何实现的呢? 操作系统中讲到,线程的实现(线程模型)主要有三种方式: ①使用内核线程实现 ②使用用户线程实现 ③使用用户线 ...

  5. 关于Java中形参与实参的理解

    今天阅读了一个写的非常棒的博文,通过此博文再次复习了Java中参数传递的知识(即值传递与引用传递的区别).参考网站http://www.cnblogs.com/binyue/p/3862276.htm ...

  6. 浅谈对java中传参问题的理解

    之前用的c/c++比较多,在c/c++中对于传参类型,无外乎就是传值.传引用.传指针这几种.但在java中,由于没有指针类型,其传参的方式也发生了相应的变化.在网上找了找,按我之前的理解,java中传 ...

  7. java中传值方式的个人理解

    前言 这几天在整理java基础知识方面的内容,对于值传递还不是特别理解,于是查阅了一些资料和网上相关博客,自己进行了归纳总结,最后将其整理成了一篇博客. 值传递 值传递是指在调用函数时将实际参数复制一 ...

  8. 关于java中Static关键字的加强理解

    static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键字的用法和平常容易误解的地方,最后列 ...

  9. Java中的equals学习小结

    Java中的equals是十分重要的,和= =要区别开来,现在小结其主要内容,而且要将 = =和 equals列为重要的对比概念来学习 1.声明格式    public  boolean equals ...

随机推荐

  1. Git-基本操作(同SVN)

    本人拜读了廖雪峰老师关于Git的讲述后整理所得 1.创建版本库: 版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改.删 ...

  2. Python+Appium API

    1.contextscontexts(self): Returns the contexts within the current session. 返回当前会话中的上下文,使用后可以识别H5页面的控 ...

  3. android 如何获取当前的Activity类名

    比如友盟统计页面停留时间,咱们需要知道当前页面停留了多久. 一般我们都有一个父类Activity,用下面的方法可以获得完整的包名.类名结构 this.getLocalClassName() 输出如下: ...

  4. 安卓 和 IOS 的icon 尺寸

    安卓 36*36 48*48 72*72 96*96 IOS Icon.png – 57×57 iPhone (ios5/6) Icon@2x.png – 114×114 iPhone Retina  ...

  5. Http:设置 浏览器中MIME 类型

    http://www.163ns.com/zixun/post/4602.html 自定义MIME类型支持FLV的相关设置 网络空间支持FLV的相关设置其实很简单,就是自定义一个MIME类型 一般虚拟 ...

  6. GRUB2 分析 (三)

    接上一篇 从地址0x8200开始的是lzma_decompress.img.这是由startup_raw.S编译生成的.这个文件稍微复杂点.首先一开始就是个跳转指令: ljmp $0, $ABS(LO ...

  7. JavaScript的this指针到底指向哪?

    编程过程中,着实十分困扰this的指向性,经过查阅一番资料,终于搞清楚了,在这里总结一下,全文分为以下三个部分: 什么是this指针? this指针指向哪里? 何时使用this? 一 什么是this指 ...

  8. Flutter中集成Font Awesome

    1.添加引用 在 pubspec.yaml文件中,加入 font awesome的引用 dependencies: flutter: sdk: flutter # The following adds ...

  9. jquery 报错 $.cookie is not a function()

    jquery 报错 $.cookie is not a function() ——我是之前可以运行的项目,突然报这个错误,很奇怪. 这是jquery的cookie插件报错. 插件名: jquery.c ...

  10. 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 A题 Weather Patterns

    2017-09-25 15:49:45 writer:pprp 阅读理解,当时没有耐心去读,只要能读懂就大概可以做出来 题意如下: 有四种天气, State 1: snow State 2: rain ...